rcnn.md 9.8 KB
Newer Older
M
muli 已提交
1 2
# 区域卷积神经网络(R-CNN)系列

A
Aston Zhang 已提交
3
区域卷积神经网络(Regions with CNN features,简称R-CNN)是使用深度模型来解决目标检测的开创性工作,这一小节我们将介绍它和它之后数个重要变种 [1]。但限于篇幅原因,这里主要介绍模型思路而不是具体实现。
M
muli 已提交
4 5 6

## R-CNN:区域卷积神经网络

7
R-CNN的提出影响了后面一系列深度模型的设计。它首先对每张图像选取多个提议区域(例如之前介绍的锚框就是一种选取方法),然后使用卷积层来对每个区域抽取特征,以得到多个区域样本。之后我们对每个区域样本进行目标分类和真实边界框预测。图9.5描述了R-CNN模型。
M
muli 已提交
8

M
Mu Li 已提交
9
![R-CNN模型。](../img/r-cnn.svg)
M
muli 已提交
10

究其根本's avatar
究其根本 已提交
11
具体来说,它主要由以下四步构成:
M
muli 已提交
12

A
Aston Zhang 已提交
13
1. 对每张输入图像使用选择性搜索来选取多个高质量的提议区域 [2]。这个算法先对图像基于像素信息做快速分割来得到多个区域,然后将当下最相似的两区域合并成一个区域,重复进行合并直到整张图像变成一个区域。最后根据合并的信息生成多个有层次结构的提议区域,并为每个提议区域生成目标类别和真实边界框。
M
muli 已提交
14
1. 选取一个预先训练好的卷积神经网络,去掉最后的输出层来作为特征抽取模块。对每个提议区域,将其变形成卷积神经网络需要的输入尺寸后进行前向计算抽取特征。
A
Aston Zhang 已提交
15
1. 将每个提议区域的特征连同其标注做成一个样本,训练多个支持向量机(SVM)来进行目标类别分类,这里第$i$个SVM预测样本是否属于第$i$类。
M
muli 已提交
16 17
1. 在这些样本上训练一个线性回归模型来预测真实边界框。

A
Aston Zhang 已提交
18
R-CNN对之前目标识别算法的主要改进是使用了预先训练好的卷积神经网络来抽取特征,有效的提升了识别精度。但R-CNN的一个主要缺点在于速度。对一张图像我们可能选出上千个兴趣区域,这样导致每张图像需要对卷积网络做上千次的前向计算。当然在训练的时候我们可以事先算好每个区域的特征并保存,因为训练中不更新卷积网络的权重。但在做预测时,我们仍然需要计算上千次的前向计算,其带来的巨大计算量使得RCNN很难在实际应用中被使用。
M
muli 已提交
19 20 21

## Fast R-CNN:快速的区域卷积神经网络

22
R-CNN的主要性能瓶颈在于需要对每个提议区域独立的抽取特征。考虑到这些区域会有大量重叠,独立的特征抽取导致了大量的重复计算。Fast R-CNN对R-CNN的一个主要改进在于首先对整个图像进行特征抽取,然后再选取提议区域,从而减少重复计算 [3]。图9.6描述了Fast R-CNN模型。
M
muli 已提交
23 24 25 26 27

![Fast R-CNN模型。](../img/fast-rcnn.svg)

Fast R-CNN跟R-CNN的主要不同在于下面四点:

A
Aston Zhang 已提交
28 29
1. 用来提取特征的卷积网络是作用在整个图像上,而不是各个提议区域上。而且这个卷积网络通常会参与训练,即更新权重。
1. 选择性搜索是作用在卷积网络的输出上,而不是原始图像上。
J
Joshua Z. Zhang 已提交
30
1. 在R-CNN里,我们将形状各异的提议区域变形到同样的形状来进行特征提取。Fast R-CNN则新引入了兴趣区域池化层(Region of Interest Pooling,简称RoI池化层)来对每个提议区域提取同样大小的输出以便输入之后的神经层。
A
Aston Zhang 已提交
31
1. 在目标分类时,Fast R-CNN不再使用多个SVM,而是像之前图像分类那样使用Softmax回归来进行多类预测。
M
muli 已提交
32

