论文:Categorical Depth Distribution Network for Monocular 3D Object Detection
代码:https://github.com/TRAILab/CaDDN
0 引言
单目3D检测的最大难点在于深度的估计,精确的深度估计是非常困难的, 已有的方法大多估计都不准。 CaDDN 主要的贡献也是在深度估计上, 它的思想是既然精确地深度估计很困难, 那就估计一个大概的深度范围。 具体而言, 就是不直接回归连续的深度值, 而是把深度离散化为一些范围,这样就把一个连续值的回归问题转化为一个离散值的分类问题, 大大减小了深度预测的难度, 因此提升了最终3D检测的效果。
1 CaDDN 网络设计
网络的总体结构图如下, 主要包括4个主要的部分, 1)视锥特征网络 2)视锥到体素的转换 3)体素到BEV图的转换 4)3D目标检测
1.1 视锥特征网络
这是CaDDN网络比较核心的部分。 这个模块的主要功能是进行深度估计。 网络首先经过一个resnet101 的backbone进行特征提取,得到
W
∗
H
∗
C
W*H*C
W∗H∗C大小的特征图,然后经过两个并行的分支, 其中一个分支用于降低特征图的通道(把特征通道
C
C
C由256降低到64); 另一个分支用于估计深度桶,估计深度的网络分支采用DeepLabVm 得到
W
∗
H
∗
D
W*H*D
W∗H∗D的深度估计结果, 其中
D
D
D是深度桶的个数。即对特征图的每个点都预测了一个深度分布, 这是跟其他的深度预测方法的显著不同, 其他的深度估计方法都是直接预测了真实的深度值。
深度分布的估计会加入到loss中, 以迫使网络预测的深度分布分布尽可能集中于某一个深度桶。
深度桶并不是平均分布的,作者采用了多种分布模型:
对上面的2个分支的结果做一个外积,得到 W ∗ H ∗ D ∗ C W*H*D*C W∗H∗D∗C的特征图。
1.2 视锥到体素的转换
这个模块的主要作用是体素化, 把 W ∗ H ∗ D ∗ C W*H*D*C W∗H∗D∗C的特征图体素化为 X ∗ Y ∗ Z ∗ C X*Y*Z*C X∗Y∗Z∗C的体素网络。 这一步需要用到一些相机的校准参数,首先划分好体素网络, 根据几何关系在 W ∗ H ∗ D W*H*D W∗H∗D的特征图上进行采样。
1.3 Voxel 到BEV的转换
这个模块的主要作用是把体素的特征图投用到BEV上, 即把 X ∗ Y ∗ Z ∗ C X*Y*Z*C X∗Y∗Z∗C的特征图转换为 X ∗ Y ∗ C X*Y*C X∗Y∗C的特征图。 具体做法是先把Z和C两个维度concat起来, 得到 X ∗ Y ∗ ( Z ∗ C ) X*Y*(Z*C) X∗Y∗(Z∗C)维度的特征, 然后在用1*1的卷积进行降通道, 最终得到 X ∗ Y ∗ C X*Y*C X∗Y∗C的BEV特征图。
1.4 BEV特征图上的特征检测
2 实验结果
KITTI:
Waymo: