前言
纯属个人学习,不做商用,如有侵权请联系作者。此外也并非完全翻译,那没有意义,同时也掺杂了挺多个人的理解,不到位的可以互相交流。
这是开源不久的单阶段目标检测器,主要工作在于特征金字塔方面,北大和达摩的作品,AAAI2019收录,论文地址:https://arxiv.org/abs/1811.04533,Github地址:https://github.com/qijiezhao/M2Det。
摘要
为了解决物体的多尺度问题,单阶段和双阶段的检测器均采用了特征金字塔结构。尽管结果感人,但仍存在一定的限制,因为它们均只是简单地使用了backbone生成的天然的多尺度特征金字塔,这些backbone是为分类任务设计的(意思是适用于分类的不一定很好的适用于检测)。本文中,为了构造更加有利于检测多尺度物体的特征金字塔架构,作者提出了多层级的FPN(MLFPN),分三步:
1. 融合backbone提取的多层特征图作为basic feature。
2. 利用TUM和FVM的模块交替生成一系列的特征金字塔。
3.利用SFAM模块将第2步生成的金字塔中的尺度相同的特征层concat起来。
将该结构称之为M2Det并集成进SSD结构。COCO数据集上,测试时单尺度下,M2Det 取得了41,0的mAP,11.8帧,多尺度下取得了 44.2的mAP,达到了SOTA的结果。
介绍
解决尺度不变性有两个方法,第一个是传统的图像金字塔,毫无疑问费时费力,要用的话也只是在测试的时候,多尺度的测试其实也就是利用了图像金字塔。第二个就是现在流行的特征金字塔啦,图一中说明了几种风格的特征金字塔,简单说就是SSD独立地利用了最后两层地特征,并额外的构造了四个金字塔层级,FPN加入了横向和自顶向下地连接,STDN只是利用了最后一个block的特征。
作者diss图1中a,b,c三种方法的缺陷是:
1. backbone是为分类而设计的网络,提取的特征不一定适合于检测。
2. single-level information,个人理解的意思是金字塔的每一层的feature map几乎均是来自于同一层,信息单一(但是FPN也有顶层的啊,作者也没说明,不过大致应该是这个意思)
通常意义上认为深层的特征有助于分类而浅层任务有助于回归,而且,浅层特征适合于表征外观简单的物体,而深层特征适合于表征外观复杂的物体。实际中,相同大小的物体的外观复杂度可能完全不同,比如近处的红绿灯相比于远处的人体,在现有的结构中这两者应该是在同一层级被检测到,但是这两者需要的特征语义深度是不一样的,人体需要更深的语义而红绿灯则只需要浅层的语义特征,所以有损现有的检测器的性能。
因此本文旨在提出一个更加有效的适合于检测的特征金字塔结构。
Method
相关工作就不说了,毕竟论文也需要凑字数。下面的才是本文的工作,也是重点。图2是整体架构图,其中FFM1,TUM,FFMv2以及SFAM均是该文提出的,以下分别介绍:
1. FFMv1
见图3(a),有两个输入,来自于图2的最后两个stage的卷积层(SSD结构),1024*20*20输出512*20*20上采样得到512*40*40与256*40*40concat得到768*40*40。
2. TUM
见图3(c),U型decoder结构,输出6个尺度的特征图。有8个层级,表示有8个TUM结构,一个TUM表示一个层级。仔细一看应该是类似于FPN的那个top-down和横向连接的方式
3. FFMv2
两个输入,一个是FFMv1的输出,另一个是上一个TUM的尺度最大的输出(128,40,40),cancat一波得到256*40*40,构成当前层级的TUM的输入。
除了第一个TUM的输入是直接来自于FFMv1的输出,剩下的TUM均是来自于FFMv2的输出。而FFMv2又是来自于FFMv1和上一个TUM的输出,加入FFMv1应该是类似于残差的想法。
4. SFAM结构
由图2可知有了8个层级的TUM的输出,每个TUM均会输出6个尺度(图3c),SFAM就负责这些不同层级不同尺度的融合:对每一个尺度而言,从8个层级抽取该尺度的特征图concat到一起(128*8=1024),语义也就实现了从浅到深,再利用SE block对channel做了一个Attention。之后就得到了6个尺度的特征金字塔,金字塔的每一层均是来自于8个从浅到深的语义层级,也就是所谓的Multi-level。这就是不同于现有的金字塔的结构的地方。
最后再利用了两个卷积层进行分类和回归就能得到最后的结果。很明显,个人感觉8个TUM应该会引入较大的参数量,但是从结果来看却又还行,参数比retinanet要少,精度也更高。
Discussion
作者指出,最后结果的提升在于引入了本文提出的MLFPN,支撑点有两:
1. 得到了多尺度多层级的特征金字塔
2. 金字塔每一层有不同语义层级的特征。
说实话这不就是同一个理由嘛,就是好就好在用了多尺度多层级的特征金字塔结构。可视化激活图如下:
这张图挺有意思的,说明一下,原图中有一大一小两人和两车以及一个红绿灯,小车小人以及红绿灯尺度相差不大,从图中可以看出来:
1. 对比与小车和小人,大车和大人在小尺度的特征图上激活值更大(原论文笔误)
2. 小人、小车和红绿灯在同一尺度上被激活(可以很直观的理解,因为尺度一致)
3. 红绿灯、小车以及小人在由浅到深的特征图上被激活(这就印证了作者的假设,由于其复杂性,相同尺度的物体需要的语义信息不一定相同)
后话
该文章还是很细致的,易懂。感觉能把FPN和本文的工作细致的区分开就更好了,FPN也是利用了多层的语义信息,但是融合却没有本文这么复杂,说明了在构造特征金字塔上仔细的研究也能取得不错的成果。