我读R-CNN

来源:互联网 发布:vue.js 显示隐藏 编辑:程序博客网 时间:2024/06/18 10:29

热烈祝贺中国女排第三次夺得奥运金牌,女排精神传承不老!

0. 背景

论文地址:Rich feature hierarchies for accurate object detection and semantic segmentation
代码地址:GitHub

R-CNN 是 Object Detection的一种方法,2012 年由 rbg 大神提出,该方法在当年的 PASCAL VOC 2012 当中排名第一,将识别准确率从 40.9% 大幅度提升到 53.3%,文章中使用的 RegionProposal + CNN 框架在其后几年也被广泛使用。rbg 后来又相继推出了 Fast R-CNN 和 Faster R-CNN,解决了速度问题。今天我们就来看一下这一篇 R-CNN 到底讲了什么。

1. 贡献

在物体检测方向首创 RegionProposal + CNN 框架,大幅度提升检测效果。

2. 现状

  • 当前主流还是使用Sliding Window + SIFT/HOG + SVM/Boosting等,
  • VOC 等竞赛最优准确率增长逐渐变缓,
  • 人脑皮层对看到的物体认知与 SIFT/HOG 描述略有不同,前者是逐级,后者是简单low level直方图

3. 解决办法

流程图
图片来源1

  1. 摒弃之前 DPM 使用 dense 的滑动窗口方式获取 proposal,改为使用 sparse 的 Selective Search 方式获取 proposal,每幅图片提取约2000个,
  2. 缩放,
  3. 上步得到训练的输入样本,放入 CNN(Alexnet)中训练数据,
  4. 训练后,使用全连接层作为每个 proposal 的 feature 再次训练一个 SVM 分类器进行分类,
  5. 后期还有 bounding-box 的位置调整训练。

细节如下:

缩放方式

proposal 在原图位置 padding 16 pixel 后,缩放为 227 x 227 的正方形图片。图片过小则使用 proposal 颜色均值继续padding。

训练方式

由于训练样本过少,直接随机初始化网络参数不足以得到好结果。所以作者首先使用 ILSVRC2012 的数据做 pre-train初始化网络。因为这个数据集是分类不是物体检测,所以输入数据没有 proposal 直接使用。
然后使用 VOC 的数据训练网络。这里替换上面网络最后输出层的 Softmax 层(N+1 个输出),重新训练最后一层的 weight matrix,初始参数随机,其它层的参数保持与上面 pre-train 结果一直。训练时的输入每个 batch 当中有 32 个正样本,96 个负样本。这 32 个样本属于 N 个分类,96 个样本属于 background 分类。正负样本是通过 IoU 计算得来,每个 proposal 的 IoU 值大于 0.5 认为是正样本,否则是负样本。

IoU=ABAB

这里写图片描述
图片来源2

SVM训练

上面的 CNN 训练好后,去掉最后一层 Softmax,使用最后一个全连接层提取 feature 作为 SVM 的输入训练SVM,最终得到分类器。

Bounding-box regression

proposal 的位置与 groundtrue 有区别,作者有使用了线性回归调整了一下位置。

非最大值抑制

因为前面 proposal 大约有 2000 个,扣除被认为是背景的仍然有很多重叠的 proposal,那么就需要去掉一些,作者对每个分类,按照 SVM 的响应值对proposal 进行非最大值抑制操作。主要步骤:
1. 遍历所有类别1 … k
2. 每个类别中的 proposal 按照响应值从大到小排列,
3. 从前向后遍历proposal
4. 每个 proposal 与排在他后面的 proposal 对比 IoU,如果大于一个阈值那就丢弃后面的 proposal。

最终得到的就是保留下的结果。

4. 结论

这篇文章作为 R-CNN 系列的开篇,提出了一种新颖的物体检测方法,当然作者后期又针对此有比较多的改进算法,所以此文未在细节上过多描述,下篇介绍Fast R-CNN,感谢各位观看。


  1. 基于R-CNN的物体检测 ↩
  2. 基于R-CNN的物体检测 ↩
1 0
原创粉丝点击