文章目录
- 1 位置XYZ
- 步骤1:深度估计
- 步骤2:横向位置计算
- 步骤3:坐标系转换
- 步骤4: 损失函数设计
- 实际案例
- 2 航向角
- 步骤1:坐标系定义
- 步骤2:神经网络预测方法
- 步骤3: 基于γ几何约束增强
- 3 物理尺寸(h, w, l)
- 步骤1:网络结构设计
- 步骤2:训练优化
- 步骤3:关键实现细节
- 4 输出值
1 位置XYZ
3D位置的核心是通过几何投影约束与深度回归的联合优化,具体实现分为以下关键步骤:
DD3D的Head部分同时输出:
- 2D检测框 (umin,vmin,umax,vmax)
- 深度残差 Δz(相对统计先验zˉ的偏移量)
- 物理尺寸 (h,w,l)学习类别先验分布)
- 航向角编码 (sinθ,cosθ)
- 地面接触点偏移 (δu,δv)
- 3D位置解算流程
步骤1:深度估计
内参矩阵:
内参矩阵将图像像素坐标(u,v)转换为相机坐标系下的归一化坐标(x,y,1)。外参矩阵[R|t]则将目标位置转换到车辆坐标系。
统计先验zˉ:根据检测框高度hbox和类别平均物理高度Hclass计算:
(例如:轿车Hcar=1.5m,检测框高度200像素,焦距fy=720fy→ zˉ=5.4m)
精细修正:网络预测深度残差Δz,最终深度:
z = z ˉ + Δ z z=zˉ+Δz z=zˉ+Δz
步骤2:横向位置计算
利用地面接触点偏移(δu,δv):
• 检测框底部中心像素(ub,vb)=((umin+umax)/2,vmax)
• 投影到相机坐标系:
通过深度z得3D坐标:
步骤3:坐标系转换
通过外参矩阵将相机坐标系坐标(Xcam,Ycam,z)转换为车辆坐标系坐标(Xveh,Yveh,Zveh)(Xveh,Yveh,Zveh):
步骤4: 损失函数设计
DD3D通过多任务损失联合优化位置精度:
- 深度损失:
Ldepth=Smooth-L1(z,zgt) - 投影损失:
将预测的3D框投影回图像,计算与2D检测框的IoU损失 - 3D框对齐损失:
计算预测3D框8个顶点与真值的L2距离
实际案例
输入:图像中检测到一辆轿车,2D框高hbox=200px,网络预测Δz=+0.3m
• 先验深度:zˉ=720×1.5/200=5.4 → 实际深度z=5.7mz=5.7m
• 横向计算:底部中心偏移后得(xc,yc)=(0.02,−0.1) → 相机坐标系坐标(0.02×5.7,−0.1×5.7,5.7)
• 车辆坐标系:假设外参为纯平移t=[1.5,0,0]T,最终位置(0.114+1.5,−0.57,5.7)
2 航向角
在自动驾驶系统中,航向角(偏航角)的计算主要采用观察角分解与方向编码策略,其核心原理是:
步骤1:坐标系定义
观察角 α:障碍物中心在图像平面上的投影射线与相机光轴的夹角
实际航向角 θ:障碍物前进方向与自车前进方向的夹角。θ表示障碍物前进方向与自车前进方向的夹角,直接影响碰撞风险判断(例如:θ=0°表示同向行驶,θ=180°表示逆向行驶)
相对位置角 γ:障碍物中心在车辆坐标系中的方位角
三者满足几何关系:
α=θ+γ
步骤2:神经网络预测方法
DD3D采用双通道预测策略:
网络输出两个值:sinα 和 cosα
通过以下公式解码航向角:
α=arctan2(sinαpred,cosαpred)
这避免了0°与360°的跳变问题(例如预测359°与1°时,sin/cos值相近)
步骤3: 基于γ几何约束增强
结合3D边界框投影约束: 3D框的8个顶点投影到图像平面时,必须与2D检测框对齐。这个过程可以看看【透视图像目标检测(3)】透视3D目标的航向角、观察角(局部方向)和相对位置角辨析,观察角的单目投影验证
3 物理尺寸(h, w, l)
物理尺寸(h, w, l)的计算主要通过解耦回归策略实现,具体流程如下:
步骤1:网络结构设计
-
专用回归分支
在检测头中设置独立的全连接层,直接从骨干网络(如ResNet)提取的特征图中预测尺寸残差:[ Δ h , Δ w , Δ l ] = F C d i m s ( F r o i ) [Δh,Δw,Δl]=FCdims(Froi) [Δh,Δw,Δl]=FCdims(Froi)
其中FroiFroi是ROI对齐后的特征
-
残差补偿机制
结合数据集中类别先验尺寸均值进行预测:
μh,μw,μl:KITTI数据集中各物体类别的平均尺寸(例如轿车的μl≈3.88m)
α,β,γ:可学习缩放参数(初始化为0.1)
步骤2:训练优化
损失函数
- 采用带温度系数的Smooth L1损失:
在这里插入图片描述
τ:温度参数(默认0.1),用于平衡不同量纲
- 几何一致性约束
通过3D投影验证尺寸合理性:通过预测的3D框投影到2D图像时,要求其与检测到的2D框在尺度上匹配。
公式约束:
步骤3:关键实现细节
- 尺寸排序约束
通过后处理强制满足物理规律:
h, w, l = sorted([h, w, l], reverse=True) # 确保 l > w > h
- 类别敏感预测
不同物体类别使用独立的全连接层(例如汽车/行人/自行车有各自的FCdimsFCdims)
- 数据增强
在训练时对GT尺寸添加高斯噪声(σ=0.03mσ=0.03m),提升模型鲁棒性
4 输出值
DD3D输出的3D障碍物信息主要包括以下关键参数(以车辆检测为例):
-
3D位置
中心点坐标(x,y,z):在车辆坐标系下的三维坐标(单位:米),其中z为纵向距离
通过外参矩阵可将坐标转换到全局坐标系 -
物理尺寸
高度/宽度/长度(h,w,l):例如典型轿车约为(1.5m,1.8m,4.5m)
网络会学习不同物体类别的尺寸分布先验 -
航向角
偏航角θ:障碍物前进方向与车辆纵轴的夹角(-π到π)
用sinθ和cosθ双通道预测避免角度跳变 -
运动状态(部分改进版本支持)
速度矢量(vx,vy):基于连续帧的位移变化估计
加速度:通过时间序列预测
这部分可以看DD3D中估计目标速度和属性 -
语义信息
类别标签(car/truck/pedestrian等)
置信度分数(0-1):反映检测可靠性
例如,一个输出实例可能表示为:
[x=12.3m, y=-0.5m, z=30.1m, h=1.6m, w=1.7m, l=4.2m, θ=0.2rad, class=car, score=0.92]
这些参数可直接用于:
- 碰撞时间计算(TTC)
- 轨迹预测
- 占据栅格地图构建
- 多目标跟踪(MOT)
实际部署时,这些输出会与IMU、轮速计等数据融合,通过卡尔曼滤波提升稳定性。需要注意的是,单目方法在极端尺度变化场景(如远距离小物体)仍存在误差,因此L4级以上系统通常会融合激光雷达数据。