昇腾社区首页
中文
注册

昇腾支持的MMCV算子列表

当前昇腾NPU支持的MMCV算子列表请参考表1

表1 昇腾支持的MMCV算子支持列表

算子名称

CPU

昇腾设备

昇腾设备使用约束

ActiveRotatedFilter

  • 参数feature要求shape为5维,[*, *, num_orientations, h, w],支持fp16/fp32,不支持inf/nan等异常值
  • 参数indices要求shape为4维,[num_orientations, h, w, *],只支持int32,不支持inf/nan等异常值,取值生成方式请参考mmrotate/orconv.py

AssignScoreWithK

-

-

-

BallQuery

-

  • xyz:输入3D Tensor,支持fp16/fp32,shape为[M, K, 3],不支持inf/nan等异常值
  • center_xyz: 输入3D Tensor,支持fp16/fp32,shape为[ M, B, 3],不支持inf/nan等异常值
  • max_radius:输入最大半径,float
  • min_radius: 输入最小半径,float
  • sample_num: 输入最大采样点数,int
  • idx:输出3D Tensor,支持int32,shape为[M, B, sample_num],不支持inf/nan等异常值
  • center_xyz和xyz的差值需要在147.0以内,否则在计算距离时将会发生溢出,导致计算结果不正确
  • max_radius的取值需要大于等于0,sample_num的取值需要大于等于1

BBoxOverlaps

-

  • bboxes1: Tensor,支持fp32,shape为[M, 4],格式为<x1, y1, x2, y2>, <x1, y1>为左下角坐标,<x2, y2>为右上角坐标,小于1e8,不支持inf/nan等异常值
  • bboxes1: Tensor,支持fp32,shape为[N, 4],格式为<x1, y1, x2, y2>, <x1, y1>为左下角坐标,<x2, y2>为右上角坐标,小于1e8,不支持inf/nan等异常值
  • M > 0,N > 0,M与N不必相同
  • x1 < x2, y1 < y2

BorderAlign

-

-

-

BoxIouRotated

  • 输入bboxes1(N, 5),支持fp32,框数N不建议过大,尾轴5表征(x_center, y_center, width, height, angle),其中angle旋转角度采用弧度制,不支持inf/nan等异常值
  • 输入bboxes2(M, 5),要求同bboxes1
  • mode属性支持iou,aligned属性支持False,clockwise属性支持True
  • 算子实现涉及三角函数计算,小数位超4位或存在精度误差

BoxIouQuadri

-

-

CARAFE

-

-

-

ChamferDistance

-

  • xyz1:支持fp16,fp32,shape为[B, N, 3],不支持inf/nan等异常值
  • xyz2:支持fp16,fp32,shape和xyz1保持一致
  • 反向具有相同约束

CrissCrossAttention

-

-

-

ContourExpand

-

-

ConvexIoU

-

-

-

CornerPool

-

-

-

Correlation

-

-

-

Deformable Convolution v1/v2

  • input:支持fp32,shape为[N, out_channels, H_in, W_in],input中的值不支持inf、nan等异常值
  • offset:支持fp32,shape为[N, deform_groups * 2 * kH * kW, H_out, W_out],值域为[-1, 1]。其中,H_out = ( H_in - ( kH + ( kH - 1 ) * ( dilation - 1 ) ) + 2 * padding ) / stride + 1,W_out = ( W_in - ( kW + ( kW - 1 ) * ( dilation - 1 ) ) + 2 * padding ) / stride + 1
  • weight:支持fp32,shape为[out_channels, in_channels, kH, kW]
  • 参数deform_groups只支持等于1
  • 反向具有相同约束

Deformable RoIPool

-

  • x:Tensor,支持fp32,shape为[N, C, H, W],不支持inf/nan等异常值
  • rois:Tensor,支持fp32,shape为[num_rois, 5],不支持inf/nan等异常值
  • offset:Tensor,shape为[num_rois, 2, pooled_height, pooled_width],仅支持None
  • spatial_scale:float属性,值域范围[0, 1],默认值1.0
  • pooled_height和pooled_width:int属性,值域范围[0, 50]
  • sampling_ratio:int属性,值域范围[0, 20],默认值0
  • gamma:float属性,值域范围[0, 1],默认值0.1
  • 反向具有相同约束

DiffIoURotated

-

-

-

DynamicScatter

