作者丨慕弋云子@知乎
来源丨https://zhuanlan.zhihu.com/p/455897310
编辑丨3D视觉工坊
本文已被收录在单目3D目标检测的综述文章中。如果你对单目3D目标检测的相关概念不甚了解,或想查阅更多文章、了解领域发展,欢迎阅读此文:https://zhuanlan.zhihu.com/p/432135656
基本信息
论文题目:Learning Auxiliary Monocular Contexts Helps Monocular 3D Object Detection
论文链接:https://arxiv.org/pdf/2112.04628.pdf
代码链接:https://github.com/Xianpeng919/MonoCon(22.01.07暂未更新)
概述
这是一篇当前单目3D目标检测的SOTA文章(2022.01.07,16.46%)。其网络结构几乎完全承接于CVPR'21的MonoDLE,只是添加了早就被深度学习领域所研究的「辅助学习」(Auxiliary Learning,以下简称AL)模块,以及一些normalization,以提升主流模型的泛化能力。
注意,这里的泛化能力并不是指数据集之间的泛化,而是单纯从域内的训练集-验证集角度而言,解决其潜在的过拟合问题(具体细节在下文讨论)。这样的设计表面上看就是加了模块、加了trick把点数提了上去,实则有许多玄机值得我们讨论,因此还是决定腾出时间来写一下。
MonoCon网络结构
Pre-thinking
说实话,几周前拿到这篇文章的时候,由于在忙开题的各种事情,并没有对这篇新出现的SOTA太过关心,也没有什么pre-thinking就开读了。读着读着发现,这好像是一篇披着MonoDLE羊皮的狼,里面纷繁复杂的公式居然很容易看懂诶……
本来以为还有什么精致的网络设计,结果是有点简简单单地MonoDLE + AL的感觉。因此,我认为诸位在看之前可以首先思考一下这两个问题:
·什么是AL,以及这样的模块/结构为什么可以带来点数的提升?
·在设计AL模块的过程中,为什么选择对应的内容作为额外的监督?
问题1,我在看之前对AL是完全不了解的,所以在本文中我会首先对AL的概念做介绍;问题2,实际上也触碰到了问题的核心——这之前我们也是很想利用corner points的,但一直苦于寻找合适的利用方式。这之前也有RTM3D这样利用corner points的文章,但其代码不具有reproducibility,也比较可惜。
Auxiliary Learning
所谓「辅助学习」,实际上是和「迁移学习」、「强化学习」、「流行学习」之类的概念一样,都是学习,都是机器学习的分支。用大白话讲,辅助学习就是在training阶段增加一些网络分支,对其计算loss项,而在infer阶段完全忽略掉它们,以期得到更好的特征表示。这些添加的内容很可能与任务预测的参数并不相关,而单纯是希望网络特征能“具有这个能力”。
如果这样说起来有些抽象,简单举个栗子:比如2D目标检测,一般我们学习到中心点和bbox的长、宽就能得到表示结果了,就能去输出各种指标了。但如果我们对提取的特征接一分支学习场景的深度信息,是否能够带来对目标检测结果的提升呢?毕竟我们人在检测目标时,实际是对深度信息有着良好先验的,或许这样的知识能够帮助我们更好地完成检测任务,这就是AL的思想。
以传统的目标检测任务为例,Auxiliary Learning的示意图
所以,这些被额外添加的分支,事实上只影响了对特征的学习,抽象地说就是让特征具有表征、预测xx的能力。这便与Multi-task Learning的思想十分契合,之前我对多任务学习的理解还不够,现在明白,其实多任务学习并不只是“方便”(一次完成多个任务),而更多地是让网络“有能力”——真正的学霸不会偏科,积分都求不好怎么研究力学?从这个角度讲,我们三次元中的人也应该广泛涉猎,提升自己的能力……
咳咳,扯远了。除了对特征加入更丰富的表达能力外,还有说法是多任务学习也可以有效避免单任务的过拟合,就像dropout之类的操作一样。这一点听起来也有点“玄学”,但本质上其实也是不让特征学习趋向于单一任务,不“走火入魔”,不“钻牛角尖”地关注某个不靠谱的点,而是多吸收百家之长,因此就具有更强的泛化能力。
这里的过拟合、泛化能力并不只是从某一数据集到另一数据集的泛化,包括是在训练集上训练、在验证集/测试集上测试的能力。我曾使用MonoDLE的方法,在训练集上训练,在训练集上测试,AP3D-R40能够达到70%~80%(具体实验结果懒得翻了,欢迎大家自行尝试);而众所周知,现在在验证集上的SOTA也就大概只有15%~20%。
这说明当前的SOTA并没能很好地学习一种泛化特征,学习到一个Pattern,存在严重的过拟合现象。也因此,AL能够非常适合单目3D目标检测任务这样一个多任务学习的工作,本质上它们都是在寻找更好的特征表示。
辅助模块的设计
首先需要指明,本篇MonoCon的整体网络结构都是基于MonoDLE之上搭建的(大概三四月份MonoDLE放出代码,AAAI投稿在九月,效率够快)。包括MonoDLE当中的Samples Coding等trick,虽然在论文中没有提及,但是都有沿用,这一点我专门向作者发了邮件确认。
关于MonoDLE的结构,看起来简单,实际上要把infer时decode的部分也算上就很复杂了,这里我放一张自己组会时做的图,大家可以姑且认为是一个特征提取(DLA-34)+多头(conv2d,512→256→c,c视预测参数的数量而定,为图中绿色数字)分别预测各个参数的结构。
根据MonoDLE的代码,得到的网络结构示意图
为了更好地讲解MonoCon的设计,这里对MonoDLE中预测的参数内容做一整理:
1. heatmap
参见CenterNet(https://arxiv.org/abs/1904.07850)等系列文章,其思想是,用一个Gaussian分布将物体转化为一个(如中心点)或多个关键点(如wire-frame图)的表示,这样就可以避免使用anchor等复杂的手段,从而直接建立输入RGB图与heatmap图(Gaussian分布)之间的label关系,用于训练和检测。
你可以看到heatmap的c=3,因为此处的heatmap图是class-specific的(区别于class-agnostic),即每一张RGB图会分别输出3张heatmap,对应于单目3D任务中车、人、骑手三个类别各自的物体。class-agnostic就是c=1,注意这个概念后面要考哦。
显然,生成heatmap GT中的一个Gaussian分布需要一个参考的点,MonoDLE在此尝试了是用2D bbox的中心好,还是3D bbox中心点在2D上的投影好,并通过实验对比发现用3D中心投影点更好,于是以此来生成heatmap的GT。
2. offset_2d、offset_3d:
从heatmap中心到2D bbox中心/3D bbox中心投影点的位移。offset是在2D Image上的xy,所以均是二维的,c=2。(显然,无论在生成heatmap时使用上述两者的哪一个,offset_2d和_3d都会有一者为0,这里似乎存在一定冗余性,有待后续实验探究)
3. size_2d、size_3d
2d bbox的长宽、3d bbox的长宽高,分别对应c=2和c=3。注意,size_2d和offset_2d所共同完成的对2D bbox的预测都不是3D目标检测任务必须输出的内容,然而前序工作基本都学习了这部分知识。
4. depth
3d bbox中心投影点的深度值(也即是3d bbox中心的z坐标)和其对应的不确定性分布的标准差。训练时以Aleatoric Uncertainty loss约束,c=2。
5. heading
局部方向角,此处依循前序工作的multibin策略,将整个 2π 范围的角度分成12个bins,并将回归问题转化为先分类(角度属于哪个bin)再回归(bin中心到角度的残差)的问题,因而c=24。
以上的内容MonoCon都有保留,对应网络中浅蓝色的区域和上方灰色区域内2D Bbox Size的module(深蓝色箭头)。细节上有一点微小的区别就是MonoCon使用的是2D bbox的中心点作为参考点回归heatmap,而非3D bbox中心。
除此之外,MonoCon还设计了4个新模块用于AL,分别是:
1. 9个关键点的投影(projected keypoints)对应的heatmap
9个关键点对应3D bbox的8个corners和中心点。虽然与MonoDLE的参考点设计不同,但事实上你可以理解为,MonoCon采取的思想是“我全都要”:3D bbox中心投影点在此处又以heatmap的方式完成了学习。
这里有个很关键的问题。从MonoDLE的角度讲,我们通过heatmap、offset_3d和depth,就能够计算出3D center在相机坐标系下的坐标,也就能对应地计算出其投影点;如果再结合3D长宽高信息,事实上也可以计算出8个corners的坐标及投影点,那么是否这样的设计就冗余了呢?
这里论文没有给出讨论(可能容易讲不清楚),我个人的看法是,这里是从特征直接学习得到的,和我们分任务监督后计算的是不一样的,也就是说,我新增加了一组参数的约束,让特征在这组参数的计算下能够得到这9个关键点的信息,这样loss会直接影响到特征学习和这组参数(虽然参数在infer阶段会被丢弃,但特征不会),而不是去重新影响另外几个head的参数。
我认为这个观点,如果在论文中真要argue,可能需要对比实验直接加一个新的项做loss好不好,然而这又是不公平的,因为额外的head就会引入额外的参数量,你又如何辩解不是因为增加了可学习参数量而带来的效果呢,更何况这些参数最终还会被丢弃……所以只能姑且根据网络的设计来这样理解了。
最后,注意c=9。这意味着这里的设计就是class-agnostic的了(所以又不是完全的“我全都要”,哈哈),就是说不区分类别都回归对应的corners。在之后的Ablation Study中,作者对比了两种设计方式,并表示agnostic的会更好一些。
2. 对应以上关键点的offset学习
3D center的offset已经在下面学习过了,所以只能学习到8个corners的offset啦,于是这里就是顺理成章的c=16。我只能说,这样的设计至少看似是十分冗余的,但既然他效果好,fine……那就只能解释为exploit更多的label信息了=_=。
3. Quantization Residual
量化残差?为了避免我的理解有偏差,这里把论文原文的部分放上来:
MonoCon原文对于量化残差的叙述
根据这段话,我的理解是,这就像是RoI Align一样,因为特征学习时会取整缩小尺度,再放大还原时就会造成微小误差一样,需要再学习一个小的残差对齐。
他这样解释,如果强行理解可能也可以,毕竟这个参数量级,一个4倍取整的规律咱没准也可以回归出来嘛不是,然后我在给作者发的邮件里也问了这个问题,他们说就是按论文上写的这样做的……那大家尽量理解理解。
退一万步讲,我们还是不要忘记设计AL的初心。从早期诸多方法利用预训练的深度模型,获得整个RGB图的深度信息,到现在我们利用直接回归的方法,去anchor-free地预测中心点,本质上我们是在完成一个稀疏GT的深度预测问题。稀疏指的是在相机坐标系下我们只有8个corner的真实坐标(中心点取平均就得到了),深度预测问题是指,现在单目3D问题的痛点主要在于object location,也即3D center的预测上(见MonoDLE)。
如何利用好这些稀疏的GT信息才是我们设计网络的核心,从某种程度上这也正是为什么我们要exploit 8个corners做冗余监督的出发点。介于此,如果以后要尝试更多的模块或利用更多的信息,大概会是往采样上靠,即关键点真正地随机化而非手工设计。当然了,以上只是依循目前的思路,还是有很多其他的路可以走。
Normalization
除了以上辅助模块的设计是独立于MonoDLE的之外,还有两点微小而重要的细节设计与其不同:一是对所有的head添加了normalization,二是将head中间层的数量从256改为了64。
我们来聚焦一下这个head的设计,也即论文中的g函数,其是以数学公式的形式表示的:
如果你对数学表达式比较头疼,那么可以对照着之前MonoDLE的结构来看,从橙色特征体出发到蓝色和绿色,就是这个数学表达式所对应的内容。当然,在第一次卷积与激活之间,MonoCon加入了AN(Attentive Normalization),以及d的值(蓝色体的厚度)变为了64。
AN是MonoCon这个组里的另外一篇文章(通讯作者都是Tianfu Wu),arxiv编号1908.01259(https://arxiv.org/abs/1908.01259)。我个人对Normalization研究不多,看起来AN就像是BN(BatchNorm)+SE(Squeeze-Excitation)的结合。
很直接地,我们就会想到为什么要用AN?作者在文中对此问题避而不谈,所以在给作者的邮件里我也问了这个问题,其表示,“在他们有限的实验结果中,AN > BN > GN”。而在我自己有限的实验里,GN > BN > 啥也不加,AN还没试是因为他们论文原代码使用的mmcv库,而我在将pytorch版本提升到1.5的过程中遇到了很多瓶颈(如精度下降等)。
令人迷惑的Ablation Study
为什么要把这个Normalization单拿出来提呢?因为实际上AN带来了意想不到的效果提升,请看文中给出的ablation study表格:
MonoCon原文中的Ablation Study表格
注意这张表格是validation set上的结果,而test set上的SOTA在15%左右(表格最后的19.01对应着test set的16.46),供参考。之所以说迷惑,是因为你看我这些分析是否成立:
·如果单纯对比MonoDLE和MonoDLE*,AN带来了~3.1%的性能提升。
·如果对比(*)和(a),会发现2D bbox的预测虽然不是3D任务所必须,但不预测会带来~6.5%的下降,侧面说明其作为AL模块的必要性。
·对比(*)和最后的(Ours),会发现设计的另外4个AL模块,在加入AN的基础上又带来了总体~2.3%的提升。
然后就开始离谱了:
·对比(*)和(b),会发现设计的“量化残差”和3D关键点的heatmap作为AL训练时,居然会带来~5.3%的性能下降。
·对比(*)和(c),也会得到类似的结论,再对比(b)和(c),你可能会认为AL模块中offset的学习更加关键一些。
·对比(*)和(d),会发现2D bbox预测的AL,与其他四个模块的AL,某种意义上效果相当。
·对比(g)和(Ours),会发现在AL模块的基础上,AN反而没有那么大的效果了。如果结合MonoDLE原始实验来分析,你也可以说Aux模块带来了~5%的点数提升,AN却只带来了~0.3%的提升。
可能主要还是(b)和(c)的实验结果太迷了,在保有2d bbox的预测下,指标居然会大幅下降。
其他细节
另外在实验设置上,MonoCon也与MonoDLE有很大的不同。这里列一个表格做对比:
还有一些其他warmup等细节不同,略过。
总结
总的来说,MonoCon其实是一篇非常优秀,很值得我们学习的工作,尤其是AL的应用其实对很多任务都很适用,而且其idea的来源也很自然,是那种我们“本该想到”的工作:之前所有人都在输出2d bbox,而我们只是觉得习以为常了,没有问题为什么,以及多任务学习等很多因素,让AL的应用显得非常朴素、适合。
不过至于之后在此work之上可能会有什么发展,我水平有限就不做判断了,当然我个人觉得可能一个是之前说到的关键点采样化,另一个就是更多地在normalization、loss项等等trick上卷,感觉差不多是这样吧。
水平有限,欢迎各位带着批判的眼光阅读和讨论。
本文仅做学术分享,如有侵权,请联系删文。
3D视觉精品课程推荐:
2.面向自动驾驶领域的3D点云目标检测全栈学习路线!(单模态+多模态/数据+代码)
3.彻底搞透视觉三维重建:原理剖析、代码讲解、及优化改进
4.国内首个面向工业级实战的点云处理课程
5.激光-视觉-IMU-GPS融合SLAM算法梳理和代码讲解
6.彻底搞懂视觉-惯性SLAM:基于VINS-Fusion正式开课啦
7.彻底搞懂基于LOAM框架的3D激光SLAM: 源码剖析到算法优化
8.彻底剖析室内、室外激光SLAM关键算法原理、代码和实战(cartographer+LOAM +LIO-SAM)
重磅!3DCVer-学术论文写作投稿 交流群已成立
扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。
同时也可申请加入我们的细分方向交流群,目前主要有3D视觉、CV&深度学习、SLAM、三维重建、点云后处理、自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流、ORB-SLAM系列源码交流、深度估计等微信群。
一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。
▲长按加微信群或投稿
▲长按关注公众号
3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列、三维点云系列、结构光系列、手眼标定、相机标定、激光/视觉SLAM、自动驾驶等)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近4000星球成员为创造更好的AI世界共同进步,知识星球入口:
学习3D视觉核心技术,扫描查看介绍,3天内无条件退款
圈里有高质量教程资料、答疑解惑、助你高效解决问题
觉得有用,麻烦给个赞和在看~