加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动!
同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流。点击文末“阅读原文”立刻申请入群~
CVPR2019 accepted list ID已经放出,极市已将目前收集到的公开论文总结到github上(目前已收集395篇),也包括本文提到的论文,后续会不断更新,欢迎关注,也欢迎大家提交自己的论文:
https://github.com/extreme-assistant/cvpr2019
近日在知乎上看到一个话题,提出了如何看待 CVPR2019 论文 Libra R-CNN,本文是该论文作者的回答~
作者 | 庞江淼Jiangmiao(注:本文封面图误)
来源 |
https://www.zhihu.com/question/319458937/answer/647082241
话题描述:Libra R-CNN的作者们认为目标检测中的不平衡存在于
sample level, feature level, and objective level上,具体而言,在sample阶段是easy/hard&pos/neg的不平衡;在feature level是low/high level特征利用上的不平衡;在object level上表现的是classification and localization的不平衡。依据这些观察,Libra R-CNN中的三个components:
IoU-balanced sampling, balanced feature pyramid, balanced L1 loss依次解决了这些问题,相比两个单阶段和两阶段检测器的两个代表Faster R-CNN和RetinaNet分别高了2+的AP。
这篇paper可能要从去年打COCO比赛的时候说起。准备比赛的时候我们team(mmdet)其实在低baseline上尝试了很多idea,也尝试复现了许多市面上已经有的paper,结果发现本身有gain的module一加到很高的baseline上就不涨了,甚至还会掉…
最刺激的一个事情是比赛deadline当天早上刚刷完夜的我做完ensemble后发现结果竟然还没有单model的高!!几个睡眼惺忪的人围在电脑前一下子全都精神了。慌张debug,最后发现其实是其中的一个componet在ensemble的时候起到了反作用,去掉之后就正常了。
最终我们的做法大家也已经看到了。正如我们的Hybrid Task Cascade for Instance Segmentation描述的一样,其实最终的组件非常的干净,所谓大道至简,大backbone+HTC,再加上大家常用的deformable、sync bn、mstrain/test等trick就是最高的performance了。比赛期间试的一些很复杂的东西最后都不work。
这个结果也启发我们,近几年以来two-stage / single stage detector其实进步都很快,有越来越多的结构被提出。但随着performance的提高,从模型结构方面的改动其实相对已经遇到了一些bottleneck。那么我们能不能尽可能的fix网络结构,想办法去把已有的model train的尽可能的高,不增加任何inference甚至training时候的运算或者时间。也就是我们paper里提到的fully exploit the potential of model architectures.
这篇paper其实是对现有的detector training做了一个overall visit,现有大部分detector其实都遵从select region,extract feature,然后在multi-task loss的引导下逐渐收敛。那么,detector到底能不能train好,其实就跟这三部分关系很大。
选择的region够不够有代表性,能给training process提供更多的信息
抽取的feature能不能被后续的detector更好的利用
设计的objective function能不能引导整体训练更好的收敛
我们发现这三个过程中都存在着well-known的imbalance现象,于是提出了Libra R-CNN(名字抖个机灵),来针对他们进行相应的改进。
1.IoU-Balanced Sampling
OHEM其实一直以来都是选择最有价值样本的好办法, 但是它的问题在于受noise label的影响很大,尤其是COCO这种相对比较脏的数据集,我们比赛期间调了很久都没有调work…一不小心performance就会drop。既然选择proposal的方式是sampling,那么sampling的时候能不能找到一些规律来解决这个问题?统计后发现有的random sampling与hard negative (false positive)的分布在IoU上其实有比较明显的mismatch。通过分IoU均匀采样,我们把这两个部分尽可能的align起来,在COCO上其实达到了比OHEM更好的效果,而且并没有引入什么多余的memory/speed cost。
2. Balanced Feature Pyramid
High-level和low-level的feature对于目标检测是complementary的。怎么样把这些feature更好的integrate起来送给后面的bbox head识别其实很重要。尤其是在不同resolution的feature share了同一个bbox head的情况下,如果他们的variance特别大,其实不利于同一个bbox head的识别(类似于normalizaiton的效果)。于是我们均衡地去把不同resolution的feature integrate起来,用这个feature来enhance最初的pyramid。注意单纯这个操作其实没有引入什么计算,全部通过插值/pooling来实现的,在最终的AP上看到了相应的提升,也证明了这种information flow的有效性。
3. Balanced L1 Loss
目标检测本质上还是一个多任务task,既要识别相应的类别,也要精准定位,那么他们两个在训练过程总的balance就比较tricky,但一味的提高regression的loss其实会让outlier的影响变大(类似于OHEM中的noise label)。于是我们通过特定的enhance比较重要部分的梯度来让这个过程更加smooth,在几个方面寻找一个相对balance的case。单纯的loss在Faster R-CNN上其实可以提升1.2个点,还算是比较明显。
其实三个Component都非常简单…也是我们team在这方面的一次尝试,整体framework应该是high practical use的。除了在Faster R-CNN上提升的2.5 AP以外,Libra RPN使用ResNet-50的Backbone,AR100能够比普通RPN使用ResNeXt101-64x4d(非常强大的一个backbone)高出4个点,说明model确实被train的更好了。
Paper里可能还会有一些并不很完善的地方,我们也会继续改进,也欢迎大家批评斧正。如果大家有什么comments,可以直接戳我,一起进步。
我们会尽快release code,没有直接release的原因是准备趁着这次机会重写mmdetection里的一部分代码,比如非常灵活的给不同head加不同的loss,灵活的调节不同loss的weight,让proposal的assign和sampling的使用更加灵活(现在的其实还稍微有一些麻烦)。
Flag先立在这里,毕竟已经involve进新的task了,只能research累了的时候抽空去撸一些代码。代码ready后会直接merge进mmdetection:https://github.com/open-mmlab/mmdetection
在此也继续欢迎大家对于mmdetection提出相应的建议或者pr,让他变得越来越好用。
ArXiv: https://arxiv.org/abs/1904.02701
*推荐阅读
点击左下角“阅读原文”,即可申请加入极市目标跟踪、目标检测、工业检测、人脸方向、视觉竞赛等技术交流群,更有每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流,一起来让思想之光照的更远吧~
觉得有用麻烦给个好看啦~