已关闭
[Bug]: HardVoxelization 算子DrivingSDK 与 MMCV疑似存在精度问题 #166
zhangqi138创建于  2月25日关闭于  3月24日
zhangqi138
2月25日 创建

在提交新问题之前,请确保您已经在社区中搜索过相关问题,并使用了社区中提供的资源/工具后,仍未找到满意的解决方式。

⚠️ 安全信息提醒:请仔细检查提供的文本内容,确保其不包含敏感数据信息,包括但不限于:

  • API 令牌或密钥
  • 密码或身份验证凭证
  • 私有网址或接口地址
  • 个人或机密数据
  • ...

在分享配置信息或代码示例时,请将敏感信息脱敏处理,或使用 <TOKEN> 等占位符替代原有内容。

环境信息

例如:
- 操作系统
- 昇腾硬件信息
- CANN软件版本
- 安装的对应软件版本

🐛 问题描述

相同的输入,不同输出:

(Pdb) res.shape
torch.Size([362315, 5])
(Pdb) res
tensor([[ 8.0084e-01,  1.0316e+01, -4.6043e-01,  1.8000e+01,  3.9922e-01],
        [-1.6340e+01, -4.6958e+00,  7.1113e-02,  2.0000e+00,  3.4718e-01],
        [ 1.1227e-01,  1.8437e+00,  4.6026e-01,  2.0000e+00,  0.0000e+00],
        ...,
        [-4.0163e+00,  4.3113e+00, -5.1262e-01,  5.2000e+01,  4.9932e-01],
        [ 1.6672e-01, -1.1327e+00,  5.0911e-01,  7.0000e+00,  3.4718e-01],
        [-1.2689e+01, -1.5615e+01,  2.9130e+00,  1.1000e+01,  4.9732e-02]],
       device='npu:0')

DrivingSDK与MMCV(1.7.2)输出结果不一致

# res_coors为mmcv输出,res_coors1为DrivingSDK输出,后同
(Pdb) res_coors.shape
torch.Size([101856, 3])
(Pdb) res_coors1.shape
torch.Size([101855, 3])
(Pdb) res_num_points
tensor([ 8,  1, 10,  ...,  1,  1,  1], device='npu:0', dtype=torch.int32)
(Pdb) res_num_points.shape
torch.Size([101856])
(Pdb) res_num_points1.shape
torch.Size([101855])
(Pdb) res_voxels.shape
torch.Size([101856, 10, 5])
(Pdb) res_voxels1.shape
torch.Size([101855, 10, 5])

部分定位数据,可参考

(Pdb) res_coors.shape
torch.Size([101856, 3])
(Pdb) res_coors_fix.shape
torch.Size([101855, 3])
(Pdb) res_coors_np = res_coors.cpu().numpy()
(Pdb) res_coors_fix_np = res_coors_fix.cpu().numpy()
(Pdb) import pandas as pd
(Pdb) df1 = pd.DataFrame(res_coors_np, columns=['x', 'y', 'z'])
(Pdb) df2 = pd.DataFrame(res_coors_fix_np, columns=['x', 'y', 'z'])
(Pdb) diff = df1[~df1.isin(df2).all(axis=1)]
(Pdb) print("res_coors 中有但 res_coors_fix 中无的行:")
res_coors 中有但 res_coors_fix 中无的行:
(Pdb) print(diff)
         x    y    z
20417   21  818  730
25729   26  609  668
25730   19  704  767
25731   22  713  636
25732   20  673  661
...     ..  ...  ...
101851  21  537  603
101852  27  938  836
101853  19  683  916
101854  21  845  670
101855  39  511  550

[72941 rows x 3 columns]
(Pdb) missing_rows = df1[~df1.isin(df2).all(axis=1)]
(Pdb) max_z, max_t = 1024, 64
(Pdb) base = torch.tensor([max_z * max_t, max_t, 1], dtype=torch.int32, device='npu')
(Pdb) missing_tensor = torch.tensor(missing_rows.values, dtype=torch.float32, device='npu')
(Pdb) pointId = (missing_tensor.int() * base).sum(dim=1)
(Pdb) print(f"pointId 唯一值数量: {len(torch.unique(pointId))}")
pointId 唯一值数量: 67598
(Pdb) print(f"原始行数: {len(missing_rows)}")
原始行数: 72941

voxelization参数:

(Pdb) p self.pts_voxel_layer.voxel_size
[0.075, 0.075, 0.2]
(Pdb) p self.mx_pts_voxel_layer.voxel_size
[0.075, 0.075, 0.2]
(Pdb) p self.pts_voxel_layer.point_cloud_range
[-54.0, -54.0, -5.0, 54.0, 54.0, 3.0]
(Pdb) p self.mx_pts_voxel_layer.point_cloud_range
[-54.0, -54.0, -5.0, 54.0, 54.0, 3.0]
(Pdb) p self.pts_voxel_layer.max_num_points
10
(Pdb) p self.mx_pts_voxel_layer.max_num_points
10
(Pdb) p self.pts_voxel_layer.max_voxels
(120000, 160000)

欢迎加入社区,感谢您对社区的贡献 🎉!

likedislike
xiangyuming
xiangyuming成员
2月25日 评论:

感谢您的反馈,已将问题反馈给相关负责同事

likedislike
xiangyuming
xiangyuming成员
2月25日 评论:

/label add triaged

likedislike
xiangyumingxiangyuming成员
2月25日 添加了label:triaged
ascend-robotascend-robot成员
2月25日 添加了label:bug
huangyuan64成员
3月24日 评论:

您好,HardVoxelization算子在mmcv与mmdet仓库内均有cuda实现,两者在体素的格式细节上存在差异,其中mmcv采取的是zyx的排列方式,而mmdet采取的是xyz的排列方式;当前DrivingSDK仓库的HardVoxelization算子采取的是xyz的输出格式,因此与mmcv的输出结果有一定的差异

likedislike
jayhuajayhua成员
3月24日 issue状态由 TODO 改变为 DONE
jayhuajayhua成员
3月24日 关闭了 issue