论文总结——R-CNN(Rich feature hierarchies for accurate object detection and semantic segmentation)

前些天在学习如何使用YOLO,稍微抽空补一下理论知识。这里稍微总结一下。
详情参看原论文:Rich feature hierarchies for accurate object detection and semantic segmentation

简介&思路概述

R-CNN将CNN用于精确目标检测(以及语义分割),并且取得了很大的成果(比它之前的方法精确度提高了30%),为之后的很多应用及研究打下了基础(Fast R-CNN,Faster R-CNN,YOLO等等都是由此发展而来的)。
R-CNN中的两个关键点:(1)首先它将大容量的CNN应用到自底向上的区域定位上;(2)提出了当标记的训练数据很少时,利用辅助数据集进行监督的预训练,并在此基础上对网络参数进行微调,可以得到很大的提升。

简单来说,R-CNN分三个部分:
①. 初步定位“目标”
②. 提取CNN特征
③. 投入SVM分类

技术模式:selective-search + CNN + SVM
RCNN概述
即:先通过selective-search定位目标区域,变形(warp)投入CNN,将CNN看作特征提取机,提取出CNN特征后,投入SVM中进行分类,确定目标的类别标签。

流程细节

1. 定位“目标”(Region proposals)

论文中提到了很多种生成类别独立的区域的方法——
objectness, selective search (即R-CNN所用的方法), category-independent object proposals, constrained parametric min-cuts(CPMC), multi-scale combinatorial grouping, Ciresan.
这里特别提一下Ciresan是一种应用CNN检测有丝分裂细胞的特殊的区域定位方法。

这里只介绍R-CNN使用的selective search。
#################################################################################################################

Selective Search

Selective Search中的区域合并算法。
Selective
1.1 初始化工作
首先利用基于图的图像分割(Graph-Based Image Segmentation)算法,得到初始的区域集合R。同时初始化相似度集合S。

这里简要提一下基于图的图像分割算法的思路:将图像的每个像素点看成图模型中的顶点,最开始每个节点都是孤立的,通过计算每个点/区域与相邻点/区域的“相似度”,判断是否合并。有兴趣可以看这篇博客
示例
1.2 计算相邻区域的相似度,保存在相似度集合中

这里的相似度考虑到了区域特征的多样性,结合了多种度量方法。
相似度
颜色相似度:
颜色相似度
这里的Ci利用是归一化得到的图像各颜色通道的直方图,表示为一个向量。即当两个区域完全相同时,Scolour为3.0,两个区域直方图差距越大,Scolour越小。

纹理相似度:
纹理相似度
Ti纹理特征采用SIFT-like特征。对每个颜色通道的8个不同的方向上计算方差σ=1的高斯微分,随后通过归一化得到一个特征向量。

优先合并小区域:
优先合并小区域
通个这个公式可以很直观的看出——区域越小,值越大。

区域的合适度距离:
区域的合适度距离
合适度指的是两个区域的位置关系,比如:如果一个区域在另一个区域里面,很显然这两个区域应该合并;如果两个区域的相接点很少,那么它们就不应该合并。
公式中的BBij(Bounding Box)指能够框住合并后区域的最小矩形。

1.3 迭代合并相似度最大的两个区域

这里的合并我感觉应该是采用了自适应阈值控制是否合并,不然照这个趋势下去都合成一块了。

合并工作到此结束,随后需要对区域“打分”排序,根据需要选择出评分最高的区域。如:R-CNN中选择了2000块Bounding Box。
#################################################################################################################
好啦,这下候选的Bounding Box都齐了,我们开始下一步。

2. 特征提取

这一块比较简单,就是把CNN看作特征提取机,输入图像,提取出CNN特定层的预激活后得到一个向量,PAC(主成分分析)降维到定长(论文中提取的特征维数是4096,CNN网络模型为AlexNet的Caffe实现)。

