1. RCNN
RCNN发表于CVPR 2014。是将深度学习应用于目标检测领域的开山之作,凭借卷积神经网络较之传统CV方法的强大特征提取能力,将PASCAL VOC数据集检测率从35.1%提升到53.7%。
RCNN的算法流程如下图所示,其过程主要分为4步:
- 生成候选区域。采用Region Proposal提取候选区域,使用Selective Search算法,先将图像分割成小区域,然后合并包含同一物体可能性高的区域并输出。RCNN在这一步需要提取2000个候选区域,并将每一个区域进行归一化处理,得到固定大小的图像。
- CNN特征提取。将上述固定大小的图像,输入CNN得到固定维度的输出特征图。
- SVM分类器。使用线性二分类器对上述输出特征进行分类,得到分类结果,并采用难样本挖掘来平衡正负样本的不平衡。
- 位置精修。使用一个回归器,对特征进行边界回归以得到更为精确的目标区域。
2. Fast RCNN
Fast RCNN发表于ICCV 2015。RCNN需要多步训练,步骤繁琐且训练速度慢。Fast RCNN实现了端到端的训练,基于VGG16网络,训练速度比RCNN快了近9倍,测试速度快了近213倍,在PASCAL VOC数据集检测率达到了68.4%。
Fast RCNN的算法流程如下图所示,与RCNN相比,主要有3点改进:
- 共享卷积。将整幅图像送入卷积网络中进行区域生成,而不是像RCNN那样一个个的候选区域。仍采用Selective Search方法,但共享卷积使得计算量大大减少。
- RoI Pooling。利用特征池化(RoI Pooling)的方法进行特征尺度变换,这种方法保证了输入图像尺寸可以是任意大小的,使得训练过程更加灵活、准确。
- 多任务损失。将分类与回归网络放到一起训练,且为了避免SVM分类器带来的单独训练与速度慢的缺点,使用了Softmax函数进行分类。
3. Faster RCNN
Faster RCNN发表于NIPS 2015。该算法提出了RPN(Region Proposal Network)网络,利用Anchor机制将区域生成与卷积网络联系到一起,检测速度提升至17FPS(Frames Per Second),在PASCAL VOC2012测试集上达到70.4%的检测效果。
Faster RCNN的算法流程如下图所示,主要包括4部分:
-
特征提取网络。输入图像首先经过Backbone得到特征图。
-
RPN模块。区域生成模块,用来生成较好的建议框(Proposal),用到了强先验的Anchor,RPN包括5个子模块:
-
Anchor生成。特征图上的每一个点都对应了9个Anchor,这9个Anchor大小宽高各不相同,对应到原图基本可以覆盖所有可能出现的物体。而RPN的任务就是从数量庞大的Anchors中筛选,并调整出更好的位置,得到Proposal。
-
RPN网络。与上述Anchor对应,利用1×1的卷积在特征图上得到每一个Anchor的预测得分与预测偏移值。
-
计算RPN loss。这一步只在训练中,将所有的Anchor与标签(Ground Truth)进行匹配,匹配程度较好的Anchor赋予正样本,较差的赋予负样本,得到分类与偏移的真值,与第二步中预测得分与预测偏移值进行loss计算。
-
生成Proposal。利用上述每一个Anchor的预测得分与预测偏移值,进一步得到一组较好的Proposal,送入后续网络中。
-
筛选Proposal得到ROI。训练时生成了2000个Proposal,进一步筛选Proposal得到256个RoI。测试时,则不需要此模块,Proposal可直接作为RoI。
-
-
RoI Pooling模块。输入为Backbone提取的feature map和RPN生成的RoI,输出送入RCNN。由于RCNN使用了全连接网络,要求特征的维度固定,而每一个RoI对应的特征大小各不相同,因此RoI Pooling将RoI的特征池化到固定的维度,以便送入全连接网络。
-
RCNN模块。将RoI Pooling得到的特征送入全连接网络,预测每一个RoI的分类,并预测偏移量以精修边框位置,并计算损失值,完成整个Faster RCNN过程,RCNN模块包括3部分:
-
RCNN全连接网络。将得到的固定维度的RoI特征送入全连接网络中,输出为RCNN部分的预测得分与预测回归偏移量。
-
计算RCNN的真值。对于筛选出的RoI,需要确定是正样本还是负样本,同时计算与对应真实物体的偏移量。在实际实现时,这一步往往与RPN最后筛选RoI放在一起。
-
RCNN loss。通过RCNN的预测值与RoI部分的真值,计算分类与回归的loss。
-