DG-BEV:Towards Domain Generalization for Multi-view 3D Object Detection in Bird-Eye-View

参考代码:暂无

1. 概述

介绍:BEV算法部署过程中会遇到camera的变化,这个变化包含了相机内外参数,其中内参决定了成像物体在图像中的大小,外参决定了物体成像的位置。对此文章提出了一种内外参数对齐的方案(工作是以BEVDepth为 基准),对于内参导致的物体大小问题采用深度补偿的方式解决,对于外参数导致的成像位置变化采用单应矩阵映射的解决,同时为了使得图像特征对于相机内参鲁棒,设计了一个Domain Classifier去提升生成特征的泛化能力。不过从实际效果上看最后一个改进效果相比前面两种不是那么明显。

对于相机内外参对物体成像的差异见下图所示:
在这里插入图片描述
从上图可知相机的内外参会对物体在图像中成像的大小和位置带来差异,则只有将内外参数对齐才能避免在target domain中掉点严重。

2. 方法实现

文章的方法其实就是对内外参数进行补偿和适应,同时添加类似GAN Loss的方式使得图像特征对内参鲁棒,也就是对应下图中的三个部分:
在这里插入图片描述

内参对齐(IDD):
相机的内参中焦距起到了比较关键的作用,它很大程度上决定了物体在图像上的成像大小,则基于LSS方案的算法中深度估计就会存在问题,对此最直接的思路便是对深度的scale进行补偿,也就是对网络深度估计结果进行如下变换:
d = s c ⋅ d m d=\frac{s}{c}\cdot d_m d=csdm
其中当前尺度的计算描述为:
s = 1 f x 2 + 1 f y 2 s=\sqrt{\frac{1}{f_x^2}+\frac{1}{f_y^2}} s=fx21+fy21
其中, c c c是ref-camera的基准。其实除了这种方式之外还可以直接公用内参也能处理这样的情况。

外参对齐(DPA):
由于车型和传感器位置的不同,它们相对车体坐标的外参也会变化,则就会导致物体成像的位置发生变化。对此这里是使用扰动的方式去模拟这样的变化,也就是在原本相机旋转角度的基础上添加随机扰动:
P ^ i = ( y i + Δ y i , p i + Δ p i , r i + Δ r i ) \hat{P}_i=(y_i+\Delta y_i,p_i+\Delta p_i,r_i+\Delta r_i) P^i=(yi+Δyi,pi+Δpi,ri+Δri)
那么在一个物体上寻找几个点,文中是取GT下面的4个顶点+中点,对于这些3D点按照新旧外参在图像中投影的位置为 q q q q ^ \hat{q} q^,那么要是这些点还在图像上,就可以使用最小二乘的方法去获取新旧外参下图像的单应矩阵:
q ^ = H q \hat{q}=Hq q^=Hq