这里稍微要注意一点的是,CNN对输入的图像要求大小统一,显然第一步得到的Bounding Box大小不可能相同,这里要对图像做一个变形(Warp),之后再投入CNN中。
论文作者在补充材料中讨论了4种Warp的方法及相关的实验数据。
Warp

3. SVM标注标签

第二步提取出的特征,投入SVM分类器中分类,结果输出为每个建议框是某个类别的评分。

在这之后,还需要对结果作非极大值抑制剔除重叠框。

因为最终结果可能有多个Bounding Box对应同一个物体,如下图。这时候需要根据IoU阈值进行非极大值抑制以提出重叠框,保留得分最高的Bounding Box。
在这里插入图片描述

4. 预测框修正

这一部分比较简单,单纯地拿一个线性回归器对region proposal的预测框进行回归修正,使得修正后的预测框更贴近真值。

预训练(pre-training)

预训练是R-CNN另一个关键点!总所周知,深度学习一个很关键的问题就是数据,在很多应用场景中,限制精度进一步提高的并不是算法,而是缺少大量带标签的数据,而预训练正提供了一个重要的解决方案。
在这篇论文的实验数据分析中,带预训练及微调的CNN相比不带预训练的CNN平均提高了6个Point。

这篇论文中的预训练很好理解,他们将CNN预先训练在一个巨大的辅助数据集(ImageNet的ILSVRC 2012数据集,不带有Bounding Box)。

我的看法是:像ImageNet这种体量的数据集中的很多标签和目标任务中的标签是重合的,即任务的相似性很高,由此一定程度弥补了数据量不足带来的欠拟合。

域特化微调(Domain-specific fine-tuning)

为了调整预训练后的CNN使其适应新的任务和新的域(这里的域应该指的是新的数据集和标签),用了新的数据集(论文中用的是变形的VOC数据集,即任务所用的数据集)通过随机梯度下降SGD继续训练CNN。除了将针对ImageNet的1000类分类输出层替换为VOC上的21类(20个类标签加上“无目标仅作为背景”这个标签)输出层,其余网络结构不变。

一些参数,在这一步中的正负阈值为0.5IoU,即IoU大于0.5的被视为正类,这里注意一下,之后会再提到;还有学习率被设置为0.001,预训练的1/10,这里也体现了“微”调。这里微调的每次迭代中,训练集被设置为了32张正样本和96张背景,考虑到正样本的数量比较少,对正样本做了一些补偿。

IoU作为评估目标检测mAP的重要指标,考虑到非常简单,就用一张图解释一下:
在这里插入图片描述

目标类别分类器

这里提到了一些关于如何判断正负标签的策略。

显然,如果一张图很紧密地包含(tightly encoding,从英文里感受一下)了一辆车,那么对于“车”这个类别来说,它应该被标上正标签。
如果一张图很车完全没有关系,那么它肯定应该被标上负标签。

但是,对于部分包含车的图像呢?这里的阈值就显得尤为重要。作者团队通过grid search(类似交叉验证)了一系列的IoU参数,最终选用了0.3

总结

至此,R-CNN的大部分思想介绍完毕,其实这篇论文中还有很多的细节值得讨论和思考,原论文也多次提到了还有补充材料,很遗憾的是,我并没在网上找到这些补充材料。
但看到了一篇博客,里面对很多补充材料中提到的细节问题做了容易理解的讨论,希望更加深入了解R-CNN的朋友可以继续深入阅读。

还有一点让我不得不提,原论文中提供了大量的实验数据分析,对于如何分析神经网络结构和提高科研素养都很有价值,有兴趣可以去学习一下。

参考资料

Ross Girshick Jeff Donahue Trevor Darrell Jitendra Malik UC Berkeley. Rich feature hierarchies for accurate object detection and semantic segmentation

R-CNN论文详解 https://blog.csdn.net/wopawn/article/details/52133338

第三十三节,目标检测之选择性搜索-Selective Search https://www.cnblogs.com/zyly/p/9259392.html#_label0

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值