Rich feature hierarchies for accurate object detection and semantic segmentation

来源:互联网 发布:某某软件 编辑:程序博客网 时间:2024/05/16 09:39

RCNN

  RCNN是深度学习在物体检测领域使用深度神经网络的开山之作,作者Ross Girshick大神,下面分如下几个部分来介绍这个论文的内容,其实是本人在读该文献以及查阅其他资料后的一些收获。
  下面分如下几个方面来介绍RCNN:
  1、整体框架
  2、selective search算法(物体proposal)
  3、预处理方式
  4、模型训练
  5、在线物体检测
  
整体框架
这里写图片描述
  整体框架如上图所示,首先使用物体proposal算法从输入图像中提取约2000个proposals,然后将每个proposal缩放至指定的尺寸以适应CNN特征提取网络的输入,之后使用CNN网络提取特征,最后使用SVM+NMS(非极大值抑制)进行类别识别以及全连接网络对物体的检测框回归。
selective search算法
  selective search算法是物体proposal的算法之一,它的作用是从图像中提取出一系列的矩形框,这些矩形框里面一般会包含物体,该算法的原理如下:
  1、使用一种过分割的方法(如Efficient Graph-Based Image Segmentation)对原始图像进行分割,得到一系列的原始分割区域R={r1, r2, …, rn}
  2、初始化相似度集合S=∅
  3、计算两两相邻区域之间的相似度,将其添加到相似度集合S中
  4、从相似度集合S中找出相似度最大的两个区域 ri 和rj,将其合并成为新区域 rt,从相似度集合S中除去原先与ri和rj相邻区域之间计算的相似度,计算rt与其相邻区域(原先与ri或rj相邻的区域)的相似度,将其结果添加的到相似度集合S中。同时将新区域 rt 添加到区域集合R中
  5、不断循环上述步骤直至S中只剩下一个区域,此时获取R中所有区域的外接矩形形成集合L
  6、使用SVM对集合L的外接矩形进行是否包含物体的评分,即可得到预测的包含物体的外接矩形
  selective search算法中相似度计算是一个非常重要的步骤,文献中作者同时考虑了颜色、纹理、大小和吻合等因素进行相似度的计算,此处不详细说明如何计算,有兴趣的读者请阅读文献《Selective Search for Object Recognition》
预处理方式
  由于由selective search算法提取获得的矩形框的大小不是固定的,而RCNN使用的特征提取网络需要固定大小的图像输入,因此需要将图片缩放至固定大小的图像,由于文献使用了Alex Net的网络结构进行特征提取,因此缩放后的图像大小为227*227,文献尝试了如下方式对图片进行缩放,
  1、各向异性缩放;即直接将从selective search获取的图像缩放至227*227,忽略长宽比、扭曲等因素;
  2、各向同性缩放,且在原图像上进行扩充;即把外接矩形的边界进行扩展延伸成正方形,然后再进行裁剪;如果已经延伸到了原始图片的外边界,那么就用外接矩形中的颜色均值填充;
  3、各向同性缩放,且在剪裁后的图像进行扩充;即首先根据外接矩形的大小裁剪图像,然后使用固定的背景颜色(此处依然使用外接矩形中的颜色均值)填充,直至图像大小变为227*227;
  在上述几种方式中,文献还使用了padding=16的方式进行预处理,本人的理解是将selective search的外接矩形的4条边分别往外扩充16个像素,然后再进行上述的操作。(可以理解padding=0即为上述的3种操作)
  在作者的实验结果中表明,使用padding=16,各向同性缩放,且在原图像上进行扩充的预处理方式得到的结果是最好的,因此大家可以参考使用。
模型训练
  网络结构
  网络架构有两个可选方案:第一选择经典的Alexnet;第二选择VGG16。经过测试Alexnet精度为58.5%,VGG16精度为66%。VGG这个模型的特点是选择比较小的卷积核、选择较小的跨步,这个网络的精度高,不过计算量是Alexnet的7倍。为了简单起见,作者最后使用了Alexnet,Alexnet有5层卷基层,2层全连接层,其中卷基层最后的输出的特征向量维数维9216,后面两层的全连接层的特征向量维数为4096。
  网络预训练
  由于voc数据集的数据量少,直接用该数据训练Alexnet不足够,因此作者首先采用2012年的ImageNet的数据集对Alexnet进行预训练,网络结构如下图所示,在f7后面再接入的4096*1000的全连接层以作分类,训练的细节可以参考Alexnet的原文。
  这里写图片描述
  fine-tuning网络
  在讲如何fine-tuning网络之前,首先讲述一下fine-tuning网络的好处。首先不fine-tuning网络其实也是可以进行物体检测的,只是精度会下降,没有fine-tuning网络后的效果好。作者在文中提到,如果你不进行fine-tuning,把提取的特征用于分类,结果发现p5的精度竟然跟f6、f7差不多,而且f6提取到的特征还比f7的精度略高;这其实说明,如果不针对特定任务进行fine-tuning,卷积层所学到的特征其实就是基础的共享特征提取层,而f6、f7所学习到的特征是用于针对特定任务的特征。
  fine-tuning网络其实十分简单,依旧是一个有监督学习的过程,
  1、首先将Alexnet的1000类变为21类(20个物体类+1个背景类)
  2、使用selective search方法从每张training图片中提取2000个proposal矩形框
  3、将每个矩形框与物体的真实矩形框计算IOU,如果IOU>0.5则认为是该类别,否则为背景类;
  4、训练网络,最后一层4096*21的全连接网络参数随机,其它层的参数使用预训练的结果,然后使用SGD开始训练,其中SGD学习率选择0.001,在每次训练的时候,我们batch size大小选择128,其中32个是正样本、96个是负样本(这样做的原因在于大部分样本都是负样本,如果直接以随机样本进行训练很可能会导致网络训练效果不佳)
  SVM训练
  在fine-tuning网络后,可以使用网络提取每个proposal矩形框的f7特征,然后为每一类训练一个二分类的svm,此处的关键仍然在于正负样本的定义。
  作者测试了IOU阈值各种方案数值0,0.1,0.2,0.3,0.4,0.5。最后通过训练发现,如果选择IOU阈值为0.3效果最好(选择为0精度下降了4个百分点,选择0.5精度下降了5个百分点),即当重叠度小于0.3的时候,我们就把它标注为负样本。
  此处值得注意的是,由于正负样本的比例严重失衡,因此本人估计作者对负样本是进行了采样的,保证正负样本的规模在同一个数量级上才能训练较好的SVM参数。同时,作者也提及使用了hard negative mining,即对那些容易分类错误的负样本反复训练,直到分类器的效果不再提升。
  其他
  文章还提及bouding box regression网络的训练,即使用该regression网络对矩形框进行微调,但由于不是太详细,本文也不再讲述。
在线物体检测
  在测试时,首先使用selective search在图片中提取2000个proposals,然后使用与训练一样的预处理方式将每个proposal矩形框的大小变为227*227,然后使用Alexnet提取每个proposal矩形框的特征,取f7的特征,维数为4096,然后使用SVM进行类别分类。
  上述过程后每个类别会得到一系列的矩形框,需要进行合并操作,该合并操作一般使用非极大值抑制(NMS)的方法,NMS的方法如下:
  (1)从一系列的矩形框中获取score最高的矩形框r;
  (2)将与矩形框r的IOU大于阈值的所有矩形框删除,并将该矩形框标记为一个物体的检测框;
  (3)重复步骤(1)(2),直至所有矩形框均被验证完毕;

阅读全文
0 0
原创粉丝点击