概述
这是一篇22年的综述,介绍了3D目标检测中基于图像的检测算法。
细节
背景
背景:
基于图像的3D目标检测是一个病态的问题,因为我们要做的是从2D的输入中得到一个3D的结果。相关性:
基于图像的3D目标检测通常会与很多任务,如2D目标检测、深度估计、立体匹配和基于点云的3D目标检测任务相关。通用问题:
除了类别和3D边界框之外,可能还会要求其他的预测,比如KITTI同时要求2D边界框的预测;任务最初只提供图像和相机参数,但是很多时候一些额外的辅助数据帮助训练,如例如立体像对、CAD 模型、点云等。
数据集和评价指标:
在之前的文章【3D目标检测】3D Object Detection for Autonomous Driving: A Survey中有简单的介绍。
分类概述:
- 基于2D特征的方法,主要就是结果提升的(result lifting-based methods),他们的结构和2D目标检测相同,因此可以进一步分为两阶段的方法以及单阶段的方法。这部分的核心就是首先估计一些图像坐标系下可得的参数(如位置、方向、深度等),然后将2D检测结果提升到3D空间中。
- 基于3D特征的方法,可以直接在3D空间中定位物体,那么针对得到3D特征的方法可以进一步分为特征提升方法(feature lifting-based methods)和数据提升方法(data lifting-based methods)。前者将2D特征变换为3D特征,后者将2D图像转换成3D数据,然后提取3D特征。
基于2D特征的检测方法
基本思想:
就是先通过2D特征估计一些参数(如位置、深度、尺寸等),然后从其中或者其他中间结果中恢复出3D检测结果。
3D目标检测最重要的任务就是3D边界框的预测和类别的预测,前者包含7个参数,分别是边界框的中心点
(
x
,
y
,
z
)
(x,y,z)
(x,y,z),边界框的尺寸
(
w
,
h
,
l
)
(w,h,l)
(w,h,l)以及偏航角
σ
\sigma
σ。
先通过2D特征估计3D尺寸也行?
因为物体的物理尺寸具有很强的先验性,所以采用2D特征直接预测3D尺寸也是可行的。
边界框位置(边界框中心点坐标)的获取方法之一:
下面公式中需要的参数就是边界框中心点在图像坐标系下的投影
(
u
,
v
)
(u,v)
(u,v),这个点对应的深度
z
z
z,其他参数都是已知的,比如图像坐标系的中心或者说是光心在图像坐标系的投影
(
C
x
,
C
y
)
(C_x,C_y)
(Cx,Cy)以及焦距
f
f
f。具体实现过程可以参考【3D目标检测】单目相机成像原理注:
这一步需要的只是目标中心的深度值,而不是一张深度图。(KITTI 3D目标检测任务中只有目标中心的深度标注,没有全图的深度标注)
两阶段的方法
这里的两阶段方法的核心思想和RCNN系列相同,但是存在一些区别
候选框生成:
这边的候选框生成采用的方法一般是设置一些3D先验框,接着将他们投影到图像中得到候选框。但是这个过程会产生比较巨大的时间开销,因此有部分工作改进这个过程,比如筛选候选框等,但是RPN网络的设计还是继续延续的,没做太大的改动。空间信息引入:
作者给了两个例子,一个
是在立体图像中拓展RCNN和RPN,具体就是分别提取左图和右图的特征,然后融合这两组特征去进行候选框的生成和结果的预测。这样让网络隐式的学习到了图像对之间的视差,也就引入了空间信息。另一个就是
将预测得到的深度图作为额外的输入去进行候选框的生成和结果的预测,这样也算引入了空间信息。
单阶段的方法
这里的单阶段方法主要就是基于2D目标检测中经典的单阶段方法(如YOLO、CenterNet等)的改进。
基于3D特征的检测方法
这一方法的核心就是基于从图像中得到3D特征,然后基于3D特征进行相关参数预测。
特征提升的方法
思想:
是将图像坐标系下的2D特征转换成空间坐标系下的3D体素特征,接着再转换成鸟瞰图表示,最终基于鸟瞰图表示得到预测结果。关键:
如何进行特征变换单目图像的特征变换方法:
最经典的思路就是OFT-Net,它将体素投影到图像坐标系下,并且使用获得一个最小的边界框,接着聚合(全局平均池化)这个区域内的特征,将结果作为对应的体素特征。当然,后面还有蛮多不同的方法,但是都蛮复杂的。立体图像的特征变换方法:
立体图像特征变换相对而言比较简单一点,因为立体图像里面会涉及到一个成本容积的概念,它是4D特征,将他reshape成3D特征就可以了。
数据提升的方法
这一方法的核心是将2D图像转换成3D数据,比如点云。伪激光雷达的方法:
通过一些手段,将图像转换成点云形式,然后使用基于点云的算法进行检测。该方法的改进思路:
- 提高深度图的质量(比如更优秀的深度估计算法);提高伪点云的质量(比如采用稀疏的真实点云修正生成的伪点云)。
- 更加关注前景而不是背景(借鉴F-PointNet的思想,用2D检测框和阈值剔除背景点;用实例分割剔除背景点;训练深度估计模型的时候将这部分先验知识嵌入进去)
- 在伪点云中添加一些辅助信息(将图像特征添加进来;引入像素级的位置图??)。
- 端到端训练的训练基于伪点云的算法
- 不采用伪点云表示,而是采用图像表示(注:基于伪点云表示的设计,几乎都可以用到基于图像表示的设计上)
- 基于GAN的数据提升方法:比如将前视图直接转换成鸟瞰图。
算法中常见的组件
特征提取器
骨干网络:
2D CNN、3D CNN、点级CNN局部卷积:
深度感知卷积(使用非共享的卷积,会到来额外的计算量)注意力机制:
立体图像中的3D注意力机制深度增强特征学习:
使用离线模型或者子网络生成深度图;深度图指导的卷积;使用图神经网络将深度图中的深度信息传递给图像特征;特征模仿(难道是知识蒸馏?):
在基于点云的模型的指导下学习特征。无论是基于数据提升、特征提升还是结果提升,都可以使用。特征对齐:
单纯考虑偏航角不考虑其他角会出问题(这个就算了吧)特征池化:
就是在基于anchor的方法中,不采用ROI 池化,而是设计了新的池化方式,并且这种方式是可以和ROI池化,ROI对齐一起用的。
结果预测
多尺度预测:
为了增强对于不同比例目标的预测,产生了大量关于多尺度预测的研究。
-
层级方法:
在CNN的层级上进行操作。包括多层预测的模型(SSD);多层特征融合的模型(DLA,这个方法被大量的基于图像的3D检测算法采用的);基于前两种方法的混合(FPN,这个方法也被大量的基于图像的3D检测算法采用的) -
卷积核级别的方法:
核心就是在卷积核层面调整感受野。空洞卷积(深度图指导的卷积中就采用了这个技术);可变形卷积(也被一些工作采用,比如M3DSSD) - 注意,上述两个类别不是独立的,可以同时使用。
分布外样本:
用统一的网络预测所有的对象不是最佳的。按照对象的难易程度(如KITTI的困难、中等、简单),使用不同的检测头进行检测;或者根据不同的情况使用不同的策略;直接移除分布之外的样本,防止其干扰模型的训练。
深度估计的投影建模:
因为3D目标检测中的深度估计和单纯的深度估计任务是有所区别的,具有更多的几何先验因此可以采取投影建模的方式。所谓投影建模指的是,3D边界框的高和它对应投影的高存在几何关系,并且这个关系仅与相机内参有关。也就是说,我们可以通过2D投影的高计算3D边界框的高度,但是我们并没有2D投影,我们有的只是2D边界框,而2D边界框和2D投影虽然不一致,但是我们仍然可以通过2D边界框从而粗略的估计深度值。因此,后面就有很多关于如何消除其中误差的研究。
多任务预测:
将3D目标检测任务当做是多任务学习问题;将其他任务作为辅助任务和3D目标检测任务联合学习(比如2D目标检测,关键点检测、深度估计等。注
这里说的是辅助任务,而不是是像伪点云那样作为组件),同时有文章指出,在辅助任务的大数据集上预训练,也可以提升性能。
损失函数
核心:
损失函数主要包含分类损失、定位损失、尺寸损失、方向损失、联合优化损失、置信度损失和辅助损失,其中前几项是必须的,后面三项是可选的。联合优化损失比如corner loss一项就可以实现对于整个边界框(位置、尺寸、方向)的优化,置信度损失主要是为了给检测到的框更好的置信度,辅助损失则是为网络引入额外的几何线索。
分类损失:
采用focal loss及其变体定位损失:
基于3D特征的方法,一般直接回归位置信息,所以可以直接使用
L
1
、
L
2
L1、L2
L1、L2等损失函数预测一个偏移量(偏移量+anchor的位置=最终边界框的位置);基于2D特征的方法或者说是结果提升的方法通过2D位置和深度值得到位置信息,所以它的损失会由这两部分组成。其中2D位置的损失也可以直接使用
L
1
、
L
2
L1、L2
L1、L2等损失函数,而深度损失极为关键,接下来具体分析。
- 建模方差任意不确定性。为了捕捉不确定性,检测器应该同时预测深度值和深度的方差(或者标准差),然后用拉布拉斯似然或者高斯似然对不确定性建模。理论上这种建模不确定性的方法可以应用到任何回归任务当中
- 离散化。通过离散化的手段,将深度估计建模为序列回归任务(DORN)或者分类任务(CaDNN),从而预测深度分布而不是单个深度值,这有利于特征提升的方法。
尺寸损失:
一般直接回归位置信息,所以可以直接使用
L
1
、
L
2
L1、L2
L1、L2等损失函数预测一个偏移量,但是怎样根据偏移量计算尺寸,有很多不同的设计。计算数据集中各个类比目标的平均尺寸(偏移量+平均尺寸=最终尺寸);嵌入尺寸先验信息的方式(最终尺寸=
[
H
e
δ
h
,
W
e
δ
w
,
L
e
δ
l
]
[He^{\delta h},We^{\delta w},Le^{\delta l}]
[Heδh,Weδw,Leδl],其中
[
H
,
W
,
L
]
[H,W,L]
[H,W,L]是平均尺寸,
[
δ
h
,
δ
w
,
δ
l
]
[\delta h,\delta w,\delta l]
[δh,δw,δl]是网络预测的偏移量。因为采用的是乘法,所以这些平均尺寸会出现在网络训练中,也就实现了先验知识的嵌入);也有研究对三个尺寸进行加权。
偏航角损失:
偏航角一般不采用直接回归的方式,而是分类与回归的混合。分类部分,各种方式主要区别在于如何将连续方向划分为不同的 bin。两个经典的做法是划分为两个重叠的bin以及划分为12个不重叠的bin。一种新的思路是将其划分为4个bin,并采用2个分类器。回归部分,最简单的就是直接回归角度的偏移,另一种就是回归正弦和余弦的偏移,然后通过正弦和余弦计算角度。还有新的做法就是角度的中间表示。
联合损失:
联合损失指的是通过一个损失函数优化位置、尺寸和偏航角。一个做法就是Corner loss,它的思想就是最小化预测边界框的8个角与真实边界框8个角之间的距离。Disentangled corner loss,它是对Corner loss的改进,主要是为了避免复杂的交互,它的思想是每一项都和真实值组成预测框,然后计算损失(例:使用预测的位置以及真实的尺寸和偏航角组成预测框,得到角点,然后计算损失)。这个损失主要能够提高涉及到多项的评价指标,比如IOU。
置信度损失:
最简单的方法就是将分类置信度作为最终置信度,还有一些做法是中心点指数正则化分类置信度作为最终置信度,这些方法在2D检测中是常用的,并且在大部分的3D检测中也采用,但是有更好的做法。这部分有个映像就好了,需要了再来看。
辅助损失:
- 密集深度损失。一些研究发现密集深度估计作为辅助任务,有利于特征提升方法中特征的对齐,能够作为预训练任务,能够引入空间线索,从而提高模型的性能。
- 2D/3D一致性损失。这里的几何先验是3D边界框的投影必须紧紧贴合2D边界框。
- 2D目标检测以及关键点检测涉及的损失等
后处理
后处理环节主要包含两部分,分别是NMS以及后优化。前者主要是为了剔除掉冗余的检测框,包含经典NMS以及它的各种变体,后者指的是通过构建几何约束实现对结果的进一步优化,包括对偏航角的优化,基于关键点的优化,基于对象级的点对的优化
利用辅助数据
这部分的核心思想就是应用辅助数据,提取更加丰富的图像特征,完成检测任务(注意:辅助数据仅出现在训练阶段)。
CAD模型:
主要来自于公开数据集,产生两方面的作用,一方面用于自动生成细粒度的注释,提供更多的监督信号(具体的方式有好多种);另一方面用于数据增广
激光雷达信号:
- 产生深度图的监督信号。因为KITTI的深度标注是每个目标一个中心点深度标注,远远不够,因此通过点云投影产生密集的深度图是训练深度估计网络的首选。
- 产生语义分割的监督信号。因为点云的语义标签可以通过其是否在边界框内确定,然后将其投影到图像中就得到了图像的语义分割标签了。
- 提供训练阶段的额外指导。通过知识蒸馏的方式将基于点云的检测网络学习到的空间线索。比如用真点云的网络给伪点云网络蒸馏;特征提升的方法可以采用
- 和gan配合实现数据提升。具体做法是生成器输入图像,输出3D表示,判别器通过和真实点云的比较,判断其是生成的还是真实点云。
- 深度矫正。使用很少的点云去矫正生成的伪点云;
激光雷达信号:
1、雷达信号用于监督,如产生深度图的监督、产生掩码、进行知识蒸馏,使用基于点云的模型辅助基于图片模型的训练、和GAN配合,基于图像生成点云,然后使用基于点云的算法;2、深度矫正,基于伪点云的算法需要估计的深度图来提供空间信息,但是深度估计的效果一直不好,无论是单目图像还是立体图像。
额外数据、时间序列和双目图像
额外数据:
额外的数据可能会在下面的一些任务中使用,如深度估计、无标注数据的自监督学习(因为当前数据集一般只标注收集数据的关键帧)、分割任务。
时间序列:
基于时间序列的方法可以看做是一类后处理的方法,先获得检测结果,然后基于时间序列对结果进行优化。
双目图像:
为了提供深度信息,很多方法中都会引入双目图像。相关应用比如基于立体图像生成深度图或者基于双目图像得到更好的特征表示。文章来源:https://www.toymoban.com/news/detail-477839.html
相关发现:
文章来源地址https://www.toymoban.com/news/detail-477839.html
- 大多数方法都会至少使用一种辅助数据
- 基于立体图像的检测算法非常具有价值,无论是推理的速度还是最终的精度
- 对于时间序列的研究很有意义,但是目前相关的工作很少很少
- 相关方法的检测性能不断提升
未来的研究方向
- 深度估计。第一个方向是提高深度估计的能力,从而提高检测的结果;另一个方向是联合深度估计与目标检测,比如伪点云以及后期的端到端训练伪点云
- 半监督学习、自监督学习、弱监督学习
- 多模态算法
- 充分利用时间序列
到了这里,关于【3D目标检测】3D Object Detection from Images for Autonomous Driving: A Survey的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!