RFCN-双阶段检测模型

  • Post author:
  • Post category:其他




RFCN



动机

FasterRCNN第二阶段中的RCNN细调过程需要对ROI的feature先pooling成相同的size,然后再进行批处理,送到FC层中进行roi-wise的分类和回归任务,RFCN认为双阶段的提速可以在这里做文章,希望可以去掉FC层,用全卷积FCN来做后面的分类回归任务。但是带来的一个问题是卷积操作有平移不变性,适合用在分类任务中,而回归中用到的bbox是希望平移可变性的,因此使用FCN就会带来分类任务希望平移不变性和回归任务希望的平移可变性之间的矛盾。RFCN就是要解决这个矛盾。



方法概要

先上大图

在这里插入图片描述

  • RFCN提好特征后使用1×1的conv来做分类和回归任务,但首先第一步是把RPN网络给到的ROI区域的特征进行分区分类别重新组织。上图中的五颜六色的tensor就是想把一个roi中的object的feature给划分为kxk的bin,然后每个bin其实是有固定的空间位置的,通过这样一个重组织,一个物体的channel的特征会被强行丰富成kxk的通道,每个通道代表了物体的空间位置,一个原本channel为1的响应会被分离到不同的通道中去,再说直白点,上面五颜六色的tensor中,前C个通道是全类别物体左上角的响应,接下来的C个通道是全类别物体中间位置的响应,就这样依次排列下去,最终体现为(c+1)xkxk的tensor上时,可以说这个tensor的不同bin代表了对分类任务的类别贡献度,以及不同的bin对最后回归任务xywh的一个贡献度,是完全可以衡量这kxk个bin到底哪一块对最后的分类和回归任务起了重要的作用,因此后续的操作是进行vote,就不难理解了。



细节及注意事项

  1. 首先输入一张图片,图片要经过resize使得图片的短边的长度为600。
  2. 然后图片先经过ResNet-101来提取特征,ResNet-101主要包括5个卷积网络块。
  3. 其中conv4的输出作为RPN的输入,和Faster R-CNN相同,这个RPN是用来提取proposal的,即提取出RoIs。
  4. 同时,ResNet-101的conv5输出因为是2048-d的,所以又加了一个新的new conv来降低channel的维度,输出的维度为1024-d。
  5. 然后这个1024-d的feature map再输入两个平行的conv layer中,一个用来classification,另一个用来regression。
  6. 对于classification的conv layer会产生一个 (C+1)xkxk 维的position-sensitive score map,然后再结合RPN提取的RoIs进行pooling,之后再为每个RoI得到分类结果。【这里的pooling就是vote】
  7. 而对于regression的conv layer则会产生一个 4xkxk维的position sensitive score map,然后也同样结合RPN提取的RoIs进行pooling,之后再为每个RoI得到回归结果。【这里的pooling就是vote】
  8. 还用了空洞卷积。



评价

把空间上本来紧密相邻的feature进行重新拆分组织,分解到人为定义的空间位置的channel上,然后得到的最终用于分类回归的tensor和center net里面存放和heatmap的多类别channel的tensor是一样的,把物体类别分channel了,让一个类别的物体放在同一个channel中。这块做得非常的显式,但要是让网络影学这种类别分通道的事,或许也能硬train出来。



版权声明:本文为qq_36412570原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。