roiaware_pool3d
接口原型
mx_driving.roiaware_pool3d(Tensor rois, Tensor pts, Tensor pts_feature,
Union[int, tuple] out_size, int max_pts_per_voxel, int mode) -> Tensor
功能描述
将输入的点云特征在ROI框内进行池化
参数说明
rois (Tensor):输入的RoI框坐标与尺寸,数据类型为float32/float16,shape为[Roi_num, 7]。pts (Tensor):输入的点云坐标,数据类型为float32/float16,shape为[Pts_num, 3]。pts_feature (Tensor):输入的点的特征向量,数据类型为float32/float16,shape为[Pts_num, Channels]。out_size (Union):输出的RoI框内voxel的尺寸,数据类型为int或者tuple,shape为[out_x, out_y, out_z]。max_pts_per_voxel (int):每个voxel内最大的点的个数,数据类型为int。mode (int):池化的方式,0为maxpool, 1为avgpool,数据类型为int。
返回值
pooled_features (Tensor):池化得到的RoI框特征,数据类型为float32/float16,shape为[Roi_num, out_x, out_y, out_z, Channels]。
约束说明
- Roi_num <= 100
- Pts_num <= 1000
- Channels <= 1024
- 2 <= max_pts_per_voxel <=256,max_pts_per_voxel <= Pts_num
- out_x, out_y, out_z <=16
- 反向具有相同约束。
支持的型号
- Atlas A2 训练系列产品
调用示例
import torch
import math
import torch_npu
from mx_driving import roiaware_pool3d
import numpy as np
out_size = (5, 5, 5)
max_pts_per_voxel = 128
mode = 1
N = 40
npoints = 1000
channels = 1024
xyz_coor = np.random.uniform(-1, 1, size = (N, 3)).astype(np.float32)
xyz_size_num = np.random.uniform(5, 50, size = (1, 3))
xyz_size = (xyz_size_num * np.ones((N, 3))).astype(np.float32)
angle = np.radians(np.random.randint(0, 360, size = (N , 1))).astype(np.float32)
rois = np.concatenate((xyz_coor, xyz_size), axis=1)
rois = np.concatenate((rois, angle), axis=1)
rois = torch.tensor(rois).npu()
pts = np.random.uniform(-5, 5, size = (npoints, 3)).astype(np.float32)
pts = torch.tensor(pts).npu()
pts_feature = np.random.uniform(-1, 1, size=(npoints, channels)).astype(np.float32)
pts_feature = torch.tensor(pts_feature).npu()
pooled_features_npu = roiaware_pool3d(rois, pts, pts_feature, out_size, max_pts_per_voxel, mode)
pooled_features_npu.requires_grad = True
grad_out_tensor = torch.ones_like(pooled_features_npu)
pooled_features_npu.backward(grad_out_tensor)