单目3D目标检测 方法综述——直接回归方法、基于深度信息方法、基于点云信息方法-CSDN博客
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
本文综合整理单目3D目标检测的方法模型包括基于几何约束的直接回归方法基于深度信息的方法基于点云信息的方法。万字长文慢慢阅读~
直接回归方法 涉及到模型包括MonoCon、MonoDLE、MonoFlex、CUPNet、SMOKE等。
基于深度信息的方法 涉及到模型包括MF3D、MonoGRNet、D4LCN、MonoPSR等。
基于点云信息的方法 涉及到模型包括Pseudo lidar、DD3D、CaDDN等。
目录
一、单目3D目标检测概述
1.1 简介
3D目标检测只用一个相机实现。输入是图像数据输出是物体的三维尺寸、三维位置、朝向等3D信息。
1.2 单目相机特征
通过传感器采样和量化将3D世界中的物体变换到2D空间用单个或多个通道的二维图像来描绘物体的形状、颜色、纹理和轮廓等信息这些信息可用于检测物体。
1.3 为什么用单目做3D目标检测
由于2D相机比复杂的3D采集传感器更便宜且更灵活基于单目图像的方法已得到广泛研究。二维图像以像素的形式提供了对象丰富的颜色和纹理信息。
激光雷达相对高昂的造价和对各种复杂天气情况的敏感性推动着研究人员开始更多地探索基于视觉的3D目标检测其在近几年成为越来越热门的研究方向。
基于单目视觉的方法则要求更加严苛即只有单个相机的图像作为输入结合相机标定得到物体的三维检测。
这类方法难度较大但成本极低、便于推广使用一旦攻克此问题将彻底颠覆自动驾驶行业的格局。因此研究此类问题是极具应用价值和学术挑战性的。
1.4 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个可能的方向并选择最近的一个作为方向向量。
1.5 挑战
由于是单张图像是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空间中的任意平移时缺乏等变性的问题。
这一类基于直接回归的方法仅使用单目图像完成模型训练与推理。
下面选一些实时性好的模型进行详细讲解。
2.1 SMOKE【CVPR2020】
SMOKE是一种实时单目 3D 物体检测器它提出了一个基于关键点预测的一阶段单目3D检测框架去掉了2D框预测部分直接预测目标的3D属性信息。
输入单张图像。
输出其中每个目标的类别、3D边界框用7个参数表示h、w、l、x、y、z、θ
- (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主干网络
- Deep Layer AggregationDLA-34网络基础
- Deformable Convolutional 可变形卷积改进点
- Group Normbalization组归一化改进点
检测头部分
- 关键点检测分支
- 3D边界框回归分支
在关键点分支中图像中的每一个目标用一个关键点进行表示。 这里的关键点被定义为目标3D框的中心点在图像平面上的投影点而不是目标的2D框中心点。
3D边界框回归分支中
在Kitti 数据集Test中测试Car类别的模型精度。
模型效果
这里只是简单讲了一下详细讲解看我这篇博客
【论文解读】SMOKE 单目相机 3D目标检测CVPR2020_相机smoke-CSDN博客
环境搭建和模型训练参考这篇博客单目3D目标检测——SMOKE 环境搭建|模型训练_一颗小树x的博客-CSDN博客
模型推理和可视化参考这篇博客单目3D目标检测——SMOKE 模型推理 | 可视化结果-CSDN博客
2.2 MonoDLECVPR2021
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
论文核心观点主要包括为三点
- 2d box中心点与投影下来的3d box中心点存在不可忽视的差异优先使用3d box投影下来的中心点。
- 较远目标会带偏模型训练在训练时可以过滤这些过远的物体标签。
- 提出了一种面向 3D IoU 的损失用于对象的大小估计不受“定位误差”的影响。
MonoDLE是基于CenterNet框架实现单目3d检测的。模型结构如下
BackboneDLA34
NeckDLAUp
2D 框检测3个分支
- 分支一 通过输出heatmap预测2D框中心点的粗略坐标以及类别分数。CenterNet用的是标签中2D框中心作为GT值来监督MonoDLE采用了3D投影坐标作为粗坐标的监督
- 分支二 预测的2D框中心点粗坐标与真实坐标之间的偏移。
- 分支三 预测2D框的size。
3D Detection4个分支
- 分支一 预测2D框中心点粗坐标的深度值。
- 分支二 预测2D框中心点粗坐标与真实的3D投影坐标之间的偏移。
- 分支三 预测3D框的size。
- 分支四 预测偏航角。
模型结构如下图所示
MonoDLE的损失由7部分组成
- 分类损失Focal Loss
- 2D 中心点损失L1 Loss
- 2D size损失L1 Loss
- 3D 深度估计损失
- 3D 中心点损失L1 Loss
- 3D heading anglemulti-bin Loss
- 3D size普通的L1 Loss & MonoDLE提出的 IoU Loss
在Kitti验证集做实验评价指标为Car类别的AP40BEV / 3D
- p 表示使用3D 投影中心作为粗中心坐标的监督
- I 表示使用对3D size估计的IOU oriented optimization
- s 表示忽略远距离目标
模型预测效果
用蓝色、绿色和红色的方框来表示汽车、行人和骑自行车的人。激光雷达信号仅用于可视化。
这里只是简单讲了一下详细讲解看我这篇博客【论文解读】单目3D目标检测 MonoDLECVPR2021-CSDN博客
MonoDLE 模型训练 | 模型推理参考这篇博客
单目3D目标检测——MonoDLE 模型训练 | 模型推理-CSDN博客
2.3 MonoConAAAI2022
MonoCon是一个延续CenterNet框架的单目3d检测器在不依赖dcn的情况下获得了较好的性能并且融入了辅助学习提升模型性能。
曾经在Kitti 单目3D目标检测上霸榜了一段时间。
MonoCon和MonoDLE很像在它基础上添加了一些辅助分支检测头促进网络学习特征的能力。
- MonoCon = MonoDLE + 辅助学习
- 辅助学习训练阶段增加一些网络分支对其计算loss项而在推理阶段完全忽略掉它们以期得到更好的特征表示。
开源地址官方https://github.com/Xianpeng919/MonoCon
开源地址pytorhchttps://github.com/2gunsu/monocon-pytorch
论文地址Learning Auxiliary Monocular Contexts Helps Monocular 3D Object Detection
论文核心观点主要包括为两点
- 带注释的3D 边界框可以产生大量可用的良好投影的 2D 监督信号。
- 使用辅助学习促进网络学习特征的能力。
MonoCon是基于CenterNet框架实现单目3d检测的。模型结构如下
BackboneDLA34
NeckDLAUp
常规3D框检测头5个分支
- 分支一 通过输出heatmap预测2D框中心点的粗略坐标以及类别分数。
- 分支二 预测2D框中心点粗坐标与真实的3D投影坐标之间的偏移。
- 分支三 预测2D框中心点粗坐标的深度值和其不确定性。
- 分支四 预测3D框的尺寸。
- 分支五 预测观测角。
辅助训练头5个分支
- 分支一 8个投影角点和3D框的投影中心。
- 分支二 8个投影角点到2D框中心的offsets。
- 分支三 2D框的尺寸。
- 分支四 2D框中心量化误差建模。
- 分支五 8个投影角点量化误差建模。
模型结构如下图所示
MonoCon的损失由10部分组成
常规3D框检测头5个分支
- 分支一 heatmap 类别分数使用FocalLoss。2D 中心点损失使用L1 Loss。
- 分支二 2D框中心点粗坐标与真实的3D投影坐标之间的偏移使用L1 Loss。
- 分支三 2D框中心点粗坐标的深度值和其不确定性使用Laplacian Aleatoric Uncertainty Loss。MonoPair & MonoDLE & MonoFlex & GUPNet
- 分支四 预测3D框的尺寸使用Dimension-Aware L1 LossMonoDLE。
- 分支五 预测观测角multi-bin Loss其中分类部分使用 CrossEntropyLoss回归部分使用 L1 Loss。
辅助训练头5个分支
- 分支一 8个投影角点和3D框的投影中心使用FocalLoss。
- 分支二 8个投影角点到2D框中心的offsets使用L1 Loss。
- 分支三 2D框的尺寸使用L1 Loss。
- 分支四 2D框中心量化误差建模。
- 分支五 8个投影角点量化误差建模。
论文于KITTI 官方测试集中“汽车类别”的最先进方法进行比较使用单个2080Ti GPU显卡测试的。
下表中由BEV和3D的测试结果MonoCon运行时间和精度都是Top 级别的。
作者基于MonoDLE进行了对比实验分析5个辅助训练分支和把BN归一化换为AN归一化对模型精度的影响。
模型预测效果
下面是单目3D目标检测的效果激光雷达点云数据仅用于可视化。
在前视图图像中预测结果以蓝色显示而地面实况以橙色显示。
分别显示2D框、3D框、BEV的检测效果
这里只是简单讲了一下详细讲解看我这篇博客【论文解读】单目3D目标检测 MonoConAAAI2022-CSDN博客
MonoCon 模型训练和模型推理参考这篇博客单目3D目标检测——MonoCon 模型训练 | 模型推理-CSDN博客
2.4 CUPNetICCV 2021
CUPNet是基于几何约束和回归方式输出3D框信息在不依赖dcn的情况下获得了较好的性能。
它也是一款两阶段的单目3d检测器先回归2D框信息在ROI区域进一步提取特征生成3D框信息。
论文地址Geometry Uncertainty Projection Network for Monocular 3D Object Detection
论文核心观点主要包括为两点
- 1、物体高度估计误差对深度计算有着较大的影响。
- 2、模型训练的稳定性。在模型训练初期物体高度的预测往往存在较大偏差也因此导致了深度估算偏差较大。较大误差往往导致网络训练困难从而影响整体网络性能。
- 3、推断可靠性问题。如果物体的高度预测存在较大偏差相应计算出的深度值也会存在较大误差。
CUPNet是一个两阶段的框架实现单目3d检测的。模型结构如下
BackboneDLA34
NeckDLAUp
第一部分 2D 检测3个分支
- 分支一 通过输出heatmap预测所有类别的中心点默认类别为3。
- 分支二 预测的2D框中心点的偏移。
- 分支三 预测2D框的size。
第二部分 3D 检测4个分支
- 分支一 预测偏航角。
- 分支二 预测3D框的size。
- 分支三 预测中心点的深度值和和其不确定性深度学习偏差。
- 分支四 预测2D框中心点与真实的3D投影坐标之间的偏移。
模型结构如下图所示基于CenterNet的2D检测+ROI特征提取+基础3D检测头
整体的模型结构可分为4步
- 输入图像经过主干网络提取特征。
- 基于CenterNet的2D框预测部分用于输出热力图信息包括2D中心点、偏移量、2D框的尺寸。
- 提取出ROI的特征。
- 利用所提取的ROI特征输入到不同的网络头以获得物体3D框信息包括偏转角度、尺寸、深度值、物体3d框中心在图像投影点的偏移量。
在第四步时首先估计出3D框除了“深度值”以外的所有参数然后2D框与3D框的高度将被输入到GUP模块中提取出最终的depth。
CUPNet 的损失由7部分组成
2D 框检测损失3部分
- 分支一 通过输出heatmap预测所有类别的中心点使用 Focal Loss 函数。
- 分支二 预测的2D框中心点的偏移使用 L1 Loss 函数。
- 分支三 预测2D框的size使用 L1 Loss 函数。
3D Detection损失4部分
- 分支一 预测偏航角。类别使用交叉熵损失偏航角使用L1 Loss。
- 分支二 预测3D框的size。长和宽为L1 Loss权重占2/33D 高使用laplacian_aleatoric_uncertainty_loss() 函数权重占1/3。
- 分支三 预测中心点的深度值和和其不确定性使用 laplacian_aleatoric_uncertainty_loss() 函数。
- 分支四 预测2D框中心点与真实的3D投影坐标之间的偏移使用 L1 Loss 函数。
在KITTI 测试集上的 3D物体检测用以粗体突出显示最佳结果
在KITTI 验证集汽车类别进行消融实验
模型效果
这里只是简单讲了一下详细讲解看我这篇博客【论文解读】单目3D目标检测 CUPNetICCV 2021-CSDN博客
2.5 MonoFlexCVPR 2021
MonoFlex是一种端到端、单阶段的单目3D目标检测方法它基于CenterNet框架结合几何约束回归方式输出3D框信息。
它优化了被截断物体的3D检测同时优化了中心点的深度估计检测速度也比较快。
论文地址Objects are Different: Flexible Monocular 3D Object Detection
论文核心观点主要有3点组成
- 1、有截断的物体和正常的物体要分开处理提出了截断目标预测的解耦方法。主要体现在截断的中心点选取差异。
- 2、深度估计中同时考虑关键点估计的几何深度、直接回归深度然后两者做加权结合。
- 3、边缘特征提取和融合单独把边沿的像素拿出来做注意力特征提取提高offset和heat map的精度。
MonoFlex是一个单阶段的框架实现单目3d检测的模型结构如下
BackboneDLA34
NeckFPN
Head由四部分组成
第一部分预测2D框中心点。
- 通过输出heatmap预测所有类别的中心点默认类别为3。
- 这部分加入了Edge Fusion增强边缘的中心点预测。
第二部分预测中心点的偏差。
- 对于正常物体预测2D框中心点与3D框投影坐标之间的偏差。
- 对于截断物体预测2D框中心和3D框中心投影点与图像边沿之间交点的偏差。下面详细讲
第三部分预测常规的信息。
- 2D框宽高。
- 3D方向。
- 3D尺寸。
第四部分预测深度信息。
- 深度信息1模型直接归回的深度信息。
- 深度信息2通过关键点和几何约束计算出来的深度信息。估计一共10个关键点3D框8个顶点和上框面、下框面在图片中的投影到x_r的offset然后通过相机模型计算深度。
- 深度信息融合把几何深度、直接回归深度然后两者做加权结合。
模型结构如下图所示
补充一下Edge Fusion模块
为了提高截断物体的中心点检测提出了边缘特征提取和融合单独把边沿的像素拿出来做注意力特征提取提高offset和heat map的精度。
- 模块首先提取特征映射的四个边界将其连接到边缘特征向量中。
- 然后由两个1*1 conv处理以学习截断对象的唯一特征。
- 最后将处理的向量重新映射到四个边界并添加到输入特征图。
在热图预测中边缘特征可以专门用于预测外部对象的边缘热图从而使内部对象的位置不被混淆。
MonoFlex 的损失由6部分组成
- 2D框中心点损失通过输出heatmap预测所有类别的中心点使用 Focal Loss 函数。
- 2D框尺寸损失使用 L1 Loss 函数。
- 3D框中心点与2D框中心点的偏差损失使用 L1 Loss 函数。
- 3D朝向角损失使用MultiBin 函数。
- 3D尺寸损失使用 L1 Loss 函数。
- 深度信息损失包括直接回归损失和关键点损失。
在KITTI 验证/测试集上的实验选择Car类别。模型精度高实时性好。
模型检测效果
在截断物体的检测效果
这里只是简单讲了一下详细讲解看我这篇博客【论文解读】单目3D目标检测 MonoFlexCVPR 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目标检测 CUPNetICCV 2021-CSDN博客
【论文解读】单目3D目标检测 DD3DICCV 2021-CSDN博客
【论文解读】单目3D目标检测 MonoDLECVPR2021_一颗小树x的博客-CSDN博客
【论文解读】单目3D目标检测 MonoFlexCVPR 2021-CSDN博客
【论文解读】单目3D目标检测 MonoConAAAI2022_一颗小树x的博客-CSDN博客
【实践应用】
单目3D目标检测——SMOKE 环境搭建|模型训练_一颗小树x的博客-CSDN博客
单目3D目标检测——SMOKE 模型推理 | 可视化结果-CSDN博客