参考论文:Center3D: Center-based Monocular 3D Object Detection with Joint Depth Understanding
1 引言
单目3D目标检测中通常需要进行深度估计,一般是将回归问题转化为分类问题,先根据数据集确定好深度的最大最小值,然后在这个范围内划分多个区间(bins
),从而变成分类问题,预测深度值属于哪个区间。
2 方法
远处的物体有着更大的深度值和更少的视觉特征,这会产生大的损失值,从而主导训练过程并且增加不确定性。
两种常用方法SID
和LID
的区别和结果如图1所示,按照KITTI
数据集,设置
d
m
i
n
=
1
m
,
d
m
a
x
=
91
m
,
N
=
80
d_{min}=1m,d_{max}=91m,N=80
dmin=1m,dmax=91m,N=80,
N
N
N 是子区间个数,图中显示了鸟瞰图视角下的
0
m
0m
0m 到
54
m
54m
54m,红色线是每个bin
的阈值,实心矩形表示预测的边界框,蓝色矩形表示真实框,可以看到LID
对远处物体检测更准确。
2.1 SID
SID 方法通过在log
空间中划分
[
d
m
i
n
,
d
m
a
x
]
[d_{min},d_{max}]
[dmin,dmax] 来降低远处物体的权重,但是这种方法会产生太密集的bins
,如图1第一行所示。SID公式如下:
2.2 LID
LID 方法能够更加均匀地划分。
2.3 转换方法
训练标签:根据SID
和LID
公式,给定的连续深度值
d
d
d 计算出
l
l
l 后,向下取整得到所属的类别bin
l
i
n
t
l_{int}
lint,此外,保存并回归残差部分
l
r
e
s
=
l
−
l
i
n
t
l_{res}=l-l_{int}
lres=l−lint,
l
i
n
t
l_{int}
lint 和
l
r
e
s
l_{res}
lres 作为标签。
前向传播:对于特征图中一个像素,把概率大于0.5的bin
的中值作为估计的深度值
l
^
\hat l
l^,同时预测深度类别
l
^
i
n
t
\hat l_{int}
l^int,计算
l
^
r
e
s
=
l
^
−
l
^
i
n
t
\hat l_{res}=\hat l-\hat l_{int}
l^res=l^−l^int,得到深度类别以及残差量。
因为是离散的,取中值的精度不够,所以在训练阶段结合分类和回归任务,用到
l
i
n
t
l_{int}
lint 和
l
r
e
s
l_{res}
lres 。
反向传播:只在预测2D边界框中心位置
c
^
2
D
i
=
(
x
^
2
D
i
,
y
^
2
D
i
)
,
i
∫
{
0
,
1
,
.
.
.
,
K
−
1
}
\hat{\mathbf{c}}_{2D}^{\mathbf{i}}=(\hat{x}_{2D}^i,\hat{y}_{2D}^i),i\int \{0,1,...,K-1\}
c^2Di=(x^2Di,y^2Di),i∫{0,1,...,K−1},
K
K
K 是图像中物体个数,
i
i
i 是物体序号,各部分损失函数如下:
最终的损失函数是
L
d
e
p
,
L
o
r
d
i
i
,
L
r
e
s
i
L_{dep},L_{ord}^ii,L_{res}^i
Ldep,Lordii,Lresi 三部分的和,其中
P
n
i
P_n^i
Pni 是第
i
i
i 个物体比第
n
n
n 个bin
更远的概率,SmL1 是 smooth L1 loss。
推理时,预测
l
^
i
n
t
i
\hat l_{int}^i
l^inti 和
l
r
e
s
i
l_{res}^i
lresi,
l
^
=
l
^
i
n
t
i
+
l
r
e
s
i
\hat l = \hat l_{int}^i+l_{res}^i
l^=l^inti+lresi,再带入SID
和LID
公式中反求得到深度值
d
d
d。