图像特征内参鲁棒(DIFL):
对于焦距可能存在的区间 [ α , β ] [\alpha,\beta] [α,β]划分为 K K K份:
t i = α + ( β − α ) ∗ i K t_i=\alpha+\frac{(\beta-\alpha)*i}{K} ti=α+K(βα)i
则可以到 K + 1 K+1 K+1个划分阈值, K + 2 K+2 K+2个划分类别。下图是 K = 4 K=4 K=4的例子:
在这里插入图片描述
在网络中使用参数 θ \theta θ去预测图像的内参分布:
y = ϕ ( x , θ ) , y ∈ R 2 ( K + 1 ) y=\phi(x,\theta),y\in R^{2(K+1)} y=ϕ(x,θ),yR2(K+1)
对应的GT为 l = { 0 , 1 , … , K + 1 } l=\{0, 1, \dots,K+1\} l={0,1,,K+1},那么预测的结果与GT进行损失函数计算便是离散交叉熵的形式:
L ( y , l ) = ∑ k = 0 K + 1 γ ( k , l ) l o g ( P k ) + ( 1 − γ ( k , l ) ) l o g ( 1 − P k ) L(y,l)=\sum_{k=0}^{K+1}\gamma(k,l)log(P^k)+(1-\gamma(k,l))log(1-P^k) L(y,l)=k=0K+1γ(k,l)log(Pk)+(1γ(k,l))log(1Pk)
其中,区间划分函数:
γ ( k , l ) = { 1 if  l ≤ k 0 , if  l > k   \gamma(k,l) = \begin{cases} 1 & \text{if $l\le k$} \\[2ex] 0, & \text{if $l\gt k$ } \end{cases} γ(k,l)= 10,if lkif l>k 
分类概率计算:
P k = e y 2 k e y 2 k + e y 2 k + 1 P^k=\frac{e^{y_{2k}}}{e^{y_{2k}}+e^{y_{2k+1}}} Pk=ey2k+ey2k+1ey2k
这里的梯度并不是求去最小化而是求去最大化,目的就是使得生成的图像特征对相机内参鲁棒,借用的是gradient reverse layer (GRL) 来实现的。对于GRL的理解可以参考:

  1. Gradient Reversal Layer指什么?
  2. 梯度翻转层GRL

上面的几个部分对性能的影响:
在这里插入图片描述

3. 实验结果

在不同数据集下迁移的实验结果:
在这里插入图片描述

### BEVStereo方法详解 BEVStereo是一种先进的多视角3D目标检测方法,其核心在于通过动态时间立体(Dynamic Time Stereo)机制增强深度估计,从而提升检测精度和鲁棒性。该方法基于鸟瞰视图(BEV)框架,旨在解决多摄像头系统中不同视角下目标特征的融合问题。 BEVStereo的关键技术在于其深度估计模块。传统的单目或立体视觉方法依赖于固定的几何约束和手工设计的特征,而BEVStereo通过动态时间立体机制,能够自适应地调整不同视角图像之间的匹配关系。这种机制不仅提高了深度估计的准确性,还增强了对复杂场景的适应能力[^2]。 在具体实现中,BEVStereo利用多帧图像的时间一致性信息,结合当前帧的立体匹配结果,动态调整深度估计。这种方法能够有效处理遮挡和视角变化带来的挑战,从而在多视角3D目标检测中表现出色[^2]。 ### 多视角3D目标检测 多视角3D目标检测的核心挑战在于如何从多个视角的2D图像中准确恢复出3D空间中的目标信息。BEVStereo通过将多视角图像统一映射到BEV空间,实现了高效的特征融合和目标检测。这一过程包括以下几个步骤: 1. **特征提取**:每个视角的图像首先通过卷积神经网络(CNN)提取特征。 2. **视角变换**:将不同视角的特征映射到统一的BEV空间中。 3. **特征融合**:在BEV空间中,对来自不同视角的特征进行融合,以增强目标的表示。 4. **目标检测**:在融合后的BEV特征上进行3D目标检测。 这种流程不仅提高了检测的精度,还增强了系统的鲁棒性,尤其是在复杂场景下的表现[^1]。 ### 动态时间立体 动态时间立体(Dynamic Time Stereo)是BEVStereo中的一个重要机制,旨在通过时间一致性信息增强深度估计。该机制的核心思想是利用多帧图像之间的时序关系,动态调整立体匹配过程中的参数。 在具体实现中,动态时间立体机制通过以下方式提升深度估计: - **时间一致性约束**:利用多帧图像的时间一致性信息,减少深度估计中的噪声和误差。 - **动态参数调整**:根据当前帧和历史帧的匹配结果,动态调整立体匹配的参数,提高匹配的准确性。 这种方法能够有效处理遮挡和视角变化带来的挑战,从而在多视角3D目标检测中表现出色。 ### 深度估计增强 深度估计是多视角3D目标检测中的关键步骤。BEVStereo通过动态时间立体机制,实现了深度估计的显著增强。具体来说,该方法在深度估计过程中引入了时间一致性约束,确保不同帧之间的深度估计结果具有一致性。 此外,BEVStereo还支持混合精度训练和多GPU协同训练,这些技术进一步提升了模型的训练效率和检测精度。在评估方面,BEVStereo提供了多种评估指标,如平均精度(mAP)和平均绝对误差(mATE),以便全面评估模型性能。 ```python # 示例代码:BEVStereo的深度估计增强 def dynamic_time_stereo(image_sequence): # 初始化深度估计 depth_estimates = [] # 遍历图像序列 for i in range(len(image_sequence)): # 获取当前帧和历史帧 current_frame = image_sequence[i] history_frames = image_sequence[max(0, i-5):i] # 计算时间一致性约束 time_consistency = calculate_time_consistency(history_frames) # 动态调整立体匹配参数 adjusted_params = adjust_parameters(current_frame, time_consistency) # 进行立体匹配 depth_estimate = stereo_matching(current_frame, adjusted_params) # 保存深度估计 depth_estimates.append(depth_estimate) return depth_estimates ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值