区域卷积神经网络(region-based CNN或regions with CNN features,简称R-CNN)是将深度模型应用于目标检测的开创性工做之一 [1]。本节中,咱们将介绍R-CNN和它的一系列改进方法:快速的R-CNN(Fast R-CNN)[3]、更快的R-CNN(Faster R-CNN)[4] 以及掩码R-CNN(Mask R-CNN)[5]。限于篇幅,这里只介绍这些模型的设计思路。bash
R-CNN网络
R-CNN首先对图像选取若干提议区域(例如锚框也是一种选取方法)并标注它们的类别和边界框(例如偏移量)。而后,用卷积神经网络对每一个提议区域作前向计算抽取特征。以后,咱们用每一个提议区域的特征预测类别和边界框函数
具体来讲,R-CNN主要由如下四步构成:性能
R-CNN虽然经过预训练的卷积神经网络有效抽取了图像特征,但它的主要缺点是速度慢。想象一下,咱们可能从一张图像中选出上千个提议区域,对该图像作目标检测将致使上千次的卷积神经网络的前向计算。这个巨大的计算量令R-CNN难以在实际应用中被普遍采用学习
Fast R-CNNspa
R-CNN的主要性能瓶颈在于须要对每一个提议区域独立抽取特征。因为这些区域一般有大量重叠,独立的特征抽取会致使大量的重复计算。Fast R-CNN对R-CNN的一个主要改进在于只对整个图像作卷积神经网络的前向计算。设计
Fast R-CNN中提出的兴趣区域池化层跟咱们以前介绍过的池化层有所不一样。在池化层中,咱们经过设置池化窗口、填充和步幅来控制输出形状。而兴趣区域池化层对每一个区域的输出形状是能够直接指定的,例如指定每一个区域输出的高和宽分别为 h2,w2 。假设某一兴趣区域窗口的高和宽分别为 h 和 w ,该窗口将被划分为形状为 h2×w2 的子窗口网格,且每一个子窗口的大小大约为 (h/h2)×(w/w2) 。任一子窗口的高和宽要取整,其中的最大元素做为该子窗口的输出。所以,兴趣区域池化层可从形状各异的兴趣区域中均抽取出形状相同的特征。3d
咱们在 4×4 的输入上选取了左上角的 3×3 区域做为兴趣区域。对于该兴趣区域,咱们经过 2×2 的兴趣区域池化层获得一个 2×2 的输出。四个划分后的子窗口分别含有元素0、一、四、5(5最大),二、6(6最大),八、9(9最大),10。rest
咱们使用ROIPooling函数来演示兴趣区域池化层的计算。假设卷积神经网络抽取的特征X的高和宽均为4且只有单通道。code
Faster R-CNN
Fast R-CNN一般须要在选择性搜索中生成较多的提议区域,以得到较精确的目标检测结果。Faster R-CNN提出将选择性搜索替换成区域提议网络(region proposal network),从而减小提议区域的生成数量,并保证目标检测的精度。
与Fast R-CNN相比,只有生成提议区域的方法从选择性搜索变成了区域提议网络,而其余部分均保持不变。具体来讲,区域提议网络的计算步骤以下:
值得一提的是,区域提议网络做为Faster R-CNN的一部分,是和整个模型一块儿训练获得的。也就是说,Faster R-CNN的目标函数既包括目标检测中的类别和边界框预测,又包括区域提议网络中锚框的二元类别和边界框预测。最终,区域提议网络可以学习到如何生成高质量的提议区域,从而在减小提议区域数量的状况下也能保证目标检测的精度。
Mask R-CNN
若是训练数据还标注了每一个目标在图像上的像素级位置,那么Mask R-CNN能有效利用这些详尽的标注信息进一步提高目标检测的精度。
小结
R-CNN对图像选取若干提议区域,而后用卷积神经网络对每一个提议区域作前向计算抽取特征,再用这些特征预测提议区域的类别和边界框。
Fast R-CNN对R-CNN的一个主要改进在于只对整个图像作卷积神经网络的前向计算。它引入了兴趣区域池化层,从而令兴趣区域可以抽取出形状相同的特征。
Faster R-CNN将Fast R-CNN中的选择性搜索替换成区域提议网络,从而减小提议区域的生成数量,并保证目标检测的精度。
Mask R-CNN在Faster R-CNN基础上引入一个全卷积网络,从而借助目标的像素级位置进一步提高目标检测的精度。
复制代码