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

干货第一时间送达

作者‖ 黎国溥

编辑‖ 3D视觉开发者社区

SMOKE是一个one-stage的单目视觉障碍物检测模型,它认为2D检测对于单目3D检测任务来说是冗余的,且会引入噪声影响3D检测性能,所以直接用关键点预测和3D框回归的方式。

最近发布的百度Apollo 7.0中,摄像头障碍物感知也是基于这个模型改进的;它能实现实时推理,代码开源,值得学习一下。

论文名称:SMOKE: Single-Stage Monocular 3D Object Detection via Keypoint Estimation

论文地址: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模型效果

一、论文动机

1.1 对于已有的两阶段单目3D目标检测框架:

a、基于2D目标检测网络生成目标的2D候选区域;

b、针对获取到的目标的“2D patch特征” 预测目标位姿;

1.2 SMOKE

a、论文认为其中的2D检测对于单目3D检测任务来说是冗余的,且会引入噪声影响3D检测性能。

b、若已知相机内参和目标的3D属性,反过来是可以推测出目标的2D检测框的;(即:基于3D box在图像平面上的投影点求取满足条件的最小外接矩形。

本论文抛弃了2D候选区域生成这一步,提出了基于关键点预测的一阶段单目3D检测框架SMOKE(Single-Stage Monocular 3D Object Detection via Keypoint Estimation),直接预测目标的3D属性信息。

二、单目3D目标检测

针对单张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目标检测框

三、SMOKE 整体框架

输入图像经过DLA-34 Backbone进行特征提取;网络主要包含两个分支:关键点预测分支和3D边界框回归分支,DLA框架结构如图3.1所示。

SMOKE网络采用关键点预测分支来定位前景目标,关键点分支输出的分辨率为

() ,表示数据集中前景目标的类别个数。3D边界框回归分支输出的分辨率为 () ,表示描述3D边界框的参数有8个。

图3.1 SMOKE框架结构

四、SMOKE的Backbone(主干网络)

主干网络采用带有DCN(Deformable Convolution Network)以及使用GN(GroupNorm)标准化的DLA-34神经网络提取特征,网络输出分辨率为输入分辨率的四分之一。

4.1 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

论文中采用DLA-34作为主干网络进行特征提取,以便对不同层之间的特征进行聚合

网络中主要做了两点改动如下:

1、将所有的分层聚合连接替换为可变形卷积;

2、将所有的BN层用GN(GroupNorm)替换,因为GN对batch size大小不敏感,且对训练噪声更鲁棒,作者在实验部分也对这一点进行了验证。

4.2 可变形卷积(改进点1)

Deformable Convolutional ,可变形卷积( ICCV 2017)

论文地址:

https://arxiv.org/pdf/1703.06211.pdf

开源地址:

https://github.com/msracver/Deformable-ConvNets

如图4.2所示,可变形卷积指卷积核在每一个元素上额外增加了一个参数方向参数,这样卷积核就能在训练过程中扩展到很大的范围。

图4.2 描述传统卷积和可变形卷积

(a)是传统的标准卷积核,尺寸为3x3(图中绿色的点);

(b)可变形卷积,通过在图(a)的基础上给每个卷积核的参数添加一个方向向量(图b中的浅绿色箭头),使的卷积核可以变为任意形状;

(c)和(d)是可变形卷积的特殊形式。

传统的卷积核通常是固定尺寸、固定大小的(例如3x3,5x5),它对于未知的变化适应性差,泛化能力不强。

例如:同一CNN层的激活单元的感受野尺寸都相同,但是不同的位置可能对应有不同尺度的物体,这些层需要能够自动调整尺度或者感受野的方法。

图4.3 传统卷积和可变形卷积

可变形卷积的卷积核可以根据实际情况调整本身的形状,更好的提取输入的特征。

即:卷积核的形状是可变的,也就是感受野可以变化,但注意感受野的元素是“不变”的。

4.3 Group Normbalization(改进点2)

组归一化(Group Normbalization,GN)是一种新的深度学习归一化方式,它解决了BN式归一化对batch size依赖的影响,对训练噪声更鲁棒。

图4.4 几种归一化方式的对比

•BatchNorm:batch方向做归一化,算N*H*W的均值

•LayerNorm:channel方向做归一化,算C*H*W的均值

•InstanceNorm:一个channel内做归一化,算H*W的均值

•GroupNorm:将channel方向分group,然后每个group内做归一化,算(C/G)*H*W均值

五、SMOKE的 3D检测网络

此部分主要包括关键点检测、3D边界框回归分支。

5.1 关键点检测

在关键点分支中,图像中的每一个目标用一个关键点进行表示。 这里的关键点被定义为目标3D框的中心点在图像平面上的投影点,而不是目标的2D框中心点。

如图5.1所示,红色点是目标的2D框中心点,橙色点是3D框的中心点在图像平面上的投影点。

图5.1 关键点检测

设关键点坐标为  ,则其与目标在相机坐标系下的位置  之间的关系表示如下:

这是个经典的3D世界到相机平面投影的公式,K是相机内参;

如果对单目相机模型不理解的,这里参考高翔大佬的《视觉SLAM十四讲》进行补充说明一下。假设在世界坐标系中看到点P,通过小孔成像模型,投影到相机坐标系中形成点  ;通过相似三角形定理推出:   和    ,整理后得到如下图的形式。

如下图所示,相机坐标  转换到像素坐标  ;其过程包括比例变化和平移。

5.2 3D边界框回归分支

3D框回归用于预测与构建3D边界框相关的信息,该信息可以表示为一个8元组:

τλλλλλλαα

参数含义如下:

λ              表示目标的深度偏移量;

λ             表示特征图的关键点坐标x方向的偏移量;

λ             表示特征图的关键点坐标y方向的偏移量;

λλλ        表示目标体积值得残差;

αα      表示目标旋转角得向量化表示。

由于网络中进行了特征图下采样,下采样后的特征图上的关键点坐标基于预定义的关键点坐标执行离散化下采样得到,但是这样计算出来的关键点坐标会存在误差,因此论文中设置了两个预测量 λ 和 λ 。

构建3D边界框的流程如下:

(1)设关键点坐标为  ,则其与目标在相机坐标系下的位置  之间的关系表示如下边公式:

(2)对于目标的深度z,可以通过预先计算好的尺度因子和平移因子计算如下:

(3)当目标深度z 计算得到后,目标在相机坐标系下的位置也可以通过其在图像上的投影坐标变换得到:

(4)计算目标体积,首先对整个数据集计算各个类别目标的平均体积  ,然后基于前面提到的网络预测的体积残差计算目标的真实体积如下:

其中在计算目标的深度z时,预先计算好的尺度因子和平移因子,参考源码:

六、损失函数

关键点分类损失函数

由于论文是基于关键点的,因此其关键点分类loss借鉴了CornerNet与CenterNet中的带惩罚因子的focal loss,引入了高斯核对关键点真值附近的点也分配了监督信号进行约束。

在输出的热图(heatmap)上以逐点方式使用惩罚减少焦点损失,设

() 是热图位置  的预测分数,  是高斯核分配的每个点的真实值,定义如下:

这里只考虑单个对象类,关键点分类的损失函数公式如下:

其中a,b是可调的参数,N是每张图的关键点数量,  是对真值点周围的区域的点的惩罚。

3D边界框回归损失函数

借鉴了“Disentangling Monocular 3D Object Detection”中所提出的解耦训练的方式。回归的对象是3D边界框的

λλλλλλαα 八个参数;回归的损失函数使用L1 Loss,3D边界框回归损失定义为:

其中  ^是预测值,  是真实值; λ 系数是用作调节回归损失和关键点分类损失的占比的。

总体的损失函数

总的损失函数是分类和回归两个损失函数相加,公式定义如下:

七、训练细节

细节1、滤除3D中心点投影位于图像平面以外的目标

进行关键点分类时,预测的是3D中心点在图像平面上的投影点,因此在进行训练时,论文滤除掉了那些3D中心点投影位于图像平面以外的目标。

细节2、数据增强

采用了随机水平翻转、缩放和平移操作,由于缩放和平移操作会引起目标3D属性的改变,因此数据增强仅仅用于关键点分类阶段。

细节3、限制关键点个数

在测试阶段,为了减小误检的影响,针对每幅图像,论文仅选取得分在前100个的关键点,并且基于0.25的预测得分进行过滤。

八、实验结果

8.1、3D目标检测、鸟瞰图、2D目标检测

表1:测试集上评估汽车类的3D物体检测和鸟瞰性能,其中AP|R40以0.7IoU阈值。

表2:验证集上评估汽车类的3D 物体检测和鸟瞰性能,其中AP|R40以0.7IoU阈值。

表3:2D车辆检测结果,论文基于预测的3D信息恢复出来的2D检测框也同样表现出了比较好的性能。

8.2、消融实验

Table4,Table5和Table6则分别通过一系列的消融实验,验证了论文中所做的一些改进的性能提升:

  • 使用GN相比于使用BN的效果提升。

  • 使用解耦方式训练loss的性能提升。

  • 采用向量表示旋转角相比于四元数的性能提升。

8.3、模型效果

9、SMOKE在百度Apollo7.0中应用

百度在Apollo7.0中也基于SMOKE框架开发出了一个新的基于视觉的障碍物检测模型,其针对SMOKE做了一些改进,并在waymo数据集上进行了训练和测试。改进点:

  • 使用常规卷积替换可变性卷积,从而能转换为onnx或libtorch,便于模型部署;

  • 增加了一个用于预测2D边界框中心点与3D边界框中心点投影之间的偏移量的head,然后将该偏移量与2D边界框中心点相加来替换原有的3D边界框中心点投影预测,以应对部分截断障碍物的3D中心点投影出现在图像以外区域,以至于被过滤掉的问题;

  • 原有的SMOKE框架没有预测2D边界框,Apollo在部署的时候仍然加入了2D边界框的预测。通过预测2D边框的中心点、宽度和高度,计算出障碍物的2D边框。

效果:

版权声明:本文为奥比中光3D视觉开发者社区特约作者授权原创发布,未经授权不得转载,本文仅做学术分享,版权归原作者所有,若涉及侵权内容请联系删文。

本文仅做学术分享,如有侵权,请联系删文。

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从入门到精通:理论与实战

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

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

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

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

▲长按加微信群或投稿

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列、三维点云系列、结构光系列、手眼标定、相机标定、激光/视觉SLAM自动驾驶等)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近4000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

