物体检测和图片分类有什么区别呢?
图片分类不需要定位;物体检测需要定位出物体的位置,并且要把图片中所有物体都识别定位出来。
RCNN(Region-based Convolutional Neural Networks) 是用深度学习进行物体检测的开山之作。
RCNN算法分为4个步骤:
1、一张图片生成2000个左右候选区域;
2、用深度神经网络提取每个区域的特征;
3、将特征送入每一个分类的SVM分类器,判断是不是属于该类;
4、微调候选区域的位置,使得候选框进一步接近物体的bounding box;
比较经典的流程图片如下:
候选区域生成阶段:
使用selective search方法从一张图片生成2000个左右候选区域,基本思想是:
首先将图片分成小的区域;然后根据颜色、纹理、面积等因素两两合并可能性最高的相邻区域,重复此合并过程,直到只有一个区域为止;最后输出所有曾经存在过的区域,即为候选区域。
在此区域合并过程中,按大牛的理论,需要注意两点,一个是保证合并尺度均匀,比如说有区域a-b-c-d,建议合并方式a-b-c-d->ab-cd->abcd,不建议ab-c-d>abc-d->abcd;另一个是合并后的图像尽量规整平滑,而不要奇形怪状、坑坑洼洼的。
特征提取阶段:
第一步,预处理图片区域,以alexnet网络为例,将生成的候选区域归一化为 227 X 227。归一化的过程中会缩放(crop或者wrap)图片,主要由有各向同性和各向异性缩放两种方式,经大牛测试发现,采用各向异性缩放且padding=16时识别精度最高。
第二步:有监督预训练,例如在ILSVRC 2012的大数据集上进行分类训练(此处也可直接使用网上大牛训练好的alexnet网络代替)。
第三步:fine-tuning,例如在PASCAL VOC2007的小数据集上进行fine-tuning经第二步训练后的网络,
类别判断阶段:
对每一类目标,训练一个SVM二分类器,分类训练的输入为网络输出的4096维特征,输出为是否此类。
此处由于正样本数量远远小于负样本数量,建议使用hard negative mining方法。
候选框微调阶段:
对检测出的每一个物体均进行边缘检测并微调得到精确的物体位置。
RCNN在2014年将PASCAL VOC上的检测率从传统检测的35.1%提升到深度学习53.7%。不可谓不NB。
一句话总结RCNN整个流程:
先将候选区域通过selective search检测出来(2000个左右),然后根据cnn提取的每一个候选区域特征送入svm进行分类,得到一个物体类别和边框,最后利用边缘检测微调得到具体的物体位置。