CVPR2021|基于分类深度分布网络的单目3D物体检测

1.要解决的问题
单目3D物体检测核心问题是如何准确估计物体的深度信息。已有方法尝试显式地或隐式地学习深度信息。
注1:文末附【CV&深度学习】交流群
注2:整理不易,请点赞支持!
作者:晨曦 | 来源:3D视觉工坊微信公众号
显式地学习存在的问题:1:深度估计的过度置信。一些方法[14,38,39,62]通过深度估计网络在一个单独阶段显式学习深度信息,但是后续的3D检测模块在没有考虑深度置信度的问题的情况下直接利用估计的深度图,会导致网络深度估计中的过度置信问题。2:非End-to-End。为了防止3D检测任务影响深度图的估计效果,3D检测模块与深度估计模块一般需要分开训练。
隐式地学习存在的问题:1:特征拖尾效应。[50,46]直接将特征从图像空间转换至3D空间,最后转换至鸟瞰角度,会导致特征拖尾效应(feature smearing effects,即3D投影空间中的多个位置会出现相似的图像特征),进而会增加物体定位难度。

作者想要获取具有高质量(即弱特征拖尾效应)的鸟瞰特征实现端到端的3D物体检测,那么如何获取高质量的鸟瞰特征?
2.提出的方法
提出了分类深度分布网络(CADDN):引入深度监督信号,预测逐像素的分类深度分布,将丰富的上下文特征信息投影到3D空间中的适当位置,实现端到端的3D物体检测。该方法有以下三个贡献:
1)Categorical Depth Distributions
预测了像素级分类深度分布,以在3D空间中准确定位图像信息。每个预测的分布描述像素属于一组预定义depth bins的概率。深度估计的置信度较高时:鼓励网络在正确的depth bins附近的分布尽可能更sharp、更accurate。深度估计的置信度较低时:鼓励网络仍保留产生较小sharp分布的能力。
2)End-to-End Depth Reasoning
联合深度估计任务和3D检测任务,以端到端方式学习深度分布,共同优化深度预测和精确的3D物体检测。作者认为该策略可鼓励针对3D检测任务优化深度估计,提高性能。
3)BEV Scene Representation
使用分类深度分布和投影几何从单个图像生成高质量的鸟瞰场景表示。(这里之所以选择鸟瞰图,是因为它具有产生出色的3D检测性能和高计算效率的能力[27]。)
3.方法具体细节1 ---如何从图像生成高质量的鸟瞰特征表示 (论文3.1部分)
先看一下这部分的核心流程图,具体流程为图像特征-->视椎体特征网格-->体素特征网格-->鸟瞰特征网格。

1)图像特征--->视椎体特征网格 (粉色框部分)。
数据流程图如下:

输入: 图像I (尺寸是 WI×HI×3),WI 和 HI分别是图像的宽和高;
输出:视椎体网格G (尺寸是WF×HF×D×C),WF 和 HF分别是特征的宽和高,D是离散的depth bins的数量,C是特征通道数;
图像特征F(WF×HF×C)-->图像特征F'(WF×HF×C')这一个分支是对图像特征进行降维,从C=256降低到C’=64。
图像特征F(WF×HF×C) -->分类深度分布D(WF×HF×D)这一分支是对图像特征D中每个像素预测D个概率(D个概率的和为1,即对每个像素使用softmax函数将D个logits归一化为0到1之间的概率),其中每个概率表示深度值属于指定depth bin(depth bin的介绍在后面)的置信度。
对图像特征F'和分类深度分布D做外积操作生成视椎体特征网格G:令(u,v,c)为图像特征F’中的坐标,而(u,v,di)为分类深度分布D中的坐标,其中(u,v)是特征像素位置,c是通道索引,di是depth bin索引。为了生成视椎体特征网格G,每个特征像素F’(u,v)由其关联的D(u,v)中的depth bin概率加权,以填充到深度轴di处。
分类深度分布D(WF×HF×D) 与 图像特征F'(WF×HF×C') 外积之后得到视椎体特征矩阵G(WF×HF×D×C'),即(WF×HF)每个像素处对应着一个D×C'的矩阵(以depth bins概率对图像特征的概率加权得到的矩阵),如下图所示。

2)视椎体特征网格--->体素特征网格 (橙色框部分)。
Reverse Mapping + trilinear interpolation。体素V中的一个采样点[x,y,z]转换(使用摄像机校准矩阵P进行转换)到视椎体网格中的一个采样点[u,v,dc],u和v都是连续值,dc是沿着视椎体深度轴方向的一个连续值,会被转换为离散深度值di(具体离散化方法见下一节)。进一步的 trilinear interpolation是在[u,v,di]周围进行的。
操作流程:体素V采样点[x,y,z] --->视椎体网格采样点[u,v,dc] --->视椎体网格采样点[u,v,di] --->trilinear interpolation获取视椎体网格采样点[u,v,di]处的数值--->将该数值复制到体素V采样点[x,y,z]处。

