目录
论文:R-FCN: Object Detection via Region-based Fully Convolutional Networks
来源:NIPS 2016
1. Motivation
- 分类问题需要特征具有变换不变性(translation invariance),目标在图像中的任一位置均不能影响分类结果。CNN由于具有平移不变性,因此在分类问题中能达到比较好的分类准确度,一般来讲,网络越深,其具有的平移旋转不变性越强,这个性质对于保证分类模型的鲁棒性有积极意义。在CNN分类网络的发展中,网络深度越来越深,分类性能也越来越好(AlexNet、VGG、ResNet)。
- 在检测问题中,物体的定位任务要求模型对位置信息有良好(敏感)的感知能力,要求在目标发生平移时,能快速作出正确的响应。因此,在采用CNN做检测时,要求CNN不能太深,否则,过度的平移旋转不变性将会削弱这一性能。研究发现,对于较深的全卷积神经网络(Inception、ResNet 等),Faster-RCNN检测框架存在着一个明显的缺陷:检测器对物体的位置信息的敏感度下降,检测准确度降低。
- 检测问题存在这样一种矛盾:分类问题要求的变换不变性和定位问题要求的变换敏感性之间的矛盾。( a dilemma of increasing translation invariance for image classification vs. respecting translation variance for object detection)
- Faster R-CNN在ROI pooling前都是卷积,是具备变换不变性的,但是,一旦插入ROI pooling之后,后面的网络结构就不再具备变换不变性了。可以说,Faster R-CNN是通过牺牲一些分类网络变换不变性,来增加定位网络变换敏感性的。但是,分类是否正确比定位是否精准更加重要,在保证分类正确的前提下,才考虑如何提高定位精度,因此,网络应该以变换不变性为主,ROI pooling应该放在分类网络和定位网络的共有部分的较深层,而不能放在最深层。
- 为增加定位网络的变换敏感性一般来讲最直观的做法是将RPN的位置稍向浅层移动(比如在ResNet中将RPN嵌入到conv4_x的位置),但这样做存在的问题是,conv5必须删除,以保证Fast-RCNN head接到conv4_x的位置,否则会造成特征不对齐,而删除conv5又会影响检测准确度。
- R-FCN为了在不影响分类所需的变换不变性的情况下,通过引入position-sensitive score maps和position-sensitive RoI pooling,一来增加网络对位置信息的敏感程度,二来大大减小detection head的检测时间。在VOC2007测试集上mAP达83.6%,比Faster R-CNN有所提升,同时速度提高2.5~20倍。
2. R-FCN
2.1 overview
以ResNet-101作为backbone:
- ResNet-101 = 100 convolutional layers + 1 global average pooling and 1 1000-class fc layer
- backone(output 1024-d) = 100 convolutional layers(output 2048-d) + 1 convolutional layer(
1
×
1
×
1024
1\times1\times1024
1×1×1024)
2.2 Position-sensitive score maps
- 为了增加变换敏感性,R-FCN在全卷积网络的最后层之后添加了一个 1 × 1 × k 2 ( C + 1 ) 1\times1\times k^2(C+1) 1×1×k2(C+1)卷积层,输出position-sensitive score maps。
- 共有 k 2 ( C + 1 ) k^2(C+1) k2(C+1)score map:先按部位分成 k 2 k^2 k2组,每组有 C + 1 C+1 C+1个类别。某张score map的某一位置的含义是:该位置包含某个类别 c c c的物体的某一部分的概率值。
- 所谓"位置敏感",其主要思想是在特征聚集时人为引入位置信息,从而有效改善较深的神经网络对物体位置信息的敏感程度。
2.3 Position-sensitive RoI pooling
- 假设RoI在position-sensitive score maps上的左上角坐标为
(
x
0
,
y
0
)
(x_0,y_0)
(x0,y0),RoI的宽和高分别为
w
w
w,
h
h
h,将RoI划分为
k
×
k
k\times k
k×k个bin,则第
(
i
,
j
)
(i,j)
(i,j)个bin
(
0
≤
i
,
j
≤
k
−
1
)
(0\le i,j\le k-1)
(0≤i,j≤k−1)占据的区域为
b i n ( i , j ) = { ( x , y ) ∣ ⌊ i w k ⌋ ≤ x < ⌈ ( i + 1 ) w k ⌉ , ⌊ j w k ⌋ ≤ y < ⌈ ( j + 1 ) w k ⌉ } bin(i,j)=\{(x,y)|\lfloor i\frac{w}{k}\rfloor\le x< \lceil (i+1)\frac{w}{k}\rceil\ ,\lfloor j\frac{w}{k}\rfloor\le y< \lceil (j+1)\frac{w}{k}\rceil\ \} bin(i,j)={(x,y)∣⌊ikw⌋≤x<⌈(i+1)kw⌉ ,⌊jkw⌋≤y<⌈(j+1)kw⌉ } - 在每个通道的每个对应bin区域做pooling,即
r c ( i , j ) = ∑ ( x , y ) ∈ b i n ( i , j ) z i , j , c ( x + x 0 , y + y 0 ) / n r_c(i,j)=\sum_{(x,y)\in bin(i,j)}z_{i,j,c}(x+x_0,y+y_0)/n rc(i,j)=(x,y)∈bin(i,j)∑zi,j,c(x+x0,y+y0)/n其中, z i , j , c z_{i,j,c} zi,j,c表示 k 2 ( C + 1 ) k^2(C+1) k2(C+1)个score maps中第 c c c个score map上与第 ( i , j ) (i,j) (i,j)个bin对应的区域, r c ( i , j ) r_c(i,j) rc(i,j)表示第 c c c个输出值。由于 0 ≤ c ≤ k 2 ( C + 1 ) 0\le c \le k^2(C+1) 0≤c≤k2(C+1),所以此过程将得到 k 2 ( C + 1 ) k^2(C+1) k2(C+1)维向量。通俗地讲,当 k = 3 k=3 k=3时,就是找到top-left区域对应的 C + 1 C+1 C+1个score maps,按类别(即通道数)做平均池化,找到top-center区域对应的 C + 1 C+1 C+1个score maps,按类别做平均池化,. . . ,找到bottom-right区域对应的 C + 1 C+1 C+1个score maps,按类别做平均池化。 - 对上述的
k
2
(
C
+
1
)
k^2(C+1)
k2(C+1)维向量按照类别再做一次平均池化,即
r c = 1 n ∑ i , j r c ( i , j ) r_c=\frac{1}{n}\sum_{i,j}r_c(i,j) rc=n1i,j∑rc(i,j)得到 C + 1 C+1 C+1维向量,再通过softmax函数后即表示该RoI属于各个类别的概率值。
对于定位问题:
- 全卷积网络的最后层之后添加了一个 1 × 1 × 4 k 2 1\times1\times 4k^2 1×1×4k2卷积层输出position-sensitive offset map(论文中未出现该名称,为方便讲述,自己定义的)。显然这时归回器是与类别无关的(class-agnostic),如果要设置与类别有关的回归器(class-specific),则输出通道数为 4 k 2 C 4k^2C 4k2C。
- 某张position-sensitive offset map的某一位置的含义是:该位置需要对物体边界框的某个坐标的偏移量。
- 后续与position-sensitive score map相同,但要去掉最后的softmax。
3. 总结
3.1 R-FCN vs Faster-RCNN
- Faster-RCNN对于每个RoI都需要做一次RoI pooling,同样地,R-FCN对于每个RoI都需要做一次position-sensitive RoI pooling。
- R-FCN目的是减小Faster-RCNN中detection head的检测时间:Faster-RCNN使用RoI pooling得到RoI features后,还需要使用由多层全连接层构成的detection head做分类和回归,而R-FCN在使用position-sensitive RoI pooling后直接得到分类概率和回归值,这就大大减小了检测时间。
3.2 对position-sensitive score maps的理解
- 位置敏感得分图就是多个二分类器的分类结果,即,根据backbone提取的feature maps,利用 k 2 ( C + 1 ) k^2(C+1) k2(C+1)个二分类器( k 2 ( C + 1 ) k^2(C+1) k2(C+1)个 1 × 1 1\times 1 1×1卷积核)进行多次二分类。这些二分类器具有专一性,某一个二分类器对某个类别的某个部位进行二分类。
- 通过对物体进行细分(分成 k 2 k^2 k2个小部分),增加了检测器对位置信息的敏感程度。之前分类关注的是物体的重点区域,现在关注的是物体各个部分的重点区域。