如转载请注明来自abrams的博客:http://blog.csdn.NET/abrams90
目前有两种常见的图片目标检测方式,一种是基于滑动窗的,一种是基于目标区域提取与分类的。在深度学习时代之前,Deformable Part Model(DPM)与Selective Search是效果最好的方法,他们的效果差距不大。R-CNN的提出的区域提取与分类的的思路结合卷积神经网络强大的能力,使得R-CNN成为了最流行也是效果最好的方法。
R-CNN的方法有很多的改进。最初R-CNN的最大问题是时效性太差,SS提取的大量区域通用CNN分别提取特征并进行分类,使得计算量特别的大。这时提出的SPPNET通过与spatial pyramid pooling层共用featureMap,巧妙的解决了不同大小的特征区域放到同一个分类网络中进行分类的问题,这样也同时解决了每个区域都要提取一次特征的问题,提升了分类的效率。Fast Rcnn对SPPNET进行了扩展,使用了RoiPooling层做特征提取,并且可以初步端到端的finetune所有层来优化目标分类与区域回归的损失函数。其中ROIPooling可以说是spatial pyramid pooling思想的简化版,而区域回归的思想来自MultiBox算法中。
第二种改进思路是用深度神经网络来改进区域提取的效果。MultiBox算法提出了直接用一个网络分支进行区域提取,替代之前使用传统特征的SS算法。这种思路很值得借鉴,但是分别训练两个相关的网络却不是一件容易的事。Faster R-CNN用RPN替代了SS用于区域提取,并且通过共享卷积层整合了两个网络,并且提出一种轮流优化两个任务的训练模式。这样rpn使用的中层的特征,最终的分类的计算量也低了下来。SSD的思路跟rpn的思路类似,也使用了一系列固定的默认框做区域提取,类似Faster R-CNN中锚点的思路。SSD没有使用RoiPooling进行区域分类特征提取,而是在区域提取的同时对每个区区域进行了分类,得到一个区域每个类别的得分。因此,SSD避免了RPN与Fast R-CNN结合的问题,更容易进行训练,速度更快,并且更容易与其它任务结合。
目标检测的另外一种思路是不进行区域提取直接预测区域与分类的得分,这与SSD的思路很一致。OverFeat提出了一种直接在已知目标类型后对区域进行预测的方法。YOLO使用整个顶层的特征图来预测区域与类别,这里区域的预测是所有类别共享的。与YOLO相比,SSD使用了不同比例与大小的默认框,在不同层的特征上。如果自在顶层使用一个默认框的话SSD的结构就跟OverFeat的结构类似了。如果使用整个顶层特征,使用fc而不是卷积层作为分类结构,并且不考虑不同长宽比的话,就跟YOLO的结构相似了。
SSD可以说是集各家所长的一种目标检测算法,结合了目标检测领域YOLO的暴力回归思路与RCNN的RPN,达到了速度与准确率的齐头并进。在论文中,作者做了展示,使用500*500的样本甚至超过了标准FASTER-RCNN最短边600的准确率,却达到了23fps的速度。这对工程界来说,不得不说是一个很大的突破,甚至在cpu模式下也可以勉强使用深度学习做目标检测了。这里引用文中的表格展示下它的性能,可以看出来SSD300达到了性能与准确率极佳的一种平衡:
方法 | mAP | FPS |
Faster R-CNN VGG16 | 73.2 | 7 |
Faster R-CNN ZF | 62.1 | 17 |
YOLO | 63.4 | 45 |
FAST YOLO | 52.7 | 155 |
SSD300 | 72.1 | 58 |
SSD500 | 75.1 | 23 |
作者在论文中总结SSD的创新点有如下几个:
1、 提出了SSD算发,比YOLO的速度更快,比FasterR-CNN准确率更高。
2、 在特征图上使用全卷积来预测目标的得分与目标区域的偏移量。
3、 为了提高检测分类的准确率,使用不同尺度的的特征图来预测不同长宽比与尺度的目标。
4、 这样的设计是的训练可以端到端的进行,并且即使使用低分辨率的样本作为输入准确率也较高。达到了准确与与速度的平衡。
尽管每个创新点看起来都不想RPN这样石破天惊,但是几点结合起来的效果却不容小觑。
作者在文中对不同的改进点的作用有个对比测试:
| SSD300 | |||||
More data augmentation |
| √ | √ | √ | √ | √ |
Use conv4_3 | √ |
| √ | √ | √ | √ |
Include{1/2,2}box | √ | √ |
| √ | √ | √ |
Include{1/3,3}box | √ | √ |
|
| √ | √ |
Use atrous | √ | √ | √ | √ |
| √ |
VOC2007 map | 65.4 | 68.1 | 69.2 | 71.2 | 71.4 | 72.1 |
可以很容易的看出来,作者使用的数据扩展方法对map的提升是最大的,达到了7个点,从训练代码中也可以看出来,作者的数据层还是比较复杂的。其次使用中层的特征影响第二大,如果特征越高层,一些小目标在特征图上可能都表现不出来了,所以中层的特征对小目标的影响比较明显。不同尺度的目标框也有差不多两个点的影响值。这里对Atrous算法还不知道是啥,就先不说了。
最后,文中也介绍了,SSD有两个小缺点。一个是对目标大小比较敏感,特别是对小目标的检测比对大目标的检测要差不少。另外,对相似类别的分类能力较弱。我想结合SSD的网络结构特点,这两个缺点也很好理解。对于将深度学习应用与目标检测产品中的需求来说SSD的出现无疑是个福音。