【AI】目标检测第三话:R-FCN和FPN

【AI】目标检测第三话:R-FCN和FPN

编者按:

在目标检测的发展历程中,有一种很重要的方式来在保持精度的同时提高网络的速度,那就是共享卷积。而从SPP-Net开始提出共享卷积的方式,在之后的几乎所有的目标检测模型都使用了这种方法,Faster R-CNN同样如此,但在RoI-Pooling后的权重并没有共享,那么思考:能不能共享所有的卷积层呢?

文章作者:TeddyZhang
责任编辑:TeddyZhang
文章发表于微信公众号【运筹OR帷幄】:【AI】目标检测第三话:R-FCN和FPN
欢迎原链接转发,转载请私信@运筹OR帷幄获取信息,盗版必究。
敬请关注和扩散本专栏及同名公众号,会邀请全球知名学者发布运筹学、人工智能中优化理论等相关干货、知乎Live及行业动态:『运筹OR帷幄』大数据人工智能时代的运筹学

1目标检测:Region-based Fully Convolutional Networks(R-FCN)

看完了faster R-CNN,我以为这个算法速度就到达了极限了,但是大佬的团队又很快的改进了这种方法,虽然没有之前的提升那么多,但是总体上还可以,比faster R-CNN快了2.5-20倍,大约每张0.17s。让我们一起来看看大佬是如何思考的,其实这种思路我们之前说过,就是共享卷积层,但是前面已经共享了很多了,作者就开始思考:RoI后面的全连接部分能不能变成卷积层然后放到RoI的前面呢?变成一个全卷积网络!


论文地址:

arxiv.org/abs/1605.0640

代码地址:

github.com/PureDiors/py


算法总览


R-FCN框架的由来是由于,faster R-CNN对卷积层做了共享(RPN和Fast R-CNN),但是经过RoI pooling后,却没有共享,如果一副图片有500个region proposal,那么就得分别进行500次卷积,这样就太浪费时间了,于是作者猜想,能不能把RoI后面的几层建立共享卷积,只对一个feature map进行一次卷积,这个思路是不是很熟悉?通过上图的对比,我们知道,R-FCN具有更深的共享卷积网络,是一个真正的全卷积的结构。但与Faster R-CNN相同,其最后的输出是object的分类和BB回归。

接下来,我们对R-FCN的算法进行进一步的了解:


  1. 输入一张图片到已加载预训练权重的分类网络(本文使用的为ResNet-101的Conv4之前的网络)。
  2. 经过预训练网络后,在最后一个卷积层存在有3个分支,第一个是在feature map上面做RPN网络,得到相应的RoI,第二分支就是得到该feature map上的一个

维的position-sensitive score map,用做分类。相同的方式同时得到第三分支为一个

维的position-sensitive score map,用于BB回归。

两个score map上分别执行position-sensitive pooling获得其最终的类别和位置信息。


Translation Invariance & Variance

(分类)位置不敏感性:简单来说,对于一个分类问题,我们强调的是其位移不变性,即一只小狗,不管它在图像中如何移动,变换,我们都希望网络可以准确的区分其类别,实验也证明,像Resnet-101和GoogLeNets这种深层的全卷积网络都具有这样的性质。

(检测)位置敏感性:对于检测任务来说,我希望我的网络可以检测到物体微小的移动,并准确输入其位置坐标,所以这类网络对位置就很敏感,但很显然,深层网络不具有这种性质,微小的移动可能在高层特征体现不出来了。

基于ResNet的检测网络通常会使用RoI层将网络划分为共享卷积层和RoI-wise层,第一部分通过共享卷积层提取图像特征,第二部分一般为全连接层,分别对每一个RoI做分类和回归。此时,第二部分的计算并不是共享的。这也是R-FCN要改进的地方!


Position-sensitive score map & RoI pooling

由于我们现在的检测网络既要分类,又要定位,这样就会很矛盾,那么如何解决上面说的问题呢?而ResNet的论文中为了解决这个问题,将RoI pooling放置在了卷积层的中间,而不是最后一层,这样就使得RoI pooling后面的卷积层有了位置敏感性,从而使检测精度提高,但缺点很明显,由于RoI pooling并不是共享计算的,而是针对每个RoI,所以速度很慢。

