01 传统图像识别方法
传统的图像识别算法解决目标检测问题时,主要分为4个步骤:
(1)在图片上选出所有物体可能出现的区域框,可以是滑动窗口等穷举法。 (2)对(1)步找到的区域卡进行特征提取。 (3)对(2)步提取出来的特征进行分类 (4)通过非极大值一直(Non-maximum suppression)提取结果
其中: 可以对穷举法进行一些改进,使用selective search进行启发式的搜索来发现可能出现图像的区域; 由于CNN对于特征提取的有效性,可以通过CNN来实现步骤(2); 特征提取后,再使用支持向量机SVM进行分类; 最后还是靠非极大值抑制方法来输出结果。
CNN要求所有输入图像的分辨率大小相同,所以需要对于每个区域的图片进行缩放,让他们以同样大小输入CNN中以进行特征提取。
02 RCNN算法
将上述思路进行整理,以CNN的视角重新排列,具体内容如下: (1)在数据集上训练CNN (2)在目标检测的数据集上,对训练好的CNN进行微调 (3)用Selective Search搜索候选区域,统一使用微调后的CNN对这些区域提取特征,并将结果存储起来 (4)用存储下来的特征来训练支持向量机
尽管步骤是照搬的传统算法,但是因为CNN强大的能力,这种改进后的算法比传统算法的精确度有显著的提升。这种算法称为区域CNN算法,简称R-CNN
03 第一次改进:空间金字塔池化卷积网络
针对上面的RCNN算法,要做到图像缩放同一大小很繁琐,因此可以在网络上进行改进。
可以使用空间金字塔池化层(Spatial Pyramid Pooling,SPP)来解决这个问题,这种基于空间金字塔池化层的网络被称为SPPNet。(何凯明 《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》)
SPPNet中实现分辨率无关的层称为ROI池化层,它的输入是任意大小的卷积,输出是固定维数的向量。 使用了ROI池化层后,可以先对图像进行一遍卷积运算,得到整个图像的卷积特征。 然后,对于原始图像中的各种候选框,只需要在卷积特征中找到对应的位置框,再使用ROI池化层对位置框中的卷积提取特征,就可以完成特征提取工作。
经过改进后,对于区域框中的图像不再需要缩放
04 第二次改进:不使用支持向量机
在分类过程中,使用深度网络替换传统机器学习支持向量机,这种网络被称为Fast RCNN网络(快速区域卷积网络)。(Ross Girshock 《Fast Region-based Convolutional Network》)
在实际应用中,有两点需要注意:
- 一是分类的类别数,不是N,而是N+1类,多出来的那一类是全背景无物体
- 二是除了分类以外,还需要提供一个做校准的数据,即“框回归”
Fast RCNN使用的VGGNet-16来进行分类。 比起SPPNet,Fast RCNN训练VGG-16的速度提升了3配,测试速度提升了10倍,准确率也有所提升
05 第三次提案网络
经过两次改进,没有缩放需求,分类也变为全连接网络来做,现在唯一传统技术残留就是Selective Search技术。使用神经网络替代它,这样的神经网络就是区域提案网络。
最终,可以使用区域提案网络+卷积神经网络+空间金字塔池化卷积网络这3种网络组成的全神经网络,成功地解决了在一张大图片上识别物体的问题。这种网络结构称为Faster RCNN(更快区域卷积网络)
使用残差网络替代VGGNet(《Faster R-CNN Towards Real-Time Object Detection with Region Proposal Networks》)
|