文章14
标签9
分类1

FPN(Feature Pyramid Networks for object detection)总结

论文题目:Feature Pyramid Networks for Object Detection
论文地址:传送门

Introduction

在传统的手工提取特征里,金字塔模型用于提取层次化的特征,然而在深度学习里基本上抛弃了这种方式,而FPN(Feature Pyramid Networks)则将金字塔模型融入到深度神经网络当中,从而 在目标检测时取得了显著的提升。

作者展示了四种常见的金字塔模型。(a)即对于不同尺度的影像计算特征,比较慢。(b)即Fast R-CNN等采用的方式,仅利用最后一层特征。©即抽取不同层的特征,如SSD。(d)即本文的FPN所采用的方式。

Feature Pyramid Network

FPN

作者指出其目标为使用卷积网络从低到高的特征层构建特征金字塔模型。模型包含一个从低到顶(bottom-up)和从顶到低(top-down)的路径和一个侧边连接(lateral connection) 。

从底到顶即卷积网络一层层的提取特征,特征图逐渐变小,分辨率逐渐降低,语义信息逐渐变清晰;对于产生相同大小特征图的卷积层,作者将其称为同一阶段(stage);FPN将为每一个阶段(stage)定义一个Pyramid level,通常情况下,每一个level都将从stage的最后一层取出,因为最后一层具有最丰富的信息。
如对于$Resnet$,FPN将取其conv2、conv3、conv4、conv5定义为${C_2,C_3,C_4,C_5}$。

从顶到底和侧边连接:即如上图所示将顶层的特征upsampling后与底层的特征相连接,不断重复一直到最底层,从而构建新的特征金字塔。

如下图以Resnet为例,为了将FPN融入到Resnet当中,首先从${C_2,C_3,C_4,C_5}$中抽取特征,然后对$C_5$进行$3 \times 3$卷积后输出$P_5$;接着将$C_5$二倍upsampling,然后与$C_4$连接,再进行$3 \times 3$卷积得到$P_4$;以此类推得到$P_3,P_2$。

FPN示意图

Applications

首先作者将其应用到RPN(Region Proposal Network)上。

RPN结构示意
对于这样一个RPN来说,在Faster R-CNN中是直接在VGG的conv4或conv5的后面接一个$1 \times 1$的卷积层,得到256维的输出,然后进行localization和classification。
但加入FPN时,作者将VGG中得到的${P_2,P_3,P_4,P_5}$与RPN相连。具体作法为:原本RPN直接输出9个anchor box坐标,但作者将其不同尺寸的anchor box分到不同的FPN层去处理。作者将anchor的大小定义为${32^2,64^2,128^2,256^2,512^2}$,对应着${P_2,P_3,P_4,P_5,P_6}$,$P_6$是特意为RPN加入的一个层;然后每个层都有三个不同的ratio:${1:2,1:1,2:1}$,即加入FPN的RPN在每个点上都有15个anchor box。
对于Fast R-CNN的部分:TODO

Summary

总结起来,FPN就是将传统的金字塔模型进行了调整,使其融入到卷积网络当中,提取不同层次的特征;同时将FPN融入到目标检测网络当中,并取得了很好的效果。

Cascade R-CNN模型总结

论文名称:Cascade R-CNN: Delving into High Quality Object Detection
论文地址:传送门

Introduction

众所周知,在目标检测中IoU的阈值越高,则样本质量就越好,但是一味的提升阈值会引发两个问题:

  1. 样本过少引起过拟合
  2. 在train和inference时使用不同的阈值会导致mismatch
    因此作者提出了一种multi-stage的网络,不断地提高阈值,在保证样本数量的情况下训练出高质量的检测器。

本文的出发点引人思考:在现阶段常用的两阶段目标检测任务当中,通常使用IoU(intersection over union)阈值来确定那些proposal是positive,哪些是negative,一般情况下,这个阈值$u=0.5$,然而0.5的阈值一定合适吗?很多情况下,即使阈值大于0.5,仍然会有很多close false positives,这就导致模型预测出很多噪声bounding box。

如上图所示,$©$和$(d)$分别为不同IoU阈值$u \in {0.5,0.6,0.7}$的情况下,localization和detection perfoemance的情况。如$©$表示不同IoU阈值下,输入proposal的IoU与输出的IoU之间的关系,可以看出,在输入输出IoU相近的情况下,有较好的效果;同时只有当proposal有较高质量时,detector才有较好的表现。

Related Works

作者还列举了一些相关的工作,如上图所示,$H_i$表示卷积,而$C$表示表示分类,$B$表示回归。对于Faster R-CNN,其使用RPN进行提取ROI,然后进行识别和回归;对于Iterative BBox则是通过三个级联的方式,但其三个阶段的阈值是相同的;对于Intergral Loss其设置三个不同的阈值,但各个部分是单独检测的,额米有利用到前面高质量的proposal。其实吧,作者仅仅是在$(b)$的基础上改动了下阈值,但是作者对这种改变做出了深刻的分析。

