由于手动设计特征的性能已经饱和,在2010到2012年之间,目标检测已经到了瓶颈,几乎没有任何的收益。在2012年,世界见证了卷积神经网络的重生。随着深度卷积网络能够学习到图像的稳定高层特征描述,一个很自然的问题是是否能够将其引入到目标检测中?R. Girshick率先打破了僵局,提出了具有CNN特征的区域(RCNN)目标检测算法。从那以后,目标检测算法开始了以惊人的速度繁荣发展。
在深度学习时代,目标检测算法可以分为两个流派:两阶段(two-stage)检测和单阶段(one-stage)检测,前者是构建了一个从粗到细的检测,而后者则是一步完成。下面将介绍目前主要的两阶段检测算法。
1. RCNN
RCNN背后的想法很简单,其开始便是通过选择性搜索进行Object Proposal(以下简称OP)的提取,然后将每个OP缩放到一个固定的尺寸的图像,并送入到CNN模型(AlexNet)在ImageNet上训练来提取特征;最后用线性的SVM分类器来预测每个区域内目标的存在,并识别目标的种类。RCNN在VOC07上取得了很大的性能上的提升,mAP从33.7%提升到了58.5%。
尽管RCNN取得了很大的进步,它的缺点也是比较明显的:在大量重复的OP上进行冗余特征的计算(超过2000个boxes),导致了极其慢的检测速度(在GPU上一张图像的检测时间为14s)。后来在同一年,SPPNet被提出,解决了这个问题。
2. SPPNet
2014年,Spatial Pyramid Pooling Network(SPPNet)网络被提出。之前的CNN模型需要一个固定大小的输入,例如AlexNet需要224*224大小的图像。SPPNet的主要贡献是引入了空间特征池化层(SPP),其能够让CNN去产生了一个固定程度的特征描述,而不用在乎感兴趣的图像或区域的大小。当用SPPNet做目标检测时,特征图将从整幅图中仅仅计算一次,然后任意区域固定长度的特征描述将会产生用于训练模型,其避免了重复性的计算卷积特征。在没有牺牲任何进度的情况下,SPPNet要比R-CNN快20多倍。
尽管SPPNet能够有效的提高检测速度,但仍有一些缺点:首先,训练是多阶段的,其次,SPPNet通过简单的忽略所有之前的层,仅仅微调了其全连接层。后来下一年,Fast RCNN被提出,解决了这些问题。
3. Fast RCNN
2015年,R. Girshick提出了Fast RCNN检测器,它是对RCNN和SPPNet的进一步提升。Fast RCNN能够在相同的配置下,同时训练检测器和bounding box回归器。在VOC07数据集上,Fast RCNN将RCNN的mAP从58.5%提升到了70.0%,同时检测速度则比RCNN快了200多倍。
尽管Fast-RCNN成功的整合了RCNN和SPPNet的优势,其检测速度仍受限于OP检测。那么,能够有一个产生OP的CNN模型?随后,Faster RCNN解决了这个问题。
4. Faster RCNN
2015年,在Fast RCNN被提出后不久,Faster RCNN检测器被提出。Faster RCNN是第一个端到端,近乎实时深度学习检测器(COCO mAP@.5=42.7%, COCO mAP@[.5,.95]=21.9%, VOC07 mAP=73.2%, VOC12 mAP=70.4%, 17fps with ZF- Net [45])。Faster RCNN的主要贡献是Region Proposal Network(RPN)的提出,它是一个近乎无代价的region proposal(RP)。从RCNN到Faster RCNN,目标检测系统的大部分单独区块,例如OP,特征提取,bounding box回归等,已经慢慢被整合为了一个统一的端到端学习框架。
尽管Faster RCNN打破了Fast RCNN的速度瓶颈,但在随后的检测中仍有计算冗余。后来,提出了许多改进,包括RFCN和低代价的RCNN。