14

不用激光雷达,照样又快又准!3D目标检测之SMOKE

 3 years ago
source link: https://mp.weixin.qq.com/s/cOJ11ZTEUk-MPHr1cAQs4A
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

点击上方“3D视觉工坊”,选择“星标”

干货第一时间送达

640?wx_fmt=jpeg

向大家介绍一篇CVPR 2020 Workshop的文章:SMOKE: Single-Stage Monocular 3D Object Detection via Keypoint Estimation。

640?wx_fmt=jpeg
0. 动机3D目标检测用于估计目标的类别、位置和姿态,与2D目标检测相比,3D目标检测更具有挑战性。有很多工作研究使用激光雷达进行3D目标检测,激光雷达成本较高、寿命较短,与之相比,相机成本低、寿命长,且易于安装。很多基于单目相机做3D目标检测的算法都是多阶段(multi-stage)的,即基于2D目标检测网络得到的2D框,在后面添加额外的分支预测3D框,亦或者是产生点云作为点云检测网络的输入,这种方法的弊端是:2D框检测的少许偏差可能会引起3D框检测的较大偏差。作者提出了一个直接预测3D目标框的单阶段端到端算法,包含1个分类分支和1个回归分支,计算量小,易于训练且精度高。1.建模
使用单目相机做3D目标检测,可以提炼为:输入RGB图像和分别表示输入图像的宽度和高度,输出图像中目标的类别和3D框。使用表示3D框,其中表示目标的高、宽、长;表示目标在相机坐标系中的坐标,单位为米;角度表示3D框的航向角。需要特别指出的是,要准确地预测3D框,需要知道相机内参。2. 网络结构网络的总体结构如下图所示:
640?wx_fmt=png

2.1 Backbone

使用与论文《Objects as points》类似的DLA-34作为Backbone,输出特征图的长和宽分别为输入图像的1/4。与之不同的是,作者将网络中的BN(BatchNorm)替换为GN(GroupNorm),实验表明使用GN能减小网络性能对batch size的敏感程度,还能减少训练时间。

2.2 关键点检测分支

将目标3D框的中心点在图像平面的映射点定义为关键点,关键点检测分支的目标就是寻找输入图像中的关键点。在训练时,需要根据3D框确定关键点的位置,若知道相机内参和目标3D框的中心点根据如下公式求得关键点:
参考论文《Objects as points》中的做法,使用高斯函数作为关键点检测分支的学习目标。使用表示3D框的8个顶点在图像中的位置,则
表示在图像中包围3D框的最小长方形,通过
确定高斯函数的标准差。

2.3 回归分支

编码目标的3D框,它们的含义是:
  • 表示深度偏移;
  • 和对下采样产生的量化误差进行补偿;
  • 、、分别表示高、宽、长的残差(residual dimensions);
  • 和用于确定角度。
相比于直接学习3D目标框各个属性的值,学习偏移量更容易训练。因为要使用8个标量组成的向量确定3D框,那么回归分支输出的feature map尺寸为,用于控制feature map的尺寸。下面讲述网络输出的向量与3D框属性的关系。根据深度偏移量可以求得目标的深度值,公式如下:上式中的和是预定义的值,
单位为米。已知目标的深度,根据回归分支输出的、以及关键点检测分支输出的
可以得到目标在相机坐标系下的三维坐标:
根据回归分支输出的、、以及预定义的
使用如下公式求目标的长、宽、高,单位为米。
网络输出的和所确定的角度的含义为下图中的所表示的角度:
640?wx_fmt=png
根据KITTI数据集中航向角的定义,可以根据角度和目标在三维空间中的位置求得航向角:
已知航向角、长宽高三个维度的值以及3D框中心点在相机坐标系下的坐标
可以得到相机坐标系下3D框的8个顶点坐标,公式如下:上式中的表示根据航向角得到的旋转矩阵,
是如下矩阵的简写形式:
3. 损失函数

3.1 关键点分类损失

关键点检测分支的输出为通道的feature map,为类别总数,为了描述简单,以下只叙述针对其中一个通道(即1个类别)的损失函数。使用focal loss构造关键点分类损失函数,令表示网络前向计算时关键点检测分支的输出feature map在位置处的值,表示根据数据集中的标注、利用高斯函数得到的目标值。首先分别定义和:定义分类损失函数如下:和是超参数,,,N表示关键点个数。下面分别描述损失函数中项和项的作用:当时,由于,因此 ,若此时接近于1,则项令损失函数急剧衰减;若此时接近与0,则令损失函数轻微衰减。使得优化器更关注接近0的样本。当时,由于,因此,若此时接近于1,则项令损失函数轻微衰减;若此时接近与0,则令损失函数急剧衰减。使得优化器更关注接近于1的样本。当时,由于,因此,该项不起作用。当时,由于,因此,此时若接近于1,即接近高斯函数中“峰值”的位置,代表在关键点附近,则令损失函数急剧衰减,使得优化器不太关注位置处的损失值,因为在关键点附近,理应让大一些。