J
Joshua Z. Zhang 已提交
33
Fast R-CNN中提出的RoI池化层跟我们之前介绍过的池化层有显著的不同。在池化层中,我们通过设置池化窗口、填充和步幅来控制输出大小,而RoI池化层里我们直接设置每个区域的输出大小。例如设置$n\times m$,那么对每一个区域我们得到$n\times m$形状输出。具体来说,我们将每个区域在高和宽上分别均匀划分$n$和$m$块,如果划分边界不是整数则定点化到最近的整数。然后对于每一个划分区域,我们输出其最大元素值。
M
muli 已提交
34

35
图9.7中,我们在$4 \times 4$的输入上选取了左上角的$3\times 3$区域作为兴趣区域,经过$2\times 2$的RoI池化层后得到一个$2\times 2$的输出,其中每个输出元素需要的输入均由同色标注。
M
muli 已提交
36 37 38 39 40 41 42 43

![$2\times 2$RoI池化层。](../img/roi.svg)

我们使用`nd.ROIPooling`来演示实际计算。假设输入特征高宽均为4且只有单通道。

```{.python .input  n=4}
from mxnet import nd

44
x = nd.arange(16).reshape((1, 1, 4, 4))
M
muli 已提交
45 46 47
x
```

A
Aston Zhang 已提交
48
我们定义两个兴趣区域,每个区域由五个元素表示,分别为区域目标标号,左上角的x、y轴坐标和右下角的x、y轴坐标。
M
muli 已提交
49 50

```{.python .input  n=5}
51
rois = nd.array([[0, 0, 0, 2, 2], [0, 0, 1, 3, 3]])
M
muli 已提交
52 53 54 55
```

可以看到这里我们生成了$3\times 3$和$4\times 3$大小的两个区域。

A
Aston Zhang 已提交
56
RoI池化层的输出形状是(区域个数,输入通道数,$n$,$m$),一般被当做样本数的区域个数会作为批量值进入到接下来的神经网络中。下面函数输入中我们指定了输入特征、池化形状、和当前特征尺寸与原始图像尺寸的比例。
M
muli 已提交
57 58 59 60 61 62 63

```{.python .input  n=6}
nd.ROIPooling(x, rois, pooled_size=(2, 2), spatial_scale=1)
```

## Faster R-CNN:更快速的区域卷积神经网络

64
Faster R-CNN 对Fast R-CNN做了进一步改进,它将Fast R-CNN中的选择性搜索替换成区域提议网络(region proposal network,简称RPN)[4]。RPN以锚框为起始点,通过一个小神经网络来选择提议区域。图9.8描述了Faster R-CNN模型。
M
muli 已提交
65 66 67 68 69

![Faster R-CNN模型。](../img/faster-rcnn.svg)

具体来说,RPN里面有四个神经层。

70
1. 卷积网络抽取的特征首先进入一个填充数为1、通道数为256的 $3\times 3$ 卷积层,这样每个像素得到一个256长度的特征表示。
J
Joshua Z. Zhang 已提交
71
1. 以每个像素为中心,生成多个大小和比例不同的锚框和对应的标注。每个锚框使用其中心像素对应的256维特征来表示。
A
Aston Zhang 已提交
72 73
1. 在锚框特征和标注上面训练一个两类分类器,判断其含有感兴趣目标还是只有背景。
1. 对每个被判断成含有目标的锚框,进一步预测其边界框,然后进入RoI池化层。
M
muli 已提交
74

J
Joshua Z. Zhang 已提交
75
可以看到RPN通过标注来学习预测跟真实边界框更相近的提议区域,从而减小提议区域的数量同时保证最终模型的预测精度。
M
muli 已提交
76 77 78

## Mask R-CNN:使用全连接卷积网络的Faster RCNN

79
如果训练数据中我们标注了每个目标的精确边框,而不是一个简单的方形边界框,那么Mask R-CNN能有效的利用这些详尽的标注信息来进一步提升目标识别精度 [5]。具体来说,Mask R-CNN使用额外的全连接卷积网络来利用像素级别标注信息,这个网络将在稍后的[“语义分割”](fcn.md)这一节做详细介绍。图9.9描述了Mask R-CNN模型。
M
muli 已提交
80 81 82 83 84 85 86 87 88 89 90 91 92 93

