点击上方“3D视觉车间,选择星标
第一时间送达干货
作者‖ 黎国溥
编辑‖3D视觉开发者社区
SMOKE是一个one-stage单目视障碍物检测模型,认为2D单目3检测D检测任务冗余,会引入噪声影响3D检测性能,直接用关键点预测和3D框架回归的方式。
百度最近发布Apollo 7.在0中,摄像头障碍物感知也是基于该模型的;它可以实现实时推理,开源代码,值得学习。
论文名称:
论文地址:https://arxiv.org/pdf/2002.10111.pdf
开源地址:https://github.com/lzccccc/SMOKE
环境搭建:https://guo-pu.blog.csdn.net/article/details/122243245
二、
单目3D目标检测
三、
SMOKE整体框架
四、
SMOKE的Backbone(主网)
五、
SMOKE的3D检测网络
六、
损失函数
七、
训练细节
八、
实验结果
SMOKE模型的3D目标检测和俯视图效果如图1所示.1所示。
图1.1 SMOKE模型效果
a、基于2D目标检测网络生成目标2D候选区域;
b、2D patch特征” 预测目标位置;
a、论文认为其中2D单目3检测D检测任务冗余,会引入噪声影响3D检测性能。
b、若已知相机内参和目标的3D反过来,目标2可以推测D(即:基于3的D box图像平面上的投影点需要满足条件的最小外部矩形。
这篇论文抛弃了2D候选区域生成这一步,提出了基于关键点预测的第一阶段单目3D检测框架SMOKE(Single-Stage Monocular 3D Object Detection via Keypoint Estimation),3.直接预测目标D属性信息。
针对单张RGB图像,宽度 W、高度 H、通道数 3;
给出其中每个目标的类别标签 C、3D边界框 B;其中B 可用7个参数表示(h、w、l、x、y、z、θ),如图2.1所示。需要加水相机的内参矩阵已知。
(h、w、l) 表示目标的高度、宽度和长度;
(x、y、z) 在相机坐标系下表示目标中心点的坐标;
θ 表示目标的航向角。
图2.1 描述3D目标检测框
通过输入图像DLA-34 Backbone网络主要包括两个分支:关键点预测分支和3D边界框回到分支,DLA框架结构如图3所示.1所示。
SMOKE网络采用关键点预测分支来定位前景目标,关键点分支输出的分辨率为
(),表示数据集中前景目标的类别数。D边界框回归分支输出的分辨率为(),表示描述3D有8个边界参数。
图3.1 SMOKE框架结构
带有主干网络DCN(Deformable Convolution Network)以及使用GN(GroupNorm)标准化的DLA-网络输出分辨率是输入分辨率的四分之一。
DLA-34是DLA先介绍一下结构中的一种。DLA(Deep Layer Aggregation),CVPR 2018的一篇论文,它是一种网络特征融合方法。
DLA框架结构如图4所示.1.通过迭代深度聚合和分层深度聚合,最终简化了模型,以减少计算量。目的是更好地整合空间特征和语义信息,即浅层基础信息和深层语义信息。
论文地址:https://arxiv.org/pdf/1707.06484.pdf
开源代码:https://github.com/ucbdrive/dla
图4.1 DLA框架结构
论文中采用DLA-34作为提取特征的主要网络。
网络中的两个主要变化如下:
1.用变形卷积代替所有分层聚合连接;
2、将所有的BN层用GN(GroupNorm)替换,因为GN对batch size大小不敏感,训练噪音更大。作者也在实验部分验证了这一点。
Deformable Convolutional ,可变形卷积( ICCV 2017)
论文地址:
https://arxiv.org/pdf/1703.06211.pdf
开源地址:
https://github.com/msracver/Deformable-ConvNets
如图4.2.可变形卷积指卷积核在每个元素上附加,这样,在训练过程中,卷积核就可以扩展到很大的范围。
图4.2 描述传统卷积和可变形卷积
(a)是传统的标准卷积核,尺寸3x(图中绿点);
(b),通过在图(a)在此基础上,向每个卷积核的参数添加一个方向量(图b中的浅绿色箭头),使卷积核变成任何形状;
(c)和(d)是可变形卷积的特殊形式。
传统的卷积核通常是固定尺寸和尺寸的(如3)x3,5x5)对未知变化适应性差,泛化能力弱。
例如:同一CNN层的激活单元感觉野生尺寸相同,但不同的位置可能对应不同尺寸的物体,这需要或者方法。
图4.3 传统卷积和可变形卷积
卷积核可根据实际情况调整形状,更好地提取输入特性。
也就是说,卷积核的形状是可变的,也就是说,感觉野,但要注意感觉野的元素是不变的。
组归一化(Group Normbalization,GN)它解决了深度学习归一化的新方法BN式归一化对batch size对训练噪音的影响更大。
图4.4 几种归一化方法的对比
•BatchNorm:做归一化,算N*H*W的均值
•LayerNorm:做归一化,算C*H*W的均值
•InstanceNorm:一个channel内做归一化,算H*W的均值
•GroupNorm:,算(C/G)*H*W均值
此部分主要包括关键点检测、3D边界框回归分支。
在关键点分支中,图像中的每一个目标用一个关键点进行表示。 这里的关键点被定义为目标3D框的中心点在图像平面上的投影点,而不是目标的2D框中心点。
如图5.1所示,红色点是目标的2D框中心点,橙色点是3D框的中心点在图像平面上的投影点。
图5.1 关键点检测
设关键点坐标为 ,则其与目标在相机坐标系下的位置 之间的关系表示如下:
这是个经典的3D世界到相机平面投影的公式,K是相机内参;
如果对单目相机模型不理解的,这里参考高翔大佬的《视觉SLAM十四讲》进行补充说明一下。假设在世界坐标系中看到点P,通过小孔成像模型,投影到相机坐标系中形成点 ;通过相似三角形定理推出: 和 ,整理后得到如下图的形式。
如下图所示,相机坐标 转换到像素坐标 ;其过程包括比例变化和平移。
3D框回归用于预测与构建3D边界框相关的信息,该信息可以表示为一个8元组:
τλλλλλλαα
参数含义如下:
λ 表示目标的深度偏移量;
λ 表示特征图的关键点坐标x方向的偏移量;
λ 表示特征图的关键点坐标y方向的偏移量;
λλλ 表示目标体积值得残差;
αα 表示目标旋转角得向量化表示。
由于网络中进行了特征图下采样,下采样后的特征图上的关键点坐标基于预定义的关键点坐标执行离散化下采样得到,但是这样计算出来的关键点坐标会存在误差,因此论文中设置了两个预测量 λ 和 λ 。
(1)设关键点坐标为 ,则其与目标在相机坐标系下的位置 之间的关系表示如下边公式:
(2)对于目标的深度z,可以通过预先计算好的尺度因子和平移因子计算如下:
(3)当目标深度z 计算得到后,目标在相机坐标系下的位置也可以通过其在图像上的投影坐标变换得到:
(4)计算目标体积,首先对整个数据集计算各个类别目标的平均体积 ,然后基于前面提到的网络预测的体积残差计算目标的真实体积如下:
其中在计算目标的深度z时,预先计算好的尺度因子和平移因子,参考源码:
由于论文是基于关键点的,因此其关键点分类loss借鉴了CornerNet与CenterNet中的带惩罚因子的focal loss,引入了高斯核对关键点真值附近的点也分配了监督信号进行约束。
在输出的热图(heatmap)上以逐点方式使用惩罚减少焦点损失,设
() 是热图位置 的预测分数, 是高斯核分配的每个点的真实值,定义如下:
这里只考虑单个对象类,关键点分类的损失函数公式如下:
其中a,b是可调的参数,N是每张图的关键点数量, 是对真值点周围的区域的点的惩罚。
借鉴了“Disentangling Monocular 3D Object Detection”中所提出的解耦训练的方式。回归的对象是3D边界框的
λλλλλλαα 八个参数;回归的损失函数使用L1 Loss,3D边界框回归损失定义为:
其中 ^是预测值, 是真实值; λ 系数是用作调节回归损失和关键点分类损失的占比的。
总的损失函数是分类和回归两个损失函数相加,公式定义如下:
进行关键点分类时,预测的是3D中心点在图像平面上的投影点,因此在进行训练时,论文滤除掉了那些3D中心点投影位于图像平面以外的目标。
采用了随机水平翻转、缩放和平移操作,由于缩放和平移操作会引起目标3D属性的改变,因此数据增强仅仅用于关键点分类阶段。
在测试阶段,为了减小误检的影响,针对每幅图像,论文仅选取得分在前100个的关键点,并且基于0.25的预测得分进行过滤。
表1:测试集上评估汽车类的3D物体检测和鸟瞰性能,其中AP|R40以0.7IoU阈值。
表2:验证集上评估汽车类的3D 物体检测和鸟瞰性能,其中AP|R40以0.7IoU阈值。
表3:2D车辆检测结果,论文基于预测的3D信息恢复出来的2D检测框也同样表现出了比较好的性能。
Table4,Table5和Table6则分别通过一系列的消融实验,验证了论文中所做的一些改进的性能提升:
使用GN相比于使用BN的效果提升。
使用解耦方式训练loss的性能提升。
采用向量表示旋转角相比于四元数的性能提升。
百度在Apollo7.0中也基于SMOKE框架开发出了一个新的基于视觉的障碍物检测模型,其针对SMOKE做了一些改进,并在waymo数据集上进行了训练和测试。改进点:
使用常规卷积替换可变性卷积,从而能转换为onnx或libtorch,便于模型部署;
增加了一个用于预测2D边界框中心点与3D边界框中心点投影之间的偏移量的head,然后将该偏移量与2D边界框中心点相加来替换原有的3D边界框中心点投影预测,以应对部分截断障碍物的3D中心点投影出现在图像以外区域,以至于被过滤掉的问题;
原有的SMOKE框架没有预测2D边界框,Apollo在部署的时候仍然加入了2D边界框的预测。通过预测2D边框的中心点、宽度和高度,计算出障碍物的2D边框。
效果:
版权声明:本文为奥比中光3D视觉开发者社区特约作者授权原创发布,未经授权不得转载,本文仅做学术分享,版权归原作者所有,若涉及侵权内容请联系删文。
本文仅做学术分享,如有侵权,请联系删文。
1.面向自动驾驶领域的多传感器数据融合技术
2.面向自动驾驶领域的3D点云目标检测全栈学习路线!(单模态+多模态/数据+代码)3.彻底搞透视觉三维重建:原理剖析、代码讲解、及优化改进4.国内首个面向工业级实战的点云处理课程5.激光-视觉-IMU-GPS融合SLAM算法梳理和代码讲解6.彻底搞懂视觉-惯性SLAM:基于VINS-Fusion正式开课啦7.彻底搞懂基于LOAM框架的3D激光SLAM: 源码剖析到算法优化8.彻底剖析室内、室外激光SLAM关键算法原理、代码和实战(cartographer+LOAM +LIO-SAM)
9.从零搭建一套结构光3D重建系统[理论+源码+实践]
10.单目深度估计方法:算法梳理与代码实现
11.自动驾驶中的深度学习模型部署实战
12.相机模型与标定(单目+双目+鱼眼)
13.重磅!四旋翼飞行器:算法与实战
14.ROS2从入门到精通:理论与实战
扫码添加小助手微信,可
也可申请加入我们的细分方向交流群,目前主要有、、、、、等微信群。
一定要备注:
▲长按加微信群或投稿
▲长按关注公众号
学习3D视觉核心技术,扫描查看介绍,3天内无条件退款
圈里有高质量教程资料、答疑解惑、助你高效解决问题