一、二阶段检测器
1.R-CNN
R-CNN分为以下4个模块:
- 区域提议生成:作者使用选择性搜索算法从每张图像上生成2000个类别独立的区域提议。
- 区域特征提取:遵循AlexNet的架构,作者使用一个CNN,该CNN包含5个卷积层和2个全连接层从每个区域提议中提取固定长度的特征向量(4096-dimentional)。作为CNN,输入图像的尺寸必须是固定的(227×227),作者使用了图像扭曲的方法,将每个区域提议都调整为了固定尺寸,而无需关心原始图像的尺寸和比例。
- SVM分类模块:作者使用类别固定的线性支持向量机对每张图像上的目标进行分类。
- 边界框回归:利用准确回归的边界框对目标进行定位。
PS:CNN首先在在一个较大的数据集上进行预训练,然后再指定的数据集上进行微调,是深度卷积网络实现快速收敛的良好方法。如果是在ImageNet数据集上进行预训练,最后一个全连接层应该替换为适应于ImageNet的1000维分类层。接下来用随机梯度下降法(SGD)在扭曲的提议窗口上进行微调。最后一个全连接层是(N+1)路的,N是目标类别数量,1是背景类别。
在微调训练过程中,如果预测的区域提议与相应的真实边界框的IoU≥0.5的,我们认为是正样本,相反的,我们认为是负样本。训练时SGD的学习率为0.001,每一轮SGD迭代中,mini-batch大小为128,其中正负样本的比例是1:3。我们还会用艰难负样本挖掘来优化SVM的每个类别。
存在的问题:
- 每个区域提议是单独通过CNN进行特征提取的,这会造成很严重的冗余计算,因此R-CNN的训练和推理时长较大。
- R-CNN的4个阶段是相互独立的组件,整个检测框架无法以端到端的方式进行优化。
- 选择性搜索依赖的是较低水平的视觉特征,而在场景比较复杂的时候,我们需要较高水平的视觉特征。除此之外,它无法用GPU加速。
2.SPP-net
全连接层需要固定尺寸的输入,所以R-CNN需要对每个区域提议进行裁剪或者扭曲的原因。但是,物体可能部分存在于裁剪区域中,并且扭曲操作可能会产生不必要的集合形变。这些内容的丢失或者失真将降低识别精度,尤其当对象的比例变化的时候。
SPP的池化层将对尺度变化的区域提议进行特征池化,并生成固定长度的输出。这样,SPP就可以在图像尺度和比例变化的情况下进行训练和推理。如此既可以增加模型对尺度的不变性,有可以解决过拟合问题。如果conv5的特征图数量为256,指定3个层次的金字塔,那么每个区域提议的特征向量的维度是256×(1^2+2^2+4^2)=5376。
存在的问题:
- SPP的训练仍然是多阶段的而非端到端的。
- SPP层并不反向传播梯度,因此SPP层之前的参数都是固定的,这会极大的限制骨干网络的学习能力。
3.Fast R-CNN
R-CNN和SPP都有相同的问题:
- 多阶段训练(特征提取,网络微调,SVM训练和边界框回归)
- 需要大量的时间和空间
- 检测时间缓慢
因此,在对R-CNN做了一定改进之后,我们的到了一个单阶段训练算法来对区域提议进行分类并修正目标的空间位置。Fast R-CNN比R-CNN快9倍,比SPP快3倍。
R-CNN利用CNN对每个区域提议进行进一步的检测处理。然而,Fast R-CNN利用一整张图片和一系列区域提议作为输入。从生成的CNN特征图上, 我们使用选择性搜索方法识别感兴趣区域(RoI)。之后作者使用ROI池化层将RoI转换成固定长度的特征向量,作为后边两个全连接层的输入,最后把全连接层的结果输入到两个并列的分支,输出最后分类和边界框回归结果。
4.Faster R-CNN
R-CNN、SPP和Fast R-CNN依赖区域提议算法进行目标检测。这三种模型都经历过区域提议的计算非常耗时,这会影响网络的整体性能。后来有人提出使用区域提议网络(RPN)来取代之前的区域提议算法。啊RPN是一种全卷积网络(FCN),它将任意大小的图像作为输入并输出一组矩形候选对象。每个提议都与一个目标评分相关联以检测提议是否包含对象。
与Fast R-CNN类似,模型以整张图像作为输入,以生成CNN特征图。然后使用RPN来预测区域提议,而不是在特征图上使用选择性搜索算法生成区域提议。在RPN中,每个滑动窗口检测到的区域提议称为锚。通过在对象分数上应用阈值来选择锚框。选择出的锚和初始CNN模型计算的特征图一起送入RoI池化层,输出被送到全连接层进行最终的分类和边界框回归。
5.FPN
自底向上路径是Fast R-CNN使用的主干CNN。自上而下的路径是多级特征金字塔 。自顶向下特征金字塔的每一层都以上层的特征图和自底向上路径对应的特征图作为输入。然后连接这些特征映射作为输出。FPN还使用RPN生成区域提案。在区域提议上使用FPN进行特征提取,从不同层次预测RoI,以融合多尺度特性,得到的RoI将像Fast R-CNN一样,使用RoI池化层进行池化。输出送到全连接层进行分类和回归。
6.Mask R-CNN
该模型作者扩展了以往R-CNN对象检测技术,进一步定位每个对象实例的精确像素(实例分割)。Mask R-CNN具有和Faster R-CNN一样的RPN网络,以生成区域提议。作者在区域提议上应用RoIAlign层而不是RoI池化层,以将提取的特征和对象的输入位置对齐。然后将对齐的RoI送入模型的最后一部分,生成类别标签,边界框以及二进制对象掩码。
二、一阶段检测器
1.YOLO
YOLO是一个单阶段网络模型,它通过一个简单的CNN直接从输入图像上预测类别概率和边界框。模型把输入图像划分成了固定数量的网格。该网格的每个单元格负责预测固定数量的带有置信度的边界框。置信度得分是通过将检测到目标的概率和预测边界框与真是边界框的IoU相乘得到。类别概率高于某个阈值的边界框被保留并用来定位目标。
每个预测边界框的置信度中,概率值表示检测到目标的概率,IoU反应预测边界框和真实边界框的吻合程度,即定位精度,再乘以类别的存在性条件概率,即已知该位置存在目标,该目标属于某一类别的概率,就得到了最终的分类信息。
2.SSD
该模型将整个图像作为输入并将其传递给一系列具有不同尺寸滤波器的卷积层(10×10,5×5,3×3)。使用网络中不同位置的卷积层中的特征图预测边界框。
它们由特定的具有3×3滤波器的卷积层进行处理,生成一系列的边界框,称为额外特征层。类似于Fast R-CNN,SSD的锚框具有以下参数:中心坐标、高度和宽度。在预测边界框时,该模型生成与每个类别置信度对应的概率向量。为了处理比例问题,SSD在多个卷积层后预测边界框。由于每个卷积层是在不同比例上进行操作的,因此可以检测不同尺度的对象。如下图所示:
3.RetinaNet
RetinaNet是一种简单的但阶段目标检测器,用于对输入图像中目标位置进行密集采样。该模型由一个主干网络和两个具有特定任务的子网组成。
作者使用FPN作为骨干网络。在主干网络上,第一个子网络执行卷积对象分类,第二个子网络执行卷积边界框回归。这些子网络基本都是小型全卷积网络(FCN),连接到每个级别的FPN,用于参数共享。
4.RefineDet
这是一种基于前馈卷积网络的单阶段目标检测器。该网络由两个相互连接的模块组成:
- 锚框细化模块(ARM)
- 目标检测模块(ODM)
ARM模块通过过滤掉锚框中的负样本减少分类器的搜索空间,并粗略调整锚的大小和位置。ODM模块将前一模块中优化过的锚作为输入,提高了回归精度并预测了多个类别标签,传输连接块(TCB)传输ARM模块中的特征,以预测ODM模块中对象的位置、大小和类别标签。