图像分类,检测及分割是计算机视觉领域的三大任务。
这张图清楚说明了image classification, object detection, semantic segmentation, instance segmentation之间的关系. 摘自COCO dataset (https://arxiv.org/pdf/1405.0312.pdf)
基于深度学习的目标检测模型主要可以分为两大类:
一步到位,直接产生物体的类别概率和位置坐标值,代表算法如YOLO和SSD。
这些算法将检测问题划分为两个阶段:第一阶段产生候选区域,第二阶段对候选区域进行分类和微调。代表算法是R-CNN系列算法,如R-CNN,Fast R-CNN,Faster R-CNN等
目标检测模型的主要性能指标是检测准确度和速度,对于准确度,目标检测要考虑物体的定位准确性,而不单单是分类准确度。一般情况下,Two-Stage算法在准确度上有优势,而One-Stage算法在速度上有优势。
Google在2017年开源了TensorFlow Object Detection API,并对主流的Faster R-CNN,R-FCN及SSD三个算法在MS COCO数据集上的性能做了细致对比(见Huang et al. 2017),如下图所示。
区域卷积神经网络(Regions with CNN features,简称 R-CNN), 论文:Rich feature hierarchies for accurate object detection and semantic segmentation。是利用卷积神经网络来做「目标检测」的开山之作,其意义深远不言而喻。R-CNN的主要模型结构如下
实现R-CNN的主要步骤分为四步;
相比于传统方法,R-CNN的优点有:
论文Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition, He et al. 2014。 R-CNN 提出后的一年,以何恺明、任少卿为首的团队提出了 SPP-net,SPP-net中所提出的空间金字塔池化层(Spatial Pyramid Pooling Layer, SPP)可以和R-CNN结合在一起并提升其性能。 采用深度学习模型解决图像分类问题时,往往需要图像的大小固定(比如224×224224×224),这并不是CNN层的硬性要求,主要原因在于CNN层提取的特征图最后要送入全连接层(如softmax层),对于变大小图片,CNN层得到的特征图大小也是变化的,但是全连接层需要固定大小的输入,所以必须要将图片通过resize, crop或wrap等方式固定大小(训练和测试时都需要)。但是实际上真实的图片的大小是各种各样的,一旦固定大小可能会造成图像损失,从而影响识别精度。为了解决这个问题,SSP-net在CNN层与全连接层之间插入了空间金字塔池化层来解决这个矛盾。