概述
点击上方“3D视觉工坊”,选择“星标”
干货第一时间送达
向大家介绍一篇CVPR 2020 Workshop的文章:SMOKE: Single-Stage Monocular 3D Object Detection via Keypoint Estimation。
0. 动机
3D目标检测用于估计目标的类别、位置和姿态,与2D目标检测相比,3D目标检测更具有挑战性。有很多工作研究使用激光雷达进行3D目标检测,激光雷达成本较高、寿命较短,与之相比,相机成本低、寿命长,且易于安装。
很多基于单目相机做3D目标检测的算法都是多阶段(multi-stage)的,即基于2D目标检测网络得到的2D框,在后面添加额外的分支预测3D框,亦或者是产生点云作为点云检测网络的输入,这种方法的弊端是:2D框检测的少许偏差可能会引起3D框检测的较大偏差。
作者提出了一个直接预测3D目标框的单阶段端到端算法,包含1个分类分支和1个回归分支,计算量小,易于训练且精度高。
1.建模
使用单目相机做3D目标检测,可以提炼为:输入RGB图像
和 分别表示输入图像的宽度和高度,输出图像中目标的类别 和3D框 。
使用 表示3D框 ,其中 表示目标的高、宽、长;
表示目标在相机坐标系中的坐标,单位为米;角度 表示3D框的航向角。
需要特别指出的是,要准确地预测3D框,需要知道相机内参 。
2. 网络结构
网络的总体结构如下图所示:
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框属性的关系。
根据深度偏移量可以求得目标的深度值,公式如下:
上式中的
和
是预定义的值,
单位为米。
已知目标的深度
,根据回归分支输出的
、
以及关键点检测分支输出的
可以得到目标在相机坐标系下的三维坐标:
根据回归分支输出的
、
、
以及预定义的
使用如下公式求目标的长、宽、高,单位为米。
网络输出的
和
所确定的角度
的含义为下图中的
所表示的角度:
根据KITTI数据集中航向角的定义,可以根据角度
和目标在三维空间中的位置求得航向角
:
已知航向角 、长宽高三个维度的值
以及3D框中心点在相机坐标系下的坐标
可以得到相机坐标系下3D框的8个顶点坐标,公式如下:
上式中的
表示根据航向角
得到的旋转矩阵,
是如下矩阵的简写形式:
3. 损失函数
3.1 关键点分类损失
关键点检测分支的输出为
使用focal loss构造关键点分类损失函数,令
首先分别定义
定义分类损失函数如下:
上式中
和
下面分别描述损失函数中
当
当
当
当
接近高斯函数中“峰值”的位置,代表
3.2 回归损失
回归损失用于让网络输出更接近真值的
3D框高、宽、长的残差由回归分支输出的值进行非线性变换得到,变换表达式如下:
上式中
角度值也要由回归分支输出的值进行非线性变换得到,变换表达式如下:
上式中的
向量
上式中的
受到论文《Disentangling monocular 3d object detection》的启发,作者将回归分支的输出结果分为三组:
只使用上面任何一组参数求取3D框的8个顶点坐标是不可能的,因为参数量不够,利用标注数据中的参数进行补全,使得上述三组参数能分别求出同一目标的3个3D框的8个顶点坐标,分别记作
整个网络的损失函数如下:
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的
相比于其他方法,SMOKE算法取得了很好的结果,且推理时间只有30ms,完全满足实时性要求。
将SMOKE生成的3D框用于位置估计,并与其他方法比较,结果如下:
相比其他两种方法,SMOKE在位置估计上有明显优势。
此外,SMOKE也可以用于2D目标检测,将能包围3D框的最小2D框定义为2D目标检测的结果,结果如下:
5. 总结
本文有如下亮点:
直接通过单阶段网络预测3D框的属性,而不是先检测2D框,再利用2D框的信息生成3D框;
在构造回归分支的损失函数时,将多个属性对损失函数的贡献解耦,加速模型收敛;
模型结构简单,推理时间为30ms,具有实时性。
论文:https://arxiv.org/abs/2002.10111
源码:https://github.com/lzccccc/SMOKE
END
本文仅做学术分享,如有侵权,请联系删文。
下载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视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。
▲长按加微信群或投稿
▲长按关注公众号
3D视觉从入门到精通知识星球:针对3D视觉领域的知识点汇总、入门进阶学习路线、最新paper分享、疑问解答四个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近3000星球成员为创造更好的AI世界共同进步,知识星球入口:
学习3D视觉核心技术,扫描查看介绍,3天内无条件退款
圈里有高质量教程资料、可答疑解惑、助你高效解决问题
觉得有用,麻烦给个赞和在看~
最后
以上就是霸气心锁为你收集整理的不用激光雷达,照样又快又准!3D目标检测之SMOKE向大家介绍一篇CVPR 2020 Workshop的文章:SMOKE: Single-Stage Monocular 3D Object Detection via Keypoint Estimation。的全部内容,希望文章能够帮你解决不用激光雷达,照样又快又准!3D目标检测之SMOKE向大家介绍一篇CVPR 2020 Workshop的文章:SMOKE: Single-Stage Monocular 3D Object Detection via Keypoint Estimation。所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复