如上图所示,作者发现,在cascade r-cnn当中,经过不同stage的训练,IoU的质量确实有显著的提升,越靠后,其质量越高;同时我们在前面讲过,对于某一质量的IoU,经过网络之后其质量必然会有所提升,因此经过三个阶段的训练,可以得到高质量的detector。


经过对比,cascade R-CNN精度有了很大的提升,但是在速度上并没有慢多少。

Summary

其实本文最核心的思想就是:作者发现高质量的proposal可以产生更高质量的bounding box,同时还存在mismatch问题,因此将多个r-cnn连接起来,并且设置不同的阈值,将产生更高质量的detector。

Reference

  1. https://zhuanlan.zhihu.com/p/36095768

R-FCN模型总结

论文名称:R-FCN: Object Detection via Region-based Fully Convolutional Networks
论文地址:传送门

Introduction

传统的影像分类模型需要依赖特征的平移不变性(translation-invariance),而对于检测网络,影像的平移显然会影像到目标的定位与识别,因此其需要依赖位置敏感性(translation-variance)。通过 RoI pooling 的插入,打破了原卷积网络的平移不变性,但这种做法牺牲了训练和测试效率。而R-FCN在提升精度的同时利用“位置敏感得分图(position-sensitive score maps)”提升了检测速度。本文的核心即替换Faster R-CNN中单纯的ROI Pooling,引入psROIpooling(Position Sensitive ROI Pooling),从而引入了位置信息,提升了检测速度。
基于ResNet-101的R-FCN在PASCAL VOC 2007的测试集上的mAP=83.6%,速度为170ms per image。

Network Design

R-FCN

如上图所示为R-FCN的示意图,其大部分结构借鉴于Faster R-CNN,如RPN,ROI Pooling,但不同的是将其中的ROI Pooling替换为了psROIPooling,从而解决了位置敏感性的问题。其流程如下:

  1. 影像送入Backbone网络,输出特征图
  2. 使用RPN网络提取Region
  3. 加入一个具有特定数量卷积核的卷积层,得到一定量的特征图
  4. 对于每一个ROI,使用psROIpooling得到新的特征图
  5. Vote确定特征图所属ROI的类别

接下来会详细介绍其实现细节。

Position-sensitive score maps & Position-sensitive RoI pooling

R-FCN采用Resnet作为backbone,将其average pooling和fully connected层的最后一个卷积层作为输出,其是一个2048维的向量($2048 \times 7 \times 7$),接着再加入一个随机初始化的1000维的卷积层($1024 \times 1 \times 1$),最后加入一个包含$k^2(C+1)$个卷积核的卷积层,从而得到$k^2(C+1)$个特征图。

为了将位置信息编码进网络,本文首先将每个ROI分割成$k \times k$的网格,如对于大小为$w \times h$的ROI,则其每一个网格的大小约为$\frac{w}{k} \times \frac{h}{k}$。

接着,我们让第$i+k(j-1)$个score map负责位置$(i,j)$的预测,如对于黄色的score map,我们仅取其左上角的一个网格(即第$(1,1)$个网格)作为新的score map的一部分,那么例如蓝色的score map则负责$(3,1)$位置的预测,即仅取其$(3,1)$位置的网格作为新score map的一部分。

经过这样的映射,新组成的score map就如上图右侧经过ROI pooling之后所示,此时向量的大小为$k \times k \times (C+1)$,即新的score map是由$k^2(C+1)$个特征图经过映射得到的,包含了位置信息,而不是直接的进行ROIpooling。

接着对于大小为$k^2(C+1)$的score map,对$C+1$维上每一层都进行average pooling,得到大小为$C+1$的一维向量,接着使用softmax公式计算其最终的类别。其公式如下:
$$r_c(i,j|\theta)=\sum_{(x,y) \in bin(i,j)}z_{i,j,c}(x+x_0,y+y_0|\theta)/n$$
其中$r_c(i,j|\theta)$表示对于第$c$类经过pool之后的第$(i,j)$个网格,$z_{i,j,c}$表示$k^2(C+1)$个score map中的一个,$(x_0,y_0)$表示ROI的左上角

Bounding Box Regression

为了准确预测bounding box,本文在$k^2(C+1)$的卷积层后添加了一个$4k^2$个卷积核的卷积层,产生了一个$4k^2$维的向量,然后使用average pooling转成4维的向量,让这个4维向量编码$t=(t_x,t_y,t_w,t_h)$。

Refenrence

  1. https://www.jianshu.com/p/df49ff18c8cc
  2. https://zhuanlan.zhihu.com/p/30867916
  3. https://blog.csdn.net/wfei101/article/details/79284512