OE Agent“天工”新版本发布,请前往论坛顶部查看,欢迎试用并反馈~
查看OE-Skills
专栏算法工具链fcos3d评测metric部分的问题,主要是velocity的问题

fcos3d评测metric部分的问题,主要是velocity的问题

九zoujiu.com.cn2026-07-19
14
0
  1. 和芯片无关

  2. 和板卡无关

  3. 天工开物开发包 OpenExplorer 版本:openexplorer/ai_toolchain_ubuntu_22_j6_gpu:v3.8.1,容器docker内开发

  4. fcos3d模型的训练 + 训练数据集3D框可视化 + predict可视化

  5. nuscenes数据集训练fcos3d模型,输入给模型的数据存在问题,导致fcos3d模型在validation作metric的时候,velocity是错误的

因为相机坐标系的xz平面和自车坐标系的xy平面不平行,导致了输入的velocity数据存在问题

经过坐标系变换以后,到了相机坐标系,此时的velocity也变换到相机坐标系了,最开始的velocity是global的,也就是x, y方向,z = 0,若是相机的安装不水平,导致相机坐标系的xz平面和地面不平行,会导致velocity在相机坐标系下面的y轴分量!=0,此时只选取velocity = self.velocity[0::2],也就是xz分量是不够的,因为此时xz并不是水平面,正确的方案应该是输入xyz三个方向的velocity,metric也使用三个方向的。而不是默认自车坐标系下面的z方向velocity=0,也不能默认相机坐标系下面的y方向velocity=0

predict的时候,velocity也是预测相机坐标系下面的xz分量,没有y分量,导致了metric的时候,也存在问题的

usr/local/lib/python3.10/dist-packages/hat/metrics/nuscenes_metric.py

这里的 velocity = (bbox[7], 0.0, bbox[8]),默认 y分量是0,但实际上y分量不是0,def update(self, metas, pred_bboxes)这个函数再次对坐标系做了变换def _cam_to_ego(self, bbox, meta):,得到的自车ego坐标系下面的速度就是错误的,不对的,也就是不能还原最开始的GT,metric计算的过程应该是存在问题的

box = self._ego_to_global(box, m)再次变换得不到最开始的velocity信息

方案1

当前改动较小的解决方案,不妨假定当前的数据默认在自车坐标系ego,yaw角用最开始的ego坐标系下面没做任何变换的yaw角,不使用相机坐标系下面的yaw角,velocity使用ego坐标系下面的没做任何变换的velocity,也就是送入网络的是ego坐标系下面的(x, y)方向的velocity,网络也predict自车ego坐标系下面的xy方向的velocity,实际评测的时候,输入metric.py的GT也是自车坐标系下面的xy方向的velocity,保证了对齐,yaw角同理的呢

方案2

修改网络结构,输入相机坐标系下面的x,y,z方向的velocity,网络预测相机坐标系下面的xyz方向的velocity,metric.py的GT也是ego自车下面的xyz方向的velocity,metric.py的predict经过坐标系变换,变换到自车坐标系,此时的velocity才是正确的

算法工具链
技术深度解析征程6
评论0
0/600