-

  • feats(Tensor):点云特征张量[N, C],仅支持两维,数据类型为float32,特征向量C长度上限为2048,不支持inf/nan等异常值
  • coors(Tensor):体素坐标映射张量[N, 3],仅支持两维,数据类型为int32,此处以x、y、z指代体素三维坐标,其取值范围为0 <= x, y <= 2048, 0 <= z <= 256
  • reduce_type(str):压缩类型。可选值为'max', 'mean', 'sum'。默认值为'max'

FurthestPointSample

-

  • points:仅支持fp32,shape为[B, N, 3],不支持inf/nan等异常值
  • numPoints: int,表征需要采样的点的,个数严格小于N
  • 第一个输入points_xyz的shape(batch, N, 3)的维度的总大小(batch x N x 3)不应该超过383166

FurthestPointSampleWithDist

-

  • points:支持fp32,shape为[B, N, N],值需要满足points[b, i, i] = 0,points[b, i, j ] = points[b, j, i],不支持inf/nan等异常值
  • 参数num_points:支持int32,代表采样点个数,需要小于N

GatherPoints

-

  • features输入shape为[ B, C, N],不支持inf/nan等异常值
  • indices输入shape为[B, M],取值不能超过N,不支持inf/nan等异常值
  • features和indices的B需要相同

GroupPoints

-

  • features:支持数据类型fp32,shape为[B, C, N],其中C小于等于1024,不支持inf、nan等异常值
  • indices:数据类型为int32,shape为[B, npoints, nsample],值域[0, N)
  • 反向具有相同约束

Iou3d

-

  • boxes :Shape必须为两维,且第二维必须为7,(N, 7),N < 10000,7维分别为([x, y, z, dx, dy, dz, heading]),其中dx, dy, dz代表长宽高,必须大于0,不支持inf/nan等异常值
  • scores :Shape必须为一维,且第一维必须和boxes第一维相等,(N),只支持fp32,值域范围[0, 1]
  • iou_threshold :float类型的属性,值域范围[0, 1]

KNN

-

  • xyz:仅支持fp32,shape为[B, N , 3]或[B, 3, N],由transposed控制,每个batch中的任意一个点到center_xyz对应batch中的任意一个点的距离必须在1e10f以内,不支持inf/nan等异常值
  • center_xyz:仅支持fp32,shape为[B, npoint , 3]或[B, 3, npoint],由transposed控制
  • transposed:bool,当transposed=True,xyz的shape为[B, 3, N],center_xyz的shape为[B, 3, npoint]
  • k:int,返回最近邻的个数,必须小于xyz中的数据量的大小N,必须大于0且小于100

MaskedConv

-

  • input:支持fp32,shape为[N, C, H, W],其中N仅支持等于1,不支持inf/nan等异常值
  • mask:支持fp32,shape为[N, H, W],其中N仅支持等于1,不支持inf/nan等异常值
  • weight:支持fp32,shape为[C, C, kernel_size, kernel_size],不支持inf/nan等异常值
  • bias:支持fp32,shape为[C],不支持inf/nan等异常值
  • 参数bias默认为True,暂时不建议使用bias=False的情况
  • 参数stride仅支持等于1
  • 若卷积输出shape为[N, C, H_out, W_out],卷积参数需要满足H_out = H且W_out = W。其中,H_out = ( H - ( kernel_size + ( kernel_size - 1 ) * ( dilation - 1 ) ) + 2 * padding ) / stride + 1,W_out = ( W - ( kernel_size + ( kernel_size - 1 ) * ( dilation - 1 ) ) + 2 * padding ) / stride + 1

MergeCells

-

-

-

MinAreaPolygon

-

-

-

ModulatedDeformConv2d

  • input:支持fp32,shape为[N, out_channels, H_in, W_in],input中的值不支持inf、nan等异常值
  • offset:支持fp32,shape为[N, deform_groups * 2 * kH* kW, H_out, W_out],值域为[-1, 1]。其中,H_out = ( H_in - ( kH + ( kH - 1 ) * ( dilation - 1 ) ) + 2 * padding ) / stride + 1,W_out = ( W_in - ( kW + ( kW - 1 ) * ( dilation - 1 ) ) + 2 * padding ) / stride + 1
  • mask:支持fp32,shape为[N, deform_groups * kH * kW, H_out, W_out]
  • weight:支持fp32,shape为[out_channels, in_channels, kH, kW]
  • bias:支持fp32,shape为[out_channels]
  • 参数deform_groups只支持等于1
  • 反向具有相同约束