![Mask R-CNN模型。](../img/mask-rcnn.svg)

注意到RPN输出的是实数坐标的提议区域,在输入到RoI池化层时我们将实数坐标定点化成整数来确定区域中的像素。在计算过程中,我们将每个区域分割成多块然后同样定点化区域边缘到最近的像素上。这两步定点化会使得定点化后的边缘和原始区域中定义的有数个像素的偏差,这个对于边界框预测来说问题不大,但在像素级别的预测上则会带来麻烦。

Mask R-CNN中提出了RoI对齐层(RoI Align)。它去掉了RoI池化层中的定点化过程,从而使得不管是输入的提议区域还是其分割区域的坐标均使用实数。如果边界不是整数,那么其元素值则通过相邻像素插值而来。例如假设对于整数$x$和$y$,坐标$(x,y)$上的值为$f(x,y)$。对于一般的实数坐标,我们先计算$f(x,\lfloor y \rfloor)$和$f(x,\lfloor y \rfloor+1)$,

$$f(x,\lfloor y \rfloor) = (\lfloor x \rfloor + 1-x)f(\lfloor x \rfloor, \lfloor y \rfloor) + (x-\lfloor x \rfloor)f(\lfloor x \rfloor + 1, \lfloor y \rfloor),$$
$$f(x,\lfloor y \rfloor+1) = (\lfloor x \rfloor + 1-x)f(\lfloor x \rfloor, \lfloor y \rfloor+1) + (x-\lfloor x \rfloor)f(\lfloor x \rfloor + 1, \lfloor y \rfloor+1).$$

然后有

$$f(x,y) = (\lfloor y \rfloor + 1-y)f(x, \lfloor y \rfloor) + (y-\lfloor y \rfloor)f(x, \lfloor y \rfloor + 1).$$

A
Aston Zhang 已提交
94 95 96

## 小结

A
Aston Zhang 已提交
97
* R-CNN对每张图像选取多个提议区域,然后使用卷积层来对每个区域抽取特征,之后对每个区域进行目标分类和真实边界框预测。
A
Aston Zhang 已提交
98
* Fast R-CNN对整个图像进行特征抽取后再选取提议区域来提升计算性能,它引入了兴趣区域池化层将每个提议区域提取同样大小的输出以便输入之后的神经层。
M
Mu Li 已提交
99 100
* Faster R-CNN引入区域提议网络来进一步简化区域提议流程。
* Mask R-CNN在Faster R-CNN基础上进入一个全卷积网络可以借助像素粒度的标注来进一步提升模型精度。
A
Aston Zhang 已提交
101 102 103 104


## 练习

A
Aston Zhang 已提交
105
* 介于篇幅原因这里没有提供R-CNN系列模型的实现。有兴趣的读者可以参考Gluon CV工具包(https://gluon-cv.mxnet.io/ )来学习它们的实现。
A
Aston Zhang 已提交
106 107 108 109 110 111 112

## 扫码直达[讨论区](https://discuss.gluon.ai/t/topic/7219)

![](../img/qr_rcnn.svg)



M
muli 已提交
113 114
## 参考文献

A
Aston Zhang 已提交
115
[1] Girshick, R., Donahue, J., Darrell, T., & Malik, J. (2014). Rich feature hierarchies for accurate object detection and semantic segmentation. In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 580-587).
M
muli 已提交
116

A
Aston Zhang 已提交
117
[2] Uijlings, J. R., Van De Sande, K. E., Gevers, T., & Smeulders, A. W. (2013). Selective search for object recognition. International journal of computer vision, 104(2), 154-171.
M
muli 已提交
118

A
Aston Zhang 已提交
119
[3] Girshick, R. (2015). Fast r-cnn. arXiv preprint arXiv:1504.08083.
M
muli 已提交
120

121
[4] Ren, S., He, K., Girshick, R., & Sun, J. (2015). Faster r-cnn: Towards real-time object detection with region proposal networks. In Advances in neural information processing systems (pp. 91-99).
M
muli 已提交
122

123
[5] He, K., Gkioxari, G., Dollár, P., & Girshick, R. (2017, October). Mask r-cnn. In Computer Vision (ICCV), 2017 IEEE International Conference on (pp. 2980-2988). IEEE.