R-CNN算法

  R-CNN算法可以说是利用深度学习进行目标检测的开山之作。2012年AlexNet网络在ImageNet LSVRC中效果显著,因此R-CNN的作者想要尝试将AlexNet在图像分类上的能力迁移到PASCAL VOC的目标检测上。这就要解决两个问题:

  • 如何利用卷积网络去进行目标定位;
  • 如何在小规模的数据集上训练出较好的网络模型。

  对于利用卷积网络去进行目标定位的问题,R-CNN利用候选区域(Region Proposal)的方法,这也是该网络被称为R-CNN的原因:Regions with CNN features。对于小规模数据集的问题,R-CNN使用了微调的方法,利用AlexNet网络在ImageNet上预训练好的模型。

  R-CNN算法步骤

  1. 输入一张图像生成1K~2K个候选区域(使用Selective Search方法);
  2. 对于每个候选区域,使用深度网络提取特征(CNN);
  3. 提取的特征送入每一类的SVM分类器,判别是否属于该类(SVM);
  4. 使用回归器精细修正候选框的位置(Regression)。

R-CNN算法
step1:候选区域的生成
  利用selective Search算法,通过图像分割的方法,得到一些原始区域,然后使用合并策略将这些区域合并,得到一个层次化的区域结构,而这些结构就包含着可能需要的物体。

R-CNN算法
step2:对每个候选区域,使用深度卷积神经网络提取特征
  将2000候选区域缩放为227×227的大小,接着将候选区域输入到预训练好的AlexNet CNN网络获取4096维的特征得到2000×4096维矩阵。

R-CNN算法
step3:提取的特征送入每一类的SVM分类器,判定类别
  将2000×4096维特征与20个SVM组成的权值矩阵4096×20相乘,得到2000×20维矩阵表示每个候选框是某个目标类别的得分。分别对上述2000×20维矩阵中每一列即每一类进行非极大值抑制剔除重叠候选框,得到该列即该类中得分最高的一些候选框框。
  非极大值抑制步骤:寻找得分最高的目标;计算其他目标与该目标的IoU(交并比)值;删除所有IoU值大于给定阈值的目标。

R-CNN算法
R-CNN算法
step4:使用回归器精细修正候选框位置
  对NMS处理后剩余的候选框进一步筛选。接着分别用20个回归器对上述20个类别中剩余的候选框进行回归操作,最终得到每个类别的修正后的得分最高的bounding box。
  如图,黄色框口                            P                         P              P表示建议框Region Proposal,绿色窗口                            G                         G              G表示实际框Ground Truth,红色窗口                                     G                         ^                                 \hat{G}              G^表示Region Proposal进行回归后的预测窗口,可以用最小二乘法解决的线性回归问题。

R-CNN算法
  R-CNN存在的问题

  1. 测试速度慢:测试一张图片约53s (CPU)。用Selective Search算法提取候选框用时约2秒,一张图像内候选框之间存在大量重叠,提取特征操作冗余。
  2. 训练速度慢:过程极其繁琐。
  3. 训练所需空间大:对于SVM和bbox回归训练,需要从每个图像中的每个目标候选框提取特征,并写入磁盘。对于非常深的网络,如VGG16,从VOCO7训练集上的5k图像上捉取的特征需要数百GB的存储空间。
  4. SVM分类器和边框回归器的训练过程,和CNN提取特征的过程是分开的,并不能进行特征的学些更新。
上一篇:【汉字识别】SVM汉字识别【Matlab 766期】


下一篇:WPF中System.Diagnostics.Process.Start的妙用