圈里有高质量教程资料、答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  

最新发布!SMOKE 单目3D目标检测,代码开源!相关推荐

  1. 【单目3D目标检测】SMOKE论文解析与代码复现

    文章目录 yacs Introduction Usage SMOKE Preface Abstract Contributions Pipeline Backbone Head Branch Orie ...

  2. 【利用MMdetection3D框架进行单目3D目标检测(smoke算法】

    利用MMdetection3D框架进行3D目标检测(smoke算法) 1.mmdetection3d 2.mmdetection3d安装 2.1 依赖 3.进行单目3D目标检测 1.mmdetecti ...

  3. MonoCon:使用辅助学习的单目3D目标检测框架(AAAI 2022)

    作者丨慕弋云子@知乎 来源丨https://zhuanlan.zhihu.com/p/455897310 编辑丨3D视觉工坊 本文已被收录在单目3D目标检测的综述文章中.如果你对单目3D目标检测的相关 ...

  4. DD3D:基于预训练的单目3D目标检测

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 来源丨CV研习社 作者丨元气满满的打工人 文章导读 导读:3D目标检测的主要应用场景就是自动驾驶,虽然 ...

  5. ICCV2021|单目3D目标检测真的需要伪激光雷达吗?

    作者丨agent@知乎 来源丨https://zhuanlan.zhihu.com/p/406918022 编辑丨3D视觉工坊 Paper: arxiv.org/pdf/2108.0641 Code: ...

  6. 浅述单目3D目标检测

    作者丨慕弋云子@知乎 来源丨https://zhuanlan.zhihu.com/p/432135656 编辑丨3D视觉工坊 三维目标检测是一个相对上游.比较基础却又新兴的任务领域.得益于自动驾驶和2 ...

  7. 登顶KITTI!Mix-Teaching:适用于单目3D目标检测的半监督方法【清华大学】

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨汽车人 来源丨自动驾驶之心 论文标题:Mix-Teaching: A Simple, Unifi ...

  8. Neighbor-Vote:使用邻近距离投票优化单目3D目标检测(ACM MM2021)

    名字:Neighbor-Vote: Improving Monocular 3D Object Detection through Neighbor Distance Voting 链接:https: ...

  9. 首个实时单目3D目标检测算法:RTM3D,代码将开源

    o 点击我爱计算机视觉标星,更快获取CVML新技术 基于单目图像的3D目标检测是在输入RGB图像的情况下估计目标的3D包围框,在自动驾驶领域非常有用. 今天来自中科院沈阳自动化所等单位的学者公布论文提 ...

最新文章

  1. Pentaho Data Integration 界面开发
  2. svn 迁移到 git 仓库并保留 commit 历史记录
  3. spring2.0和spring2.5及以上版本的jar包区别 spring jar 包详解
  4. Codeforces Round #719 (A-C)
  5. matlab动画_弹簧振子振动的matlab动画演示
  6. PDF编辑器哪个好,如何在PDF中插入图片背景
  7. 搭建Harbor docker镜像仓库
  8. 北乐博客装饰分享CSS+HTML+js
  9. 仿真器连接出现NO TARGET CONNECTED解决方法及cube配置方法
  10. 相机标定-opencv
  11. C语言编写几何平均数的函数,Excel 计算几何平均值:GEOMEAN函数
  12. 骨架屏Skeleton Screen
  13. 得物购买截图生成_iPhone12订单生成器网页版-iPhone12订单生成器网页版链接分享预约 v1.0...
  14. SAS首席科学家:如何选择机器学习算法?
  15. java newline_Java BufferedWriter newLine()方法
  16. spark解析csv文件_Spark:解析CSV文件并按列值分组
  17. 汇编语言(王爽第三版)实验一
  18. 《阿里云天池大赛赛题解析(深度学习篇)》学习笔记(1)自然语言处理基础
  19. 淘宝搜索技术代码你知多少
  20. SEO技术是一个很好的方式来分享和做SEO代码。分享一下keysioncms的调用代码。

热门文章

  1. 把数据转换为在内存中Tree(树形结构)。_备战秋招:一文搞定数据库常见面试题...
  2. 初学python 对象数组变量遍历
  3. Pr:改变剪辑的播放速度
  4. 约战手游服务器维护中,梦幻手游1月13日维护更新 帮派约战测试
  5. 怎么在wps上显示特殊标记,如换行符等
  6. 英文工科生写作整理(1)纯干货
  7. 李连杰彻底“毁掉”了自己的形象的一幕
  8. 专题报告丨云计算体系新助力,拆解边缘计算寻找新机会
  9. 服务器性能是什么,什么是服务器性能的显卡,怎么理解?
  10. excel word 网页自动求和