assign_score_withk

接口原型

mx_driving.assign_score_withk(Tensor scores, Tensor point_features, Tensor center_features, Tensor knn_idx, str aggregate='sum') -> Tensor

功能描述

根据knn_idx得到采样点及其邻居点的索引,计算point_featurescenter_features的差,并与scores相乘后在特征维度进行聚合,返回采样点的特征。

参数说明

  • scores (Tensor):权重矩阵的重要系数,数据类型为float32。Shape为[B, npoint, K, M],其中B为batch size,npoint为采样点的数量,K为一个样本点及其邻居点的数量之和,M为权重矩阵集合的规模。
  • point_features (Tensor):所有点的特征,数据类型为float32。Shape为[B, N, M, O],其中N为所有点的数量,O为特征数量。
  • center_features (Tensor):所有点的中心特征,数据类型为float32。Shape为[B, N, M, O]
  • knn_idx (Tensor):采样点及其邻居点的索引,数据类型为int64。Shape为[B, npoint, K]
  • aggregate (str):聚合方式,默认为sum,数据类型为str

返回值

  • output (Tensor):聚合后采样点的特征,数据类型为float32。Shape为[B, O, npoint, K]

算子约束

  • npointK都不大于N
  • aggregate参数取值当前仅支持sum
  • M * K <= 5000

支持的型号

  • Atlas A2 训练系列产品

调用示例

import numpy as np
import torch, torch_npu
from mx_driving import assign_score_withk
points = torch.from_numpy(np.random.rand(4, 100, 8, 16).astype(np.float32)).npu()
centers = torch.from_numpy(np.random.rand(4, 100, 8, 16).astype(np.float32)).npu()
scores = torch.from_numpy(np.random.rand(4, 64, 10, 8).astype(np.float32)).npu()
knn_idx = torch.from_numpy(np.array([[np.random.choice(100, size=10, replace=False)
                    for _ in range(64)] for _ in range(4)]).astype(np.int64)).npu()
grad_out = torch.from_numpy(np.random.rand(4, 16, 64, 10).astype(np.float32)).npu()
points.requires_grad = True
centers.requires_grad = True
scores.requires_grad = True
output = assign_score_withk(scores, points, centers, knn_idx, "sum")
output.backward(grad_out)