区域卷积神经网络(R-CNN)系列
区域卷积神经网络(region-based CNN或regions with CNN features,R-CNN)
快速的R-CNN(Fast R-CNN)
更快的R-CNN(Faster R-CNN)
掩码R-CNN(Mask R-CNN)
R-CNN
R-CNN首先从输入图像中选取若干个(如2000个)提议区域(如锚框),标注他们的类别和边界框。然后,用CNN对每个提议区域提取特征。然后用每个提议区域的特征来预测类别和边界框。
如何选取一开始的提议区域,就是使用选择性搜索这样一种办法。
具体步骤如下:
- 对输入图像使用选择性搜索来得到多个高质量的提议区域(锚框)。这些提议区域通常是在多个尺度下选取的,具有不同的形状和大小(如之前所看到的锚框的选取方法)。每个提议区域都要被标注类别和真实边界框(就是打上label)。
- 然后选择一个预训练的CNN(在输出层之前截断)。将每个提议区域变形为网络需要的输入尺寸,然后通过CNN抽取特征。
- 将每个提议区域的特征连同其标注的类别作为一个样本。训练多个支持向量机SVM对目标进行分类,其中每个SVM用来判断的是样本是否属于某一个类别。
- 将每个提议区域的特征连同其标注的边界框作为一个样本,训练线性回归模型来预测真实边界框。
不难想到,对每一个图像,我们都可能选取出上千个提议区域,这需要的是上千次的CNN前向传播来提取特征,从而执行目标检测。计算量过于庞大。
Fast R-CNN
R-CNN之所以慢,是因为其对每一个提议区域,CNN的前向传播特征提取是独立的,没有共享计算。可能存在多个提议区域重叠,独立的特征抽取会导致重复的计算。
Fast R-CNN对R-CNN的主要改进之一就是仅仅在整张图象上执行卷积神经网络的前向传播,即提取特征。
主要步骤如下:
和R-CNN相比,Fast R-CNN用来提取特征的CNN的输入是整张图象,并不是各个提议区域。而且,这个提取特征的网络将参与训练,设输入为一张图像,CNN的输出的形状记为$1 \times c \times h_{1} \times \omega_{1}$。
在选择性搜索之后,得到多个高质量的提议区域(锚框),假设生成了n个提议区域。这些形状各异的提议区域在卷积神经网络的输出上分别标出了形状各异的兴趣区域(比如按照比例在原图上的锚框映射到输出特征上)。
然后,这些感兴趣的区域需要进一步抽取出形状相同的特征(比如需要指定高度$h_{2}$和宽度$\omega_{2}$),以便于连结后输出。Fast R-CNN使用的方法是引入兴趣区域汇聚层(RoI pooling):将CNN的输出(特征)和提议区域作为输入,输出连结后的各个提议区域抽取的特征,形状为$n \times c \times h_{2} \times \omega_{2}$。
通过全连接层将输出的形状变为$n \times d$,其中超参数$d$取决于模型设计。
预测n个提议区域中每个区域的类别和边界框。即在预测类别和边界框时,将全连接层的输出分别转换为形状为$n \times q$(q是类别的数量)的输出和形状为$n \times 4$的输出(一个输出的是类别概率,一个输出的是边界框的坐标表示)。其中预测类别时使用softmax回归。
关于兴趣汇聚层(RoI pooling),具体做法是:
指定每个区域的高和宽分别为$h_{2}$和$\omega_{2}$。对于任何形状为$h \times \omega$的兴趣区域窗口,都将被划分为$h_{2} \times \omega_{2}$的子窗口网络。每个子窗口的大小约为$(h/h_{2}) \times (\omega / \omega_{2})$,向上取整,其中每个子窗口中的最大元素作为该子窗口的输出。因此,RoI pooling可以从形状各异的兴趣区域中抽取出形状相同的特征。
Faster R-CNN
为了精确检测目标结果,Fast R-CNN模型需要在选择性搜索中生成大量的提议区域。Faster R-CNN则提出将选择性搜索替换为区域提议网络(region proposal netword,rpn)。从而减少提议区域的生成数量,并且保证目标检测的精度。
实际上就是将获得提议区域的过程变成了使用神经网络来训练获得提议区域的过程。
与Fast R-CNN相比,Faster R-CNN只是将生成提议区域的方法从选择性搜索改为了区域提议网络,模型其余部分保持不变。(可以说是多了一个粗糙的对锚框进行分类和预测的过程)
区域提议网络操作步骤如下:
- 使用填充为1的$3 \times 3$的卷积层变换卷积神经网络的输出,并将通道数记为c。这样,卷积神经网络为图像抽取的特征图中的每个单元均得到一个长度为c的新特征。
- 以特征图的每个像素为中心,生成多个不同大小和宽高比的锚框并标注它们(也可以使用选择性搜索方法来生成)。
- 使用锚框中心单元长度为c的特征,分别预测该锚框的二元类别(含目标还是背景)和边界框。
- 使用非极大值抑制,从预测类别为目标的预测边界框中移除相似的结果。最终输出的预测边界框是兴趣区域汇聚层所需的提议区域。
区域提议网络rpn是和整个模型一起训练得到的。所以,Faster R-CNN的目标函数不仅包括目标检测中的类别和边界框的预测,还包括区域提议网络锚框的二元类别和边界框预测。因此,其还可以学到如何生成高质量的提议区域。
Mask R-CNN
如果在训练集中还标注了每个目标在图像上的像素级的位置,那么Mask R-CNN能够有效利用这些详尽标注信息进一步提升目标检测的精度。
Mask R-CNN是基于Faster R-CNN修改而来。
其将兴趣区域汇聚层换成了兴趣区域对齐层(主要区别就在RoI pooling是可能会将兴趣区域改变形状的,而RoI Align不会,在无法整除时,它会将一部分区域拆分出来)。使用双线性插值(bilinear interpolation)来保留特征图上的空间信息,从而更适于像素级预测。
兴趣区域对齐层的输出包含了所有与兴趣区域的形状相同的特征图。 它们不仅被用于预测每个兴趣区域的类别和边界框,还通过额外的全卷积网络预测目标的像素级位置。
单发多框检测(SSD)
模型
此模型主要由基础网络组成,其后是几个多尺度特征块。 基本网络用于从输入图像中提取特征,因此它可以使用深度卷积神经网络。
单发多框检测论文中选用了在分类层之前截断的VGG (Liu et al., 2016),现在也常用ResNet替代。
我们可以设计基础网络,使它输出的高和宽较大。 这样一来,基于该特征图生成的锚框数量较多,可以用来检测尺寸较小的目标。
接下来的每个多尺度特征块将上一层提供的特征图的高和宽缩小(如减半),并使特征图中每个单元在输入图像上的感受野变得更广阔。
接近图顶部的多尺度特征图较小,但是其具有较大的感受野,所以适合检测较少但较大的物体。
通过多尺度特征块,单发多框检测生成不同大小的锚框,通过预测边界框的类别和偏移量来检测大小不同的目标。