使用Disentangling形式的损失函数回归2D和3D目标框
本文介绍一篇 ICCV 2019 的论文『 Disentangling Monocular 3D Object Detection』。详细信息如下:
论文链接:https://arxiv.org/abs/1905.12365
项目链接:https://research.mapillary.com/publication/MonoDIS/
01
动机
相比于较为成熟的2D目标检测技术,3D目标检测尚处于发展之中。而在3D目标检测领域,基于单目相机的方法又远远落后于基于多传感器融合的方法。使用单目相机做3D目标检测是个“ill-posed”问题,因为三维场景到二维图像的映射过程引入了模糊性。
当前使用神经网络解决单目相机3D检测问题大多存在两个特性:1.需要对3D目标框的长、宽、高、深度、角度、位置进行编码,这些属性的单位、范围不统一,若直接使用它们构造损失函数,一定程度上会影响网络的收敛过程;2.首先训练2D目标检测器,然后将3D目标检测模块集成进来,这种分阶段训练的方式并不是最优的。
基于上述问题,作者将3D目标框的属性参数在损失函数层面上分组,解耦它们之间的依赖关系,解决了这些属性在单位、范围上的不一致问题,减轻了网络收敛难度,使得2D目标检测网络和3D目标检测网络能够一起训练,达到端到端训练的目的。
针对2D目标检测任务,作者还引入了一种基于sIOU(signed Interp-over-Union)的损失函数提高性能;针对3D目标检测任务,作者引入了一个损失项用于得到3D目标框的检测置信度。
02
网络结构
基于单目相机的3D检测任务,即输入单张RGB图片,输出目标在相机坐标系下的3D框属性,如下图所示:
作者提出的MonoDIS网络可以分为Backbone、2D检测器和3D检测器3部分,下面分别介绍。
2.1 Backbone
Backbone的结构如下图所示:
由上图可以看出,Backbone由ResNet34和FPN(Feature Pyramid Network)组成。在ResNet34中,使用InPlaceABN(iABNsync)+LeakyReLU替代BatchNorm+ReLU结构,其中LeakyReLU的negative slope为0.01。
这么做的目的是在不影响网络性能的前提下降低GPU显存的消耗,从而可以尝试较大的batch size或者较大的输入图片分辨率。Backbone的输入为RGB图像,输出为5种尺度的特征,分别记作{f1,…,f5}。
2.2 2D目标检测
与RetinaNet中的检测部分类似,在Backbone输出的每个
后面接一个2D检测模块,2D检测模块的结构如下图所示:
对于每个anchor输出5个信息,记作
,使用这些信息构造预测框的属性:
-
表示2D预测框的置信度,记作; -
表示预测框的中心点坐标,记作,表示这个anchor对应的cell在图像坐标系下的坐标,表示这个anchor的预定义尺寸; -
表示预测框的尺寸,记作。
取网络输出的置信度高于0.05且置信度排名前5000的预测框,进行IoU阈值为0.5的NMS操作,最后选取置信度最高的100个预测框作为2D检测结果。
2.2.1损失函数
Focal Loss
使用focal loss损失函数训练分类分支,对于grid中给定cell的某个anchor,定义目标置信度为
,预测到的置信度为,损失函数表示如下:
上式中的
和是超参数,且,。
目标置信度
取决于anchor和ground-truth,若anchor和gound-truth对应框的IoU超过给定阈值,则令目标置信度。
Detection Loss
若存在两个框
和,将sIoU定义为:
令表示框的四个元素中前两个元素为第一个坐标,后两个元素为第二个坐标。当第一个坐标在第二个坐标的左上角时,
的值为框的面积;否则的值为框的面积的相反数。
举例如下:
上图中第一行带颜色的部分为sIoU公式中的分子部分,绿色代表正值,红色代表负值;第二行代表sIoU公式中的分母部分。
对于gound-truth框
和预测框,定义检测损失函数为:
2.3 3D目标检测
对于网络最终输出的每个2D框,都要预测一个与之对应的3D框。对于每个2D框,使用ROIAlign从FPN中抽取特征,特征尺寸为14x14。FPN中共有5个尺度的特征
,尺寸为的2D预测框使用FPN中的,的选取策略如下:
3D目标检测模块的结构如下图所示:
-
表示给定2D预测框的条件下3D预测框的置信度; -
表示3D预测框中心点的深度,其中和是预定义值; -
表示3D预测框中心点在图像平面上的坐标; 表示3D预测框的尺寸,即宽、高、长,其中
是预定义值;-
表示allocentric的四元数,表示3D预测框的姿态信息。
根据
和可以得到3D目标框的置信度:
置信度大于阈值
即认为存在3D目标,对于3D检测,作者并没有使用NMS。
2.3.1损失函数
3D目标框回归损失
若相机内参已知,根据上文提到的
、、、可以得到3D预测框的8个顶点。
设相机内参为
根据透视变换的原理,可以根据网络输出的3D目标框中心点的深度
、3D目标框中心点在图像平面上的投影,得到3D目标框中心点在相机坐标系中的位置
再根据四元数
、3D目标框的宽高长,可以得到3D目标框的8个顶点在相机坐标系中坐标:
上式中矩阵
是由组成的对角矩阵,
,
是对应于的旋转矩阵。
综上所述,根据3D目标检测模块输出的,可以求得3D目标框的8个顶点,记作
。
令
表示相机坐标系下3D目标的ground truth。构造3D目标框回归损失函数
上式中
表示参数为的Huber损失。
3D目标框置信度损失函数
令,其中
为温度系数,使用交叉熵损失构造3D目标框的置信度损失函数(式中省略了下标)
03
Disentangling形式的Loss
3.1 Disentangling的原理
将Disentangling Loss应用于2D目标框和3D目标框的回归损失中,目的是将多组参数对于损失函数的贡献隔离开,同时保留这些参数的原始含义,利于网络训练时的优化过程。在2D目标框的回归损失中,包含用于确定目标框的2组参数,一组用于确定目标框的长和宽;
另外一组用于确定目标框的中心点位置。在3D目标框的回归损失中,包含用于确定目标框的4组参数,它们分别是与深度有关的参数、与3D目标框中心在图像平面投影有关的参数、与旋转角度有关的参数和与目标长宽高有关的参数。
令
表示第组参数,表示除第组以外的其他参数。若使用表示从网络输出的参数到目标框的映射过程:即对于2D目标检测,表示从网络输出的到目标框的映射过程;对于3D目标检测,表示从网络输出的到目标框的映射过程。
令
表示网络输出的用于估计目标框的参数,令表示根据ground truth利用的反过程求出的参数,即,则可以构造如下损失函数:
上式中的
表示ground truth,表示利用网络输出的第组参数和根据ground truth推出的除第组以外的参数得到的目标框。上式仅仅是针对网络输出的第组参数构造的损失函数。对网络输出的共组参数构造损失函数,表示如下:
在2D目标检测中k=2;在3D目标检测中k=4。
简而言之,在构造每个损失函数时,只使用一部分网络输出的参数,其余的参数从ground truth中利用
得到。在实验过程中,作者在构造2D目标回归和3D目标回归的损失函数时均用到了Disentangling Loss。
3.2 Disentangling Loss的优势
为了形象地展示出Disentangling Loss的优势,作者做了一个实验。作者分别使用原始的
以及的Disentangling Loss形式,训练网络完成KITTI3D数据集中的3D目标检测任务。
训练时的学习率为0.001,momentum为0.9,迭代了3000次,结果如下图所示:
为便于进一步观察使用Disentangling Loss与否在训练过程中的差异,作者画出来4组参数以及
的迭代过程,如下图所示:
上图从左到右依次代表长宽高、表示方向的四元数、3D目标框中心在图像平面上的投影、3D目标框中心的深度、
在2种损失函数形式下的迭代过程。
图中粉红色代表使用了原始的
,蓝色代表使用了的Disentangling Loss形式。从图中可以看出,使用了Disentangling Loss形式的损失函数训练模型迭代更快。
04
实验
4.1 实验设置
在进行2D目标检测时,共使用了由5种长宽比
、3种尺寸组合而成15种anchor,其中是FPN中不同尺度特征的下采样率。若某个anchor与ground truth的IoU大于阈值,则认为这是一个positive anchor。
在进行3D目标检测时,预定义如下先验:
、、、、。在测试阶段置信度阈值为。
对于2D检测的损失函数权重设置为1,对于3D检测的损失函数权重设置为0.5。在3D检测的目标框回归损失函数中,设置
,在3D检测的置信度损失函数中,设置。
在训练时使用了水平翻转作为数据增强的唯一方法。使用学习率为0.01的SGD优化方法在4个NVIDIA V-100 GPU上进行训练,batch size设置为96,共迭代了20k次,在第12k次迭代和第16k次迭代时将学习率降低为原来的0.1倍。
4.2 在KITTI3D数据集上测试
实验结果如下表所示:
上表中第一行和第二行对比了在训练3D目标检测网络时,直接回归和回归由
解算出的3D bounding box的性能,显然在训练时回归3D bounding box能提高网络性能。
第三、四行表示使用了Signed IoU、使用Disentangling Loss形式的2D检测损失和3D检测的置信度,对比第三、四行和第一、二行,使用上述方法能提高网络的性能。使用本文提到的所有技巧训练,测试结果为上表中第五行MonoDIS的结果。上表中的阴影部分为在KITTI3D测试集上的结果。
05
总结
对于2D目标检测,提出了使用Signed IoU的方法构造目标框回归损失函数;对于3D目标检测,使用了在2D检测结果上的条件概率构造损失函数。
提出了Disentangling Loss,将其应用于2D目标检测和3D目标检测的目标框回归损失函数中,简化训练过程,提高网络收敛速度和网络性能。
基于上述方法构建网络,同时进行2D目标检测和3D目标检测,通过实验证明这些方法的有效性。
备注:目标检测
目标检测交流群
2D、3D目标检测等最新资讯,若已为CV君其他账号好友请直接私信。
在看,让更多人看到
使用Disentangling形式的损失函数回归2D和3D目标框相关推荐
- CenterNet做2D和3D目标检测
论文Objects as Points 源码GitHub地址 CenterNet是全卷积的神经网络,不需要额外的NMS的后处理,属于one-stage的检测方法. 1.2D目标检测 通过预测目标的中心 ...
- DIoU YOLOv3 | AAAI 2020:更加稳定有效的目标框回归损失
DIoU要比GIou更加符合目标框回归的机制,将目标与anchor之间的距离,重叠率以及尺度都考虑进去,使得目标框回归变得更加稳定,不会像IoU和GIoU一样出现训练过程中发散等问题. https:/ ...
- 3D目标检测综述:从数据集到2D和3D方法
本文经机器之心(almosthuman2014)授权转载,禁止二次转载. 作者:Yilin Wang, Jiayi Ye 机器之心编译 编辑:Panda 目标检测一直是计算机视觉领域中一大难题.近日, ...
- 边框回归的损失函数_CVPR 2019:精确目标检测的不确定边界框回归
本文由AI科技评论读者 BBuf 投稿 来稿见文末说明 大规模的目标检测数据集(例如MS-COCO)在进行Ground Truth框标注时仍然存在歧义.这篇论文提出了新的边界框回归损失针对目标框的移动 ...
- 从数据集到2D和3D方法,一文概览目标检测领域进展
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:深度学习这件小事 目标检测一直是计算机视觉领域中一大难题 ...
- 一文为你详解2D与3D人脸识别有什么区别?
最近业界内刮起了一股"人脸识别安全"的大讨论,小到个人大到超市以及银行,都在使用这个刷脸认证或支付,说它好吧,确实解决了无接触,快速高效等问题,你说它不好吧,也是有原因的,比如最明 ...
- Waymo 2020 | 2D/3D目标检测、跟踪和域自适应性冠军解决方案解析
©PaperWeekly 原创 · 作者|黄飘 学校|华中科技大学硕士 研究方向|多目标跟踪 随着最近 Waymo Open Dataset Challenges 2020 的落幕,其中关于 2D/3 ...
- 收藏 | 3D目标检测综述:从数据集到2D和3D方法
点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:机器之心 AI博士笔记系列推荐 周志华<机器学习> ...
- 三维球体换算到二维_单图像三维重建、2D到3D风格迁移和3D DeepDream
项目网址:http://hiroharu-kato.com/projects_en/neural_renderer.html 代码网址:https://github.com/hiroharu-kato ...
最新文章
- win10双屏让任务栏显示不相同的方法
- .NET实现应用程序登录Web页
- css 文本属性详细总结
- IDM下载速度慢解决方案全网搜集持续更新
- CDATA and comment
- 记录cu上shell比赛的第6题:输入日期,打印天数
- 基础知识(十)C++常用函数.txt
- Java:月份的中英文转换
- linux .bashrc文件修改和生效
- 【体系结构】一条SQL语句经历了什么
- curl和libcurl的区别简介
- MySQL 清除表空间碎片
- 云队友丨如何长久、持续且稳定的做一件事?
- 信息技术与计算机课程标准,再谈新课程标准下的信息技术教学
- JSP页面如何通过Form传递参数到另一个JSP页面
- 用ArcGIS制作核密度分析图
- 数据库安全性案例分享
- 鸿蒙桌面系统什么时候上线,鸿蒙OS全新PC桌面模式即将上线?回顾一下手机桌面系统的发展历程...
- 专利申请流程及费用及时间?
- 一个23万行代码的移植过程
热门文章
- 常系数线性微分方程的直接解法-利用特征方程
- vba 检查一个文件夹中的文件在另一个文件夹中是否存在(不含扩展名)
- 打造超炫的专属Eclipse
- 中缀表达式到前缀表达式和后缀表达式
- Font Configuration and Customization for Open Source Systems - 白皮书翻译和深入
- linux删除命令_【小技巧】Linux命令的快捷键
- 3章.Linux主机规划和磁盘分区
- python路径规划算法可视化_路径规划问题:DIJKSTRA算法 以及Python实现
- C语言中负数补码的方法,c语言里求负数补码的总结不足与优点.docx
- java动态生成excel_java动态生成excel打包下载