Rope3d数据集分析
rope3d中车头航向角分析
在做路侧3D目标检测时,分析了rope3D数据集,发现数据集中的标签文件中的两个角度alpha和rotation_y和官网的描述不符,官网描述的角度范围是[-pi,pi],但是实际标签中的有较多超过3.14的值。问题是rope3d定义的角度的坐标系和描述的不一致。
如上图所示,3d框前方的第一个角度为rotation_y,|后面的角度为alpha,都有超过pi的值。
按照官方的描述,y_rotation的角度的计算如下图所示,角BO1D的值即为标签中的y_rotaion。而AOC为alpha值。
而正负号的定义,官网没给明确的定义,我理解是:绕x轴逆时针为正,顺时针为负,这块会去参考kitti等数据集的定义,若错了会对下图进行修正。
随后找到一篇kitti 3D目标检测数据集的alpha和rotation_y的介绍(https://blog.csdn.net/explorer9607/article/details/107906808),搞懂了角度的正负定义,按照右手定则,逆时针为负,顺时针为正,如下:
导致的问题
训练后,发现一些车辆的车头角度不对,反了:
推理结果如下:进口道和出口道的车辆的弧度值都是-1.4,正确是进口道是-1.4,出口道是1.4。
解决方法
根据3D目标检测模型的要求,将角度值根据需要的坐标系转换,然后重新训练。一般是改为官网的描述的范围。
修改方法为:
import numpy as np
def trans(raw_rad):
"""将大于pi的转换为0, -pi"""
if raw_rad > 0: # 若为顺时针
if raw_rad > np.pi:
deg = np.degrees(raw_rad)
new_deg = 360 - deg
raw_rad = -(new_deg * np.pi / 180)
return raw_rad