【CV论文阅读】:Rich feature hierarchies for accurate object detection and semantic segmentation

R-CNN总结

 

不总结就没有积累

 

R-CNN的全称是 Regions with CNN features。它的主要基础是经典的AlexNet,使用AlexNet来提取每个region特征,而不再是传统的SIFT、SURF的特征。同时,还利用了AlexNet本来的功能:分类,这时所得的分类结果相当于预分类。最后,由于每个Region是有边界的,使用SVM对其进行分类得到一个score,定位每个物体的bounding box。

 

预处理:

先看一看AlexNet的网络结构

 

可以看到,它的输入图像是一个224*224*3的3通道的图像,包含有五层的卷积层,两层的全连接层,最后输出是softmax层。

R-CNN开始对图片进行提取region,称为Region proposal,并且使用的是selective search。对每张region图片warp,可以认为是调整图片的大小,但论文上提到的图片的大小是227*227,与AlexNet有一点区别。在图片warp之前,会先扩张bounding box的大小为p=16个像素。我猜这是为了消除图像的边缘效应。

 

训练:

这里会先做pre-training。Pre-training的好处是可以加快训练的速度,参数可以直接从其他AlexNet迁移过来,也可以重新训练,AlexNet的类别数是1000的。从图中的结构看出,最后输出的特征向量有4096维。

AlexNet的参数训练完之后,就更改它的类别数(论文使用21维,包括20维的类别,和一维的背景)。这时使用有监督训练微调参数(fine tuning),这个fine tuning我认为是由于初始的学习率较小吧,是0.001。有监督训练会涉及到类别的问题(因为这里网络最后的结果还是分类),于是,当region proposal和人工标注的ground truth 的IOU(即交集/并集)大于等于0.5时,把相应的region标记为正的,即有类别的,否则标记为负样例即background。训练的方法使用随机梯度下降的方式,与AlexNet类似,可以参考文献《ImageNet Classification with Deep Convolutional Neural Networks》。

训练的一个batch的大小为128,其中包括38个正样例,和90个负样例。(batch代表批,训练一批又叫1 iteration,所有的批训练了一次成为epoch)。

得到region即bounding box的类别之后,使用SVM训练一个二分类的分类器。算法为每一个类别都训练一个SVM分类器,注意,SVM训练的数据是经过R-CNN提取特征的4096维特征向量。此处SVM标记为负样例的阈值为IOU小于0.3,而正样例直接取ground truth box的region。训练的过程如下图:

 

 

测试:

测试的过程相对简单,对每一张图片进行region proposal之后,一般是2000个region proposal,使用R-CNN提取每个region proposal的4096维特征向量。使用SVM分类器进行分类,对得到的每个bounding box(region proposal本身是有边界的)都有一个score,在排序前先把那些IOU低于某个阈值的bounding box去掉。然后再使用非极大值抑制的方法选出最好的bounding box,从而实现定位。

 

论文中还做了一个对比实验,就是如果只提取特征用于分类,对于最后一个pooling层和两个全连接层fc6、fc7,当没有fine-tuning时,发现三者的分类精度其实差不多,但是如果有fine-tuning时,加入全连接层所提取的特征所得的精度会高很多。

 

减少定位错误:

这里定位错误使用了一种方法叫做bounding box regression,而且使用的特征就是pooling层提取的特征向量(这里是为什么呢?)。

关于bounding box regression的内容来自

http://blog.csdn.net/u011534057/article/details/51235964,这篇文章里说的很好。

 

 

posted @ 2016-07-22 14:48  chenjunjie1994  阅读(2686)  评论(0编辑  收藏  举报