MultiScaleDeformableAttn

-

  • 输入value(bs, num_keys, num_heads, embed_dims):支持数据类型fp16,fp32,不支持inf/nan等异常值,其中参数num_keys = sum((H * W).item() for H, W in value_spatial_shapes),参数num_heads当前支持取值范围在4~8,参数embed_dims当前支持取值范围在32~256,且为8的倍数
  • 输入value_spatial_shapes(num_levels, 2):支持数据类型int32,int64,为特征图宽和高,取值需要为正
  • 输入value_level_start_index(num_levels, ):支持数据类型int32,int64,其构造逻辑为:value_level_start_index = torch.cat((value_spatial_shapes .new_zeros((1, )), value_spatial_shapes .prod(1).cumsum(0)[:-1]))
  • 输入sampling_locations(bs, num_queries, num_heads, num_points, 2):支持数据类型fp16,fp32,为缩放系数,合理取值为大于0小于1.0,参数num_points当前支持取值范围在4~8
  • 输入attention_weights(bs, num_queries, num_heads, num_points):支持数据类型fp16,fp32,不支持inf/nan等异常值,为加权权重

NMS

  • boxes:Shape必须为两维,第二维必须为4,(N, 4),N < 10000,只支持float32,不支持inf/nan等异常值,且4维(x1, y1, x2, y2)必须满足 x1<x2,y1<y2
  • scores:Shape必须为一维,且第一维必须和boxes第一维相等,(N),只支持float32,不支持inf/nan等异常值,并且不包含重复值
  • iou_threshold:float类型的属性,值域为[0, 1]
  • offset:int类型的属性,只能是0或者1
  • score_threshold:float类型的属性,值域为[0, 1]
  • max_num:int类型的属性,大于等于0

NMSRotated

  • boxes:Tensor,支持fp32,shape为[N, 5],不支持inf/nan等异常值
  • scores:Tensor,支持fp32,shape为[N],不支持inf/nan等异常值
  • labels:Tensor,支持fp32,shape为[N],默认None
  • iou_threshold:float属性,值域范围[0, 1]
  • 角度处理存在精度损耗,临界场景存在一定概率取框偏差

NMSQuadri

-

-

PixelGroup

-

-

PointsInBoxes

  • boxes输入shape为[ B, M, 7],不支持inf/nan等异常值
  • pts输入shape为[B, npoints, 3],不支持inf/nan等异常值
  • 输入数据类型仅支持fp32,boxes参数的最后一维的第7个数据(索引从1开始)是旋转角,需要计算cos和sin,接口约束取值范围必须在(-65504,65504)之间,boxes和pts只支持batch=1,且boxes的个数在200以内

PointsInPolygons

-

  • points:Tensor,支持fp32,shape为[N, 2],N不超过2800,值域范围[10^(-10), 10^10]
  • polygons:Tensor,支持fp32,shape为[M, 8],值域范围[10^(-10), 10^10],保证输入的四个点数据顺序是顺时针或者逆时针排列
  • 不支持inf、nan等异常值

PSAMask

  • input:输入shape为4维[M, N, P, Q],数据类型为float32/float64,不支持inf/nan等异常值
  • psa_type:值为collect/distribute
  • mask_size:数据类型为tuple:(i, j),其中满足i * j == N
  • 反向具有相同约束

RotatedFeatureAlign

  • x输入shape为[N,C,H,W],输入数据类型仅支持fp32,不支持inf/nan等异常值
  • bboxes输入shape为[N,H,W,5],5表征中心点坐标、旋转框宽高与旋转角,输入数据类型仅支持fp32,不支持inf/nan等异常值
  • spatial_scale为0-1之间,points取值1或5,默认值为1
  • 反向具有相同约束

RoIPointPool3d

-

  • num_sampled_points:int属性,值域范围(0, N)
  • points:Tensor,支持fp16/fp32,shape为[B, N, 3],值域范围[2^(-63), 2^64],不支持inf/nan等异常值
  • point_features:Tensor,支持fp16/fp32,shape为[B, N, C],其中C等于3,值域范围[2^(-63), 2^64],不支持inf/nan等异常值
  • boxes3d:Tensor,支持fp16/fp32,shape为[B, M, 7],第三维前六个取值范围[2^(-63), 2^64],第七个值取值范围[0, π],不支持inf/nan等异常值
  • 数据类型为float32时,建议B小于100、N小于等于2640、M小于等于48、num_sampled_points小于等于48,个别shape值略微超过建议值无影响,但所有shape值均大于建议值时,算子执行会发生错误
  • 数据类型为float16时,建议B小于100、N小于等于3360、M小于等于60、num_sampled_points小于等于60,个别shape值略微超过建议值无影响,但所有shape值均大于建议值时,算子执行会发生错误
  • N/M的值越大,性能劣化越严重,建议N小于M的六百倍,否则性能可能会严重下降