而R-FCN提出了Position-sensitive score map,将RoI-wise层提到了前面,并实现了共享特征计算,从而实现了速度和准确率上的折中。其重要思想是:如果一个RoI中有一个目标,假设为人,我们将这个RoI划分为k*k个子区域,文中k=3,那我们很容易知道top-center区域是人头的位置,所以我们就完成了物体的各个部位与RoI的子区域之间的“一一对应”。



这样的话我们就可以判断出RoI是属于物体还是背景了!这就是position-sensitive的含义,而对于score map其实质就是一个feature map,其宽和高都与最后一个feature map一样,只是维度我们设为

,而同时要产生

个score map,这是由于我们每个子区域的响应要到不同的score map上去寻找,也就是说每个score map都只关心某个子区域,即第k个子区域响应在第k个score map的第k个子区域相对应的位置。这样就可以准确的进行类别的分类,同时对位置信息很敏感。具体是如何找到的?

这就是Position-Sensitive pooling,我们利用RPN网络提取出的RoI,其有位置信息(x,y,w ,h)。然后会被划分为

个bins。每个bin对应score map上的一个区域,我们需要对这个区域进行pooling操作,并且是平均池化操作从而得到

维的向量,然后进行vetor,得到最终的类别概率。


Position-Sensitive Regression

与上面的Position-Sensitive Score map和RoI pooling类似,只不过我们最后每个RoI输出不是C+1,而是偏移量4。所以我们在共享卷积层的最后一层连接上与上面并行的score map,其维度为

,然后经过上述的RoI pooling,最后得到一个4维的向量作为BB回归。整个思路与上面大体相同,产生的偏移量分别为w, h, x, y。


网络结构

ResNet101,一种很深的网络,让硬件不行的玩家望而却步!!


算法总结

优点:

  • 使用了全卷积的网络,实现了完全的计算共享
  • 速度比Faster R-CNN快了2.5-20倍,达到了0.17s/img
  • 准确率相比faster R-CNN在速度优势的情况下,稍有提高
  • 分析了分类与检测的位移敏感性,并提出了解决方案

缺点:

  • 只是在一个特征尺度上进行,也就是只使用了一个特征层,可以类比SSD在多尺度上进行检测


2目标检测:Feature Pyramid Network(FPN黑科技)

在我们赞叹faster R-CNN和R-FCN的速度和精度时,大佬们就在想如何进一步的提高精度,在COCO2016挑战赛时,作者在基本的Faster R-CNN中使用了FPN结构,在检测精度上超过了任意一个单模型的结果,并刷新了单模型的记录。不仅如此,其速度也是很快,在GPU上可以达到6fps。FPN又叫特征金字塔网络,图像金字塔的概念在传统算法中非常常见,如SIFT特征,可以使网络适应不同尺度的图片。让我们一起来看看在卷积网络中如何去构建金字塔模型的!

论文地址:

arxiv.org/abs/1612.0314

代码地址:

github.com/jwyang/fpn.p

之前在Faster R-CNN,我们提到了这个算法只使用了一个尺度的feature map,但是可能这层特征的语义表达不是那么的强,但如果选择后面的层的话,虽然语义表达强了,但是其位置信息可能就不是那么充分了。所以我们需要在不同尺度的feature map进行分类和检测,这样才可以得到充分的语义信息和位置信息。SSD模型是首个尝试将特征金字塔应用到深层卷积网络中的,但是为了避免使用底层信息,SSD从网络的高层开始建立金字塔网络(VGG16中的conv4_3),然后在后面增加了几个新的层。因此,SSD错过了重用特征层高分辨率信息的机会,所以就造成了SSD对小目标的召回率有点低。

通过上图我们可以分析:

1. 使用图像去建立特征金字塔,每个尺度图像独立计算特征,很慢

2. 检测系统只使用单个feature map,如faster R-CNN

3. 构建卷积层特征金字塔结构,但是可以看到其语义特征从高层到底层一直下降(蓝色的深度),这就导致小目标的检测不太好,如SSD

4. 作者的FPN结构,速度与2,3相比一样快,但是更准确。由于其将高层特征经过上采样与底层进行拼接,这样就增加了底层的语义特征

作者经过试验发现,基于一个base的Faster R-CNN检测器,我们可以在COCO中超过任意一个单模型记录。对于目标检测,FPN在COCO提高了2.3%的mAP,在VOC提高3.8%的mAP。极大提高了准确度。


Bottom-up pathway

这是描述我们一般的网络结构,一般是自底向上,特征图的大小基本都是2倍的形式缩小,同时特征的语义表达也越来越强。而在每一层通常有许多大小相同的repeat,它们处于网络的同一阶段,所以我们选用每个阶段的最后一层的输出作为我们建立金字塔的参考层。接下来以ResNet为例,讲解下特征层的选取!