3.2 回归损失

回归损失用于让网络输出更接近真值的。3D框高、宽、长的残差由回归分支输出的值进行非线性变换得到,变换表达式如下:上式中、、表示回归分支输出的值,表示sigmoid函数。角度值也要由回归分支输出的值进行非线性变换得到,变换表达式如下:上式中的和表示回归分支输出的值。向量中的其他值直接使用回归分支的输出值。若得到向量,根据2.3中的描述,容易得到相机坐标系下3D框的8个顶点坐标,记作,使用该值和训练集中标注框的8个顶点坐标构造损失函数,表示如下:上式中的为平衡关键点分类损失和回归损失的权重。受到论文《Disentangling monocular 3d object detection》的启发,作者将回归分支的输出结果分为三组:
  • 、、,根据以及预定义的和可以求出深度值,根据深度值、、以及从标注数据中得到的3D框中心点在图像平面上的投影,可以得到目标3D框中心点在相机坐标系下的坐标;
  • 、,根据和可以得到,从标注数据中得到目标3D框中心点在相机坐标系下的坐标,可以得到航向角;
  • 、、,根据这三个值以及预定义的可以得到目标3D框的长、宽、高。
只使用上面任何一组参数求取3D框的8个顶点坐标是不可能的,因为参数量不够,利用标注数据中的参数进行补全,使得上述三组参数能分别求出同一目标的3个3D框的8个顶点坐标,分别记作、、,利用、、分别构造3个回归损失函数,将它们的和作为新的回归损失函数。这样做的好处是,能够将向量中的多组参数对损失函数的贡献解耦开,使得优化器能分别优化上述3组参数。整个网络的损失函数如下:4. 实验

4.1 实验配置

使用KITTI数据集训练网络,实验时将3D框中心点在图像平面映射时超出图像区域的目标清除掉。在训练关键点检测分支时使用了数据增强,比如random horizontal flip、random scale and shift。GroupNorm操作中的group number设置为32,对于通道数小于32的层,group number设置为16。网络的输入图片分辨率为1280x384,在4台TITAN X GPU上训练,batch size为32。推理时,在关键点检测分支输出的feature map中选取100个得分最高且大于0.25的点作为关键点。

4.2 性能

训练完成后,使用KITTI的测试集评估性能,计算IoU大于0.7的值,结果如下:
640?wx_fmt=png
相比于其他方法,SMOKE算法取得了很好的结果,且推理时间只有30ms,完全满足实时性要求。
将SMOKE生成的3D框用于位置估计,并与其他方法比较,结果如下:
640?wx_fmt=png
相比其他两种方法,SMOKE在位置估计上有明显优势。
此外,SMOKE也可以用于2D目标检测,将能包围3D框的最小2D框定义为2D目标检测的结果,结果如下:
640?wx_fmt=png
5. 总结本文有如下亮点:
  • 直接通过单阶段网络预测3D框的属性,而不是先检测2D框,再利用2D框的信息生成3D框;
  • 在构造回归分支的损失函数时,将多个属性对损失函数的贡献解耦,加速模型收敛;
  • 模型结构简单,推理时间为30ms,具有实时性。
论文:https://arxiv.org/abs/2002.10111

源码:https://github.com/lzccccc/SMOKE

本文仅做学术分享,如有侵权,请联系删文。下载1在「3D视觉工坊」公众号后台回复:3D视觉即可下载 3D视觉相关资料干货,涉及相机标定、三维重建、立体视觉、SLAM、深度学习、点云后处理、多视图几何等方向。下载2在「3D视觉工坊」公众号后台回复:3D视觉github资源汇总即可下载包括结构光、标定源码、缺陷检测源码、深度估计与深度补全源码、点云处理相关源码、立体匹配源码、单目、双目3D检测、基于点云的3D检测、6D姿态估计源码汇总等。下载3在「3D视觉工坊」公众号后台回复:相机标定即可下载独家相机标定学习课件与视频网址;后台回复:立体匹配即可下载独家立体匹配学习课件与视频网址。

重磅!3DCVer-学术论文写作投稿 交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流、ORB-SLAM系列源码交流、深度估计等微信群。

一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

640?wx_fmt=png▲长按加微信群或投稿

640?wx_fmt=jpeg

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的知识点汇总、入门进阶学习路线、最新paper分享、疑问解答四个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近3000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款640?wx_fmt=jpeg 圈里有高质量教程资料、可答疑解惑、助你高效解决问题觉得有用,麻烦给个赞和在看~640?wx_fmt=gif


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK