2014年,Ross Girshick等人提出R-CNN,首次利用CNN进行目标检测。
RCNN通过Selective Search算法进行region proposals,使用CNN对proposals提取特征,然后将提取的特征输入SVM进行分类,最后利用全连接网络进行边框回归(线性脊回归)。
图片要先经过Selective Search算法产生的proposals,然后在图片上截取proposals区域,对proposals区域Resize之后,将其输入CNN进行分类。
proposals区域会有大量重叠的部分,所以在对proposals提取特征时会对重叠部分反复提取特征。此外,对proposals区域进行Resize会导致图片变形,不利于提取特征。
再有,RCNN不能端到端训练,训练过程非常麻烦,首先要对预训练的CNN模型进行微调,然后去掉CNN的fc7层做特征提取器。经过SS算法提取proposals之后,使用特征提取器fc6 layer的输出训练SVM分类器,在这个过程中保存Pool5的结果,最后用Pool5的结果训练边框回归器。
2015年,Kaiming He等人提出了SPP Net,其主要改进是不需要对proposals区域重复提取特征,只需要将整个图片输入进CNN提取一次特征即可。
此时输入检测网络的并不是按照proposals在原图上截取的图片,而是把整张原图输入检测网络提取feature map。原来通过proposals在原图上截取图片此时变成了通过proposals在feature map上截取region-wise feature map。
要解决的问题是proposals如何映射到feature map上,以及不同大小的region-wise feature map如何通过全连接层进行分类。
SPP Net提出了将proposals映射到feature map的公式,然后通过在全连接层前面添加SPP(Spatial Pyramid Pooling) layer来将region-wise feature map映射到固定的维度。
但是,SPP Net仍然没有解决目标检测算法不能端到端训练的缺点。
同年,Ross Girshick提出fast RCNN,fast RCNN借鉴SPP Net 使用RoI Pooling 将不同尺寸的region-wise feature map映射成固定维度的输出,同时,将使用SVM进行分类该成使用softmax层进行分类,最后,将边框回归集成到CNN中,添加一个与cls layer同级的reg layer 进行边框回归,实现多任务学习。
经过这一系列的改进,fast RCNN的训练过程大幅度简化,并且速度大幅度加快。
遗憾的是,fast RCNN仍然使用Selective Search进行region proposals,Selective Search的存在占用了大量的时间,并且导致fast RCNN仍然不能端到端的训练。
还是在2015年,Kaiming He 和 Ross Girshick 等人提出了faster RCNN,将region proposals算法由Selective Search改为RPN,RPN是一个全连接网络,可以在与fast RCNN共享卷积层的前提下加快region proposals时间,并与fast RCNN一起进行端到端训练。
经过faster RCNN的改进,目标检测的所有阶段已经全都可以使用GPU进行训练。