由于conv1占用了大量内存,我们就不使用它,我们将每个阶段的最后输出(conv2,conv3,conv4和conv5)表示为{C2, C3, C4, C5},并且与输入图像相比,它们的步长为{4,8,16,32}。


Top-down pathway and lateral connections

其实上面的自底向上的方式在SSD中已经应用,接下来说说FPN的创新,它在SSD的Bottom-up方式的基础上使用了自顶向下和横向连接的方式,用来增加底层的语义特征,同时FPN的金字塔从conv2开始,使得底层信息特别丰富,尤其是小目标的位置信息,对小目标的召回率的提高有很大的帮助。

由于FPN的网络在正向传播时feature map在每个阶段进行下采样,即降为原来的1/2,所以如何把高层特征与底层特征相结合呢?它们可是差了2倍的关系呢。这时候就要想到上采样了,我们可以把高层特征经过上采样,与经过1x1卷积核的底层特征相加或者是concate。作者是直接相加,这样就可以得到更丰富的语义信息。

注意的是,由于FPN中的金字塔每个层都共享统一的分类器和回归器,所以它们之间的特征维度要保持一致,因此我们在横向连接时使用了1x1的卷积核,进行通道的压缩,使其维度保持一致,本文中为256。由于ResNet模型本身是鲁棒的,所以FPN整体也是鲁棒性特别高的。

注释:对于卷积网络而言,不同的深度对应不同层次的语义特征,浅层feature map的分辨率大,学的更多是细节特征,高层feature map的分辨率小,学到的更多是语义特征,更加抽象难以解释。所以FPN在更大的特征图进行操作,这样对小目标有很好的作用。


网络结构

ResNet101(Faster R-CNN)


算法效果

COCO检测成绩

算法总结

优点:

  • 改进了SSD的特征金字塔,使得底层拥有更强的语义特征
  • 使用了更大的feature map,使得小目标的检测更加有效
  • 在改进结构的同时,速度仍然还是很快

缺点:

  • 暂无,加到任意一种模型上面精度都有些许的提高~黑科技,哈哈

参考文献

【1】W. Liu, D. Anguelov, D. Erhan, C. Szegedy, and S. Reed. SSD: Single shot multibox detector. In ECCV, 2016.

【2】J. Long, E. Shelhamer, and T. Darrell. Fully convolutional networks for semantic segmentation. In CVPR, 2015

【3】K. He, X. Zhang, S. Ren, and J. Sun. Deep residual learning for image recognition. In CVPR, 2016

【4】J. Dai, Y. Li, K. He, and J. Sun. R-FCN: Object detection via region-based fully convolutional networks. In NIPS, 2016.

【5】K. He, X. Zhang, S. Ren, and J. Sun. Spatial pyramid pooling in deep convolutional networks for visual recognition. In ECCV. 2014.

【6】S. Ren, K. He, R. Girshick, and J. Sun. Faster R-CNN: Towards real-time object detection with region proposal networks. In NIPS, 2015.

【7】R. Girshick. Fast R-CNN. In ICCV, 2015

【8】R. Girshick, J. Donahue, T. Darrell, and J. Malik. Rich feature hierarchies for accurate object detection and semantic segmentation. In CVPR, 2014.


可以在 本公众号后台 回复关键词:“供应链”获取大量由我平台编辑精心整理的学习资料,如果觉得有用, 请勿吝啬你的留言和赞哦!~

文章由作者授权『运筹OR帷幄』原创发布,如需转载请在公众号后台获取转载须知


【AI】板块副主编招聘要求:

1.计算机视觉、语音识别、自然语言处理方向硕士毕业或博士在读,及以上学历也可。

2.有文字编辑经验,博客或知乎专栏写作经历,善于沟通与协调

3.有时间,有责任心,保证每周工作 2-3个小时。


『运筹OR帷幄』招募

【视频】【OM】【报道】【优化】【DS】【AI】等版块

现招募(副)主编

要求:相关专业硕博在读或以上,有业界/创作/视频直播经验者优先。

请将简历发送至:operations_r@163.com

欢迎加入我们这个大家庭!


扫二维码关注『运筹OR帷幄』公众号:

点击查看『运筹OR帷幄』志愿者招募介绍及加入方式

编辑于 2019-02-03

文章被以下专栏收录