3)体素特征网格---鸟瞰特征网络 (绿色框部分)。
体素特征V(X×Y×Z×C)折叠成鸟瞰特征B(X×Y×C)。作者将Z轴和C轴拼接起来,构成鸟瞰网格矩阵(X×Y×(Z * C)),然后采用1x1 convolution + BatchNorm +ReLU layer将(Z * C)通道降维至C。
4.方法具体细节2 ----深度离散化部分 (论文3.2部分)
为了定义深度分布中使用的D bins的集合,对连续的深度空间进行离散化。这里可以使用具有固定bins大小的均匀离散(UD),间距增加的离散化(SID)[16](在对数空间中增加bin大小),或者线性增加的离散化(LID)[60],如下图所示。本文采用LID离散化深度,因为它可以为所有深度提供平衡的深度估计[60]。

关于UD,参考文献[16]提到的SID 和 [60]提到的LID的详解。假设给定深度区间的范围{Near, Far},将该深度范围离散到K个子区间,i为某个part的index,
UD部分:
已知di求index:i = (di - Near) * K / (Far - Near);
已知index求di:di = Near + i * (Far - Near)/K
SID部分:
已知di求index:i = K * (log(di) - log(near)) / (log(Far) - log(Near));
已知index求di:di = exp(log(Near) + i * (log(Far/Near))/K )
LID部分:
alpha = 2(Near - Far) / (K * (K + 1));
已知di求index:i = -0.5 + 0.5 * sqrt(1 + 8 * (di - Near) / alpha);
已知index求di:di = (((i + 0.5) * 2) ** 2 - 1) * alpha / 8 + Near
PS:LID中K个parts是个等差数列,首先计算出来alpha。
5.实验结果
Kitti数据集上实验细节,实际采样空间(单位为米)为[2, 46.8]×[-30.08, 30.08]×[-3, 1],体素大小设置为[0.16, 0.16, 0.16](m)。
在Kitti的官方测试集上,CADDN在Car 和 Pedestrian这两类上效果最好,Cyclist仅次于MonoPSR。

6.部分消融实验
Sharpness in Depth Distributions.
实验1:显示了将图像特征F沿深度轴di重复填充视椎特征G时的检测性能;
实验2:添加深度分布预测来平衡图像特征F;
实验3:添加深度分布监督信号,鼓励sharp、accurate的分类深度分布,这个操作带来的效果提升是最大的;
实验4:对前景物体像素深度设置较大的权重,会鼓励网络对前景物体像素优先进行深度估计;
实验5:将UD离散化换为LID离散化;

Depth Distribution Uncertainty。
为了验证该实验的深度分布包含有意义的不确定性信息,为D中每个估计的分类深度分布计算Shanon熵。观察到,熵通常随深度的增加而增加,这表明该实验的深度分布描述了有意义的不确定性信息。

7.结论
本文介绍了CaDDN算法,可以估算每个像素的准确分类深度分布。结合深度分布与图像特征以生成保留深度置信度的鸟瞰特征,可用于3D物体检测。
实验证明,以正确的深度值为中心估算尖锐的分类深度分布,以及联合执行深度估计和物体检测对于3D物体检测性能至关重要。该算法在KITTI数据集[1]官方测试集上排名第一。
备注:作者也是我们「3D视觉从入门到精通」特邀嘉宾:一个超干货的3D视觉学习社区
本文仅做学术分享,如有侵权,请联系删文。
3D视觉工坊-CV&深度学习交流群
已建立3D视觉工坊-CV&深度学习微信交流群!想要进CV&深度学习学习交流群的同学,可以直接加微信号:CV_LAB。加的时候备注一下:CV&深度学习+学校+昵称,即可。然后就可以拉你进群了。
强烈推荐大家关注3D视觉工坊知乎账号和3D视觉工坊微信公众号,可以快速了解到最新优质的3D视觉与SLAM论文。