RoIPool

-

  • input输入shape为[N,C,H,W],aicore目前只支持C轴为16倍数的情况,其余情况走aicpu,不支持inf/nan等异常值
  • roi输入为(batch_id, x1, y1, x2, y2),其中H>x2>x1,W>y2>y1,N>batch_id保证框是有效的,不支持inf/nan等异常值
  • spatial_scale为0-1之间
  • 输入数据类型仅支持fp32,反向具有相同约束。由于fp32只能表示小数点后6位,因此部分场景存在精度问题,且支持输入的feature_map内不存在相同值,如果输入的feature_map内存在相同值无法保证输出的最大值索引唯一
  • 反向具有相同约束

RoIAlignRotated

-

-

RiRoIAlignRotated

-

-

-

RoIAlign

  • input: Tensor,fp32,shape为[N, C, H, W],不支持inf/nan等异常值
  • rois: Tensor,fp32,shape为[B, 5], 其中,每一行的5个值中的第一个为对input首轴的索引,因此在[0, N-1], 其余四个为<x1, y1, x2, y2>, <x1, y1>为左下角的值,<x2,y2>为右上角的值,因此x1 < x2,y1 < y2
  • output_size: int32二元组,表示h,w,大于0
  • spatial_scale: fp32 值,大于0,默认为1.0
  • sampling_ratio: int32值,默认为0

RoIAwarePool3d

-

-

-

SAConv2d

-

-

-

SigmoidFocalLoss

-

  • pred:Tensor,支持fp32,shape为[N, M],需要满足M>1,输入值域范围[0, 1],不支持inf/nan等异常值
  • target:Tensor,支持int64,shape为[N, ],值域范围[0, M],不支持inf/nan等异常值
  • weight:Tensor,可选输入,支持fp32,shape为[M, ],值域范围[-1, 1],默认为None
  • reduction:str属性,可选输入none,mean或sum,默认为mean,不支持inf/nan等异常值
  • alpha:float属性,值域范围[0, 1],默认为0.25
  • gamma:float属性,值域范围[0, 5],默认为2.0
  • 反向增加如下约束:pred的shape为(N,M),需要满足,当N>1时,reduction取值不能为None

SoftmaxFocalLoss

-

SoftNMS

-

-

-

Sparse Convolution

-

-

-

Synchronized BatchNorm

-

-

-

ThreeInterpolate

-

  • features:支持fp16和fp32,shape为[B, C, M],不支持inf/nan等异常值
  • indices:支持int32,shape为[B, N, 3],值域为[0, M)
  • weight:支持fp16和fp32,shape为[B, N, 3],值域为[0, 1]
  • features、indices、weight三个参数数据大小请勿超过2^24

ThreeNN

-

  • source:支持fp32和fp16,shape为[B, N , 3],不支持inf/nan等异常值
  • target:支持fp32和fp16, shape为[B, npoint , 3],不支持inf/nan等异常值

TINShift

-

-

-

Voxelization

  • input: Tensor,fp32类型,代表KITTI Points,shape为[N, F],其中F>=3,前三个值代表点云的x、y、z坐标,不支持inf/nan等异常值
  • voxel_size: fp32,体素大小,3元组,代表x、y、z轴的体素大小
  • point_cloud_range,fp32,点云范围,6元组,[coor_x_min, coor_y_min, coor_z_min,oor_x_max, coor_y_max, coor_z_max],因此,coor_x_min < coor_x_max,coor_y_min < coor_y_max,coor_z_min < coor_z_max
  • max_num_points: int32,为-1或正整数
  • max_voxels: int32,为-1或正整数
  • 注意(coor_x_max-coor_x_min)/voxel_size_x <= 2048, (coor_y_max-coor_y_min)/voxel_size_y <= 2048, (coor_z_max-coor_z_min)/voxel_size_z <= 256
  • 极少数场景因芯片指令ULP差异而精度无法与竞品对齐

PrRoIPool

-

-

-

BezierAlign

-

-