开发者
资源
[object Object]

[object Object][object Object]undefined
[object Object]
  • 接口功能:ChamferDistance(倒角距离)的反向算子,根据正向的输入对输出的贡献及初始梯度求出输入对应的梯度。

  • 计算公式:

    假设有两个点集: xyz1=[B,N,2], xyz2=[B,M,2]

    • ChamferDistance(倒角距离)正向算子计算公式为:

      dist1i=Min((x1ix2)2+(y1iy2)2)x2,y2xyz2dist1_i=Min((x_{1_i}−x_2)^2+(y_{1_i}−y_2)^2),x_2, y_2∈xyz2 dist2i=Min((x2ix1)2+(y2iy1)2)x1,y1xyz1dist2_i=Min((x_{2_i}-x_1)^2+(y_{2_i}-y_1)^2),x_1, y_1∈xyz1

    • 反向算子即为对该公式求导,计算公式为:

      • dist1idist1_ix1ix_{1_i} 的导数 =2grad_dist1(x1ix2)=2*grad\_dist1*(x_{1_i}-x_2)

        其中:x1ixyz1x_{1_i}∈xyz1x2x_2是根据正向输出的id1的索引值从xyz2中取出距离最小的点的横坐标,单点求导公式如上,因为单点梯度更新的位置是连续的,所以考虑多点并行计算。

      • dist1iy1idist1_i 对y_{1_i} 的导数 =2grad_dist1(y1iy2)=2*grad\_dist1*(y_{1_i}-y_2)

        其中y1ixyz1y_{1_i}∈xyz1y2y_2是根据正向输出的id1的索引值从xyz2中取出距离最小的点的纵坐标,单点求导公式如上,因为单点梯度更新的位置是连续的,所以也可以考虑多点并行计算。

      • dist1idist1_ix2x_2的导数 =2grad_dist1(x1x2i)=-2*grad\_dist1*(x_1-x_{2_i})

        其中x2ixyz2x1x_{2_i}∈xyz2,x_1是根据正向输出的id1的索引值从xyz2中取出距离最小的点的横坐标,单点求导公式如上,因为单点梯度需要根据最小距离值对应的索引值去更新,所以这块无法并行只能单点计算。

      • dist1idist1_iy2y_2的导数=2grad_dist1(y1y2i)=-2*grad\_dist1*(y_1-y_{2_i})

        其中y2ixyz2y_{2_i}∈xyz2y1y_1是根据正向输出的id1的索引值从xyz2中取出距离最小的点的纵坐标,单点求导公式如上,因为单点梯度需要根据最小值对应的索引值去更新,所以这块也无法并行只能单点计算。

    对应dist2idist2_ix2ix_{2_i}x1x_1y2iy_{2_i}y1y_1的导数和上述过程类似,这里不再赘述。

    最终计算公式如下,i∈[0,n):

    gradxyz1[2i]=2grad_dist1(x1ix2)2grad_dist1(x1x2i)grad_xyz1[2*i] = 2*grad\_dist1*(x_{1_i}-x_2) - 2*grad\_dist1*(x_1-x_{2_i})

    gradxyz1[2i+1]=2grad_dist1(y1iy2)2grad_dist1(y1y2i)grad_xyz1[2*i+1] = 2*grad\_dist1*(y_{1_i}-y_2) - 2*grad\_dist1*(y_1-y_{2_i})

    gradxyz2[2i]=2grad_dist2(x1ix2)2grad_dist2(x1x2i)grad_xyz2[2*i] = 2*grad\_dist2*(x_{1_i}-x_2) - 2*grad\_dist2*(x_1-x_{2_i})

    gradxyz2[2i+1]=2grad_dist2(y1iy2)2grad_dist2(y1y2i)grad_xyz2[2*i+1] = 2*grad\_dist2*(y_{1_i}-y_2) - 2*grad\_dist2*(y_1-y_{2_i})

[object Object]

每个算子分为,必须先调用“aclnnChamferDistanceBackwardGetWorkspaceSize”接口获取入参并根据流程计算所需workspace大小,再调用“aclnnChamferDistanceBackward”接口执行计算。

[object Object]
[object Object]
[object Object]
  • 参数说明

    [object Object]

    [object Object]
  • 返回值

    aclnnStatus:返回状态码,具体参见

    第一段接口完成入参校验,出现以下场景时报错:

    [object Object]

    [object Object]
[object Object]
  • 参数说明

    [object Object]
  • 返回值

    aclnnStatus:返回状态码,具体参见

[object Object]
  • 确定性计算:
    • aclnnChamferDistanceBackward默认非确定性实现,支持通过aclrtCtxSetSysParamOpt开启确定性。
[object Object]

示例代码如下,仅供参考,具体编译和执行过程请参考

[object Object]