本文综合整理单目3D目标检测的方法模型,包括:基于几何约束的直接回归方法,基于深度信息的方法,基于点云信息的方法。万字长文,慢慢阅读~
直接回归方法 涉及到模型包括:MonoCon、MonoDLE、MonoFlex、CUPNet、SMOKE等。
基于深度信息的方法 涉及到模型包括:MF3D、MonoGRNet、D4LCN、MonoPSR等。
基于点云信息的方法 涉及到模型包括:Pseudo lidar、DD3D、CaDDN等。
目录
一、单目3D目标检测概述
1.1 简介
1.2 单目相机特征
1.3 为什么用单目做3D目标检测
1.4 3D边框表示方式
1.5 挑战
二、直接回归的方法
2.1 SMOKE【CVPR2020】
2.2 MonoDLE(CVPR2021)
2.3 MonoCon(AAAI2022)
2.4 CUPNet(ICCV 2021)
2.5 MonoFlex(CVPR 2021)
三、基于深度信息方法
四、基于点云信息方法
3D目标检测,只用一个相机实现。输入是图像数据,输出是物体的三维尺寸、三维位置、朝向等3D信息。
通过传感器采样和量化,将3D世界中的物体变换到2D空间,用单个或多个通道的二维图像来描绘物体的形状、颜色、纹理和轮廓等信息,这些信息可用于检测物体。
由于2D相机比复杂的3D采集传感器更便宜且更灵活,基于单目图像的方法已得到广泛研究。二维图像以像素的形式提供了对象丰富的颜色和纹理信息。
激光雷达相对高昂的造价和对各种复杂天气情况的敏感性,推动着研究人员开始更多地探索基于视觉的3D目标检测,其在近几年成为越来越热门的研究方向。
基于单目视觉的方法则要求更加严苛,即只有单个相机的图像作为输入,结合相机标定得到物体的三维检测。
这类方法难度较大,但成本极低、便于推广使用,一旦攻克此问题,将彻底颠覆自动驾驶行业的格局。因此,研究此类问题是极具应用价值和学术挑战性的。
3D边框表示目标的位置、尺寸和方向,是3D目标检测算法的输出。物体是否被遮挡、截断或具有不规则的形状,都用一个紧密边界的立方体包围住被检测到的目标。
3D边框编码方式主要有3种,分别是8角点法、4角2高法、7参数法(常用),如下图所示。
7参数法:由7个坐标参数来表示。它包括边框的中心位置(x, y, z),边框在三维空间中的尺寸(l, w, h)以及表示角度的偏航角θ。
8角点法:8角点法将3D边框通过连接8个角点(c1, c2, . . . , c8)来形成。每一个角点由三维坐标(x, y, z)表示,总计24维向量。
4角2高法:为了保持地面目标的物理约束,3D框的上角需要保持与下角对齐,提出了一种4角2高编码的方法。
4 个角点 (c1, c2, c3, c4) 表示3D边框底面的4个顶点,每个角点用2D坐标(x, y)表示。
两个高度值(h1, h2)表示从地平面到底部和顶部角的偏移量。根据4个角点计算出4个可能的方向,并选择最近的一个作为方向向量。
由于是单张图像,是2D维度的,没有深度信息;3D框的中心点在图像中位置,模型难以精准预测出来。
2D图像的缺点是缺乏深度信息,这对于准确的物体大小和位置估计(尤其是在弱光条件下)以及检测远处和被遮挡的物体,难以检测。
基于直接回归的方法。主要有MonoCon、MonoDLE、MonoFlex、CUPNet、SMOKE、 MonoPair、 DEVIANT等算法。
这些算法主要利用几何先验知识,和深度估计的不确定性建模来提高算法性能。
Anchor based(基于锚框)
Deep3Dbbox算法,利用2D检测框和几何投影,并预测物体3D位姿和尺寸,通过求解目标中心到相机中心的平移矩阵,使预测的3D检测框重投影中心坐标与2D检测框中心坐标的误差最小。
MonoDIS算法,利用解耦的回归损失代替之前同时回归中心点、尺寸和角度的损失函数,该损失函数将回归部分分成K 组,通过单独回归参数组来解决不同参数之间的依赖关系,有效避免了各参数间误差传递的干扰,使得训练更加稳定。
预先对全部场景给出了各类目标的锚框,即Anchor-based。这种方法在一定程度上能够解决目标尺度不一和遮挡问题,提高检测精度,但缺乏效率性且很难枚举所有的方向,或为旋转的目标拟合一个轴对齐的包围框,泛化能力欠缺些。
Anchor free(不用锚框)
Anchor free 抛弃了需要生成的复杂锚框, 而是通过直接预测目标的角点或中心点等方法来形成检测框。
RTM3D算法,直接预测3D框的8个顶点和1个中心点,然后通过使用透视投影的几何约束估计3D边框。
SMOKE算法,舍弃了对2D边界框的回归,通过将单个关键点估计与回归的三维变量,来预测每个检测目标的3D框。设计了基于关键点的3D检测分支并去除了2D检测分支。
MonoFlex算法,设计了解耦截断目标和正常目标的预测方法,通过组合基于关键点的深度和直接回归深度进行精确的实例度估计。
GUPNet算法,利用几何不确定性投影模块解决几何投影过程的误差放大问题,并提出了分层任务学习来解决多任务下参数的学习问题。
MonoDLE算法,进行了一系列的 实验,发现了定位误差是影响单目3D目标检测模型性能的关键因素。因此,MonoDLE改进了中心点的取法,采用了从3D投影中心而不是2D边界框中心获取中心点的方法, 以提高模型性能。此外,在实例深度估计任务上,MonoDLE采用了不确定性原理对实例深度进行估计。
MonoCon算法,在MonoDLE算法的基础上添加了辅助学习模块,提升了模型的泛化能力。
DEVIANT算法,提出深度等变性网络来解决现有神经网络模块在处理3D空间中的任意平移时缺乏等变性的问题。
这一类基于直接回归的方法,仅使用单目图像完成模型训练与推理。
下面选一些实时性好的模型,进行详细讲解。
SMOKE是一种实时单目 3D 物体检测器,它提出了一个基于关键点预测的,一阶段单目3D检测框架,去掉了2D框预测部分,直接预测目标的3D属性信息。
输入单张图像。
输出其中每个目标的类别、3D边界框用7个参数表示(h、w、l、x、y、z、θ)
论文名称:SMOKE: Single-Stage Monocular 3D Object Detection via Keypoint Estimation
论文地址:https://arxiv.org/pdf/2002.10111.pdf
开源地址:GitHub - lzccccc/SMOKE: SMOKE: Single-Stage Monocular 3D Object Detection via Keypoint Estimation
SMOKE 整体框架,如下图所示。输入图像经过DLA-34 Backbone进行特征提取。检测头主要包含两个分支:关键点分支和3D边界框回归分支。
SMOKE的Backbone(主干网络):
检测头部分:
在关键点分支中,图像中的每一个目标用一个关键点进行表示。 这里的关键点被定义为目标3D框的中心点在图像平面上的投影点,而不是目标的2D框中心点。
3D边界框回归分支中,
在Kitti 数据集Test中测试,Car类别的模型精度。
模型效果:
这里只是简单讲了一下,详细讲解看我这篇博客:
【论文解读】SMOKE 单目相机 3D目标检测(CVPR2020)_相机smoke-CSDN博客
环境搭建和模型训练参考这篇博客:单目3D目标检测——SMOKE 环境搭建|模型训练_一颗小树x的博客-CSDN博客
模型推理和可视化参考这篇博客:单目3D目标检测——SMOKE 模型推理 | 可视化结果-CSDN博客
MonoDLE作为一个延续CenterNet框架的单目3d检测器,在不依赖dcn的情况下获得了较好的性能,可以作为baseline。
MonoDLE和SMOKE有些像,都是单目实现3D目标检测,通过几何约束和回归3D框信息,得到3D框的中心点、尺寸、朝向,但是它反驳了SMOKE提出的2D检测对3D检测没有帮助的论点。
开源地址:https://github.com/xinzhuma/monodle
论文地址:【CVPR2021】Delving into Localization Errors for Monocular 3D Object Detection
论文核心观点,主要包括为三点:
MonoDLE是基于CenterNet框架,实现单目3d检测的。模型结构如下:
Backbone:DLA34
Neck:DLAUp
2D 框检测:3个分支
3D Detection:4个分支
模型结构如下图所示:
MonoDLE的损失由7部分组成,
在Kitti验证集做实验,评价指标为Car类别的AP40(BEV / 3D)
模型预测效果:
用蓝色、绿色和红色的方框来表示汽车、行人和骑自行车的人。激光雷达信号仅用于可视化。
这里只是简单讲了一下,详细讲解看我这篇博客:【论文解读】单目3D目标检测 MonoDLE(CVPR2021)-CSDN博客
MonoDLE 模型训练 | 模型推理参考这篇博客:
单目3D目标检测——MonoDLE 模型训练 | 模型推理-CSDN博客
MonoCon是一个延续CenterNet框架的单目3d检测器,在不依赖dcn的情况下获得了较好的性能,并且融入了辅助学习,提升模型性能。
曾经在Kitti 单目3D目标检测上,霸榜了一段时间。
MonoCon和MonoDLE很像,在它基础上添加了一些辅助分支检测头,促进网络学习特征的能力。
- MonoCon = MonoDLE + 辅助学习
- 辅助学习:训练阶段增加一些网络分支,对其计算loss项,而在推理阶段完全忽略掉它们,以期得到更好的特征表示。
开源地址(官方):https://github.com/Xianpeng919/MonoCon
开源地址(pytorhc):https://github.com/2gunsu/monocon-pytorch
论文地址:Learning Auxiliary Monocular Contexts Helps Monocular 3D Object Detection
论文核心观点,主要包括为两点:
MonoCon是基于CenterNet框架,实现单目3d检测的。模型结构如下:
Backbone:DLA34
Neck:DLAUp
常规3D框检测头:5个分支
辅助训练头:5个分支
模型结构如下图所示:
MonoCon的损失由10部分组成,
常规3D框检测头:5个分支
辅助训练头:5个分支
论文于KITTI 官方测试集中“汽车类别”的最先进方法进行比较,使用单个2080Ti GPU显卡测试的。
下表中由BEV和3D的测试结果,MonoCon运行时间和精度都是Top 级别的。
作者基于MonoDLE进行了对比实验,分析5个辅助训练分支,和把BN归一化换为AN归一化,对模型精度的影响。
模型预测效果:
下面是单目3D目标检测的效果,激光雷达点云数据仅用于可视化。
在前视图图像中,预测结果以蓝色显示,而地面实况以橙色显示。
分别显示2D框、3D框、BEV的检测效果:
这里只是简单讲了一下,详细讲解看我这篇博客:【论文解读】单目3D目标检测 MonoCon(AAAI2022)-CSDN博客
MonoCon 模型训练和模型推理参考这篇博客:单目3D目标检测——MonoCon 模型训练 | 模型推理-CSDN博客
CUPNet是基于几何约束和回归方式输出3D框信息,在不依赖dcn的情况下获得了较好的性能。
它也是一款两阶段的单目3d检测器,先回归2D框信息,在ROI区域进一步提取特征,生成3D框信息。
开源地址:GitHub - SuperMHP/GUPNet
论文地址:Geometry Uncertainty Projection Network for Monocular 3D Object Detection
论文核心观点,主要包括为两点:
CUPNet是一个两阶段的框架,实现单目3d检测的。模型结构如下:
Backbone:DLA34
Neck:DLAUp
第一部分 2D 检测:3个分支
第二部分 3D 检测:4个分支
模型结构如下图所示:(基于CenterNet的2D检测+ROI特征提取+基础3D检测头)
整体的模型结构,可分为4步:
在第四步时,首先估计出3D框除了“深度值”以外的所有参数,然后2D框与3D框的高度将被输入到GUP模块中,提取出最终的depth。
CUPNet 的损失由7部分组成,
2D 框检测损失:3部分
3D Detection损失:4部分
在KITTI 测试集上的 3D物体检测,用以粗体突出显示最佳结果
在KITTI 验证集,汽车类别,进行消融实验:
模型效果:
这里只是简单讲了一下,详细讲解看我这篇博客:【论文解读】单目3D目标检测 CUPNet(ICCV 2021)-CSDN博客
MonoFlex是一种端到端、单阶段的单目3D目标检测方法,它基于CenterNet框架结合几何约束,回归方式输出3D框信息。
它优化了被截断物体的3D检测,同时优化了中心点的深度估计,检测速度也比较快。
开源地址:GitHub - zhangyp15/MonoFlex: Released code for Objects are Different: Flexible Monocular 3D Object Detection, CVPR21
论文地址:Objects are Different: Flexible Monocular 3D Object Detection
论文核心观点,主要有3点组成:
MonoFlex是一个单阶段的框架,实现单目3d检测的模型结构如下:
Backbone:DLA34
Neck:FPN
Head:由四部分组成
第一部分,预测2D框中心点。
第二部分,预测中心点的偏差。
第三部分,预测常规的信息。
第四部分,预测深度信息。
模型结构如下图所示:
补充一下Edge Fusion模块:
为了提高截断物体的中心点检测,提出了边缘特征提取和融合,单独把边沿的像素拿出来做注意力特征提取,提高offset和heat map的精度。
在热图预测中,边缘特征可以专门用于预测外部对象的边缘热图,从而使内部对象的位置不被混淆。
MonoFlex 的损失由6部分组成:
在KITTI 验证/测试集上的实验,选择Car类别。模型精度高,实时性好。
模型检测效果:
在截断物体的检测效果:
这里只是简单讲了一下,详细讲解看我这篇博客:【论文解读】单目3D目标检测 MonoFlex(CVPR 2021)-CSDN博客
基于深度信息引导的方法。这类算法利用单目深度估计模型预先得到像素级深度图,将深度图与单目图像结合后输入检测器。
这类方法依赖于预先得到的像素级深度图,受限于深度估计模型的准确性,其预测误差会进一步引入到单目3D目标检测模型中。
考虑工程落地和模型精度速度,这类方法不会细讲~
MF3D算法,通过子网络生成深度图,并将目标感兴趣区域与深度图进行融合以回归目标3D位置信息。
MonoGRNet算法,引入一种全新的实例深度估计算法,利用稀疏监督预测目标3D边框中心的深度。不同于MF3D生成整个输入图像的深度图方法,该方法只对目标区域进行深度估计,避免了额外的计算量。
D4LCN算法,一种局部卷积神经网络,通过自动学习基于深度图中的卷积核及其接受域,克服了传统二维卷积无法捕获物体多尺度信息的问题。
MonoPSR算法,用相机成像原理计算图像中像素尺寸,与3D空间之间的比例关系,估计目标的深度位置信息。
许多单目3D目标检测算法将这些深度估计算法视为其自身网络的子模块。深度估计可以弥补单目视觉的不足,更准确地检测物体的三维信息。
虽然深度信息有助于3D场景的理解,但简单地将其作为RGB 图像的额外通道,并不能弥补基于单目图像的方法和基于点云的方法之间的性能差异。
基于点云信息引导的方法。这类算法借助激光的雷达点云信息作为辅助监督进行模型训练,在推理时只需输入图像和单目相机信息。
Pseudo lidar算法,采用单目深度估计算法DORN进行深度估计, 将得到的像素深度反投影为3D点云, 从而形成了伪激光点云数据。最后利用已有的基于点云的检测算法Frustum
PointNets进行3D框检测。
Pseudo-lidar++算法,在初始深度估计的指导下,将测量数据分散到整个深度图中以提高检测精度。并利用更加便宜的4线激光雷达来代替64线激光雷达以微调检测结果。
CaDDN算法,通过将深度分类来生成视锥特征,并通过相机参数进一步转化为体素特征,并完成BEV特征生成和3D检测。由于CaDDN使用多个输入转换分支完成3D检测,导致其模型推理速度缓慢,不适用于实时场景。
补充一下,引入Transformer的模型:
MonoDTR算法,则将Transformer引入单目3D目标检测领域,通过深度感知特征增强模块和深度感知Transformer模块,实现全局上下文和深度感知特征的综合,将使用深度位置编码向Transformer注入深度位置提示,可以更好地将Transformer应用于单目3D目标检测领域。但 MonoDTR使用的自注意力机制难以处理多尺度目标 ,表现为对远端目标的检测能力下降。
现有方法通常会考虑利用预训练的深度模型,或是激光雷达方法的检测器来辅助完成检测,并且在最近几年中许多直接回归三维参数的方法也涌现了出来。
本文会持续更新~
单目3D目标检测专栏,大家可以参考一下
【数据集】单目3D目标检测:
3D目标检测数据集 KITTI(标签格式解析、3D框可视化、点云转图像、BEV鸟瞰图)_kitti标签_一颗小树x的博客-CSDN博客
3D目标检测数据集 DAIR-V2X-V_一颗小树x的博客-CSDN博客
【论文解读】单目3D目标检测:
【论文解读】SMOKE 单目相机 3D目标检测(CVPR2020)_相机smoke-CSDN博客
【论文解读】单目3D目标检测 CUPNet(ICCV 2021)-CSDN博客
【论文解读】单目3D目标检测 DD3D(ICCV 2021)-CSDN博客
【论文解读】单目3D目标检测 MonoDLE(CVPR2021)_一颗小树x的博客-CSDN博客
【论文解读】单目3D目标检测 MonoFlex(CVPR 2021)-CSDN博客
【论文解读】单目3D目标检测 MonoCon(AAAI2022)_一颗小树x的博客-CSDN博客
【实践应用】
单目3D目标检测——SMOKE 环境搭建|模型训练_一颗小树x的博客-CSDN博客
单目3D目标检测——SMOKE 模型推理 | 可视化结果-CSDN博客
单目3D目标检测——MonoDLE 模型训练 | 模型推理_一颗小树x的博客-CSDN博客
单目3D目标检测——MonoCon 模型训练 | 模型推理-CSDN博客