RCNN简述

R-CNN

论文链接: https://arxiv.org/abs/1311.2524
源码链接: https://github.com/rbgirshick/rcnn
R-CNN(Regions with CNN Features),可用于目标检测和图像分割,其结构主要分为三部分:
- 候选区域推荐结构(Region Proposal)
- CNN
- SVM分类器


本文将从上述的三个方面来介绍R-CNN的结构, 然后基于此介绍一些常见概念.

Region Proposal

在R-CNN出现之前, 众多学者已经发表了一系列关于候选区域推荐算法的论文, 包括objectness、 selective search、category-independent object proposal、CPMC、multi-scale combinatorial grouping等. 在R-CNN中采用的是selective search方法.
Selective search论文可参考https://ivi.fnwi.uva.nl/isis/publications/bibtexbrowser.php?key=UijlingsIJCV2013&bib=all.bib

Selective Search方法的主要步骤如下:
- 使用图像分割方法来获取区域
- 计算所有区域之间的相似度
- 合并相似度最高的两个区域
- 重新计算新合并的区域与其他区域的相似度
- 重复上述过程直到整张图片都聚合成一整个区域
- 使用一种随机的计分方式给每个区域打分, 按照分数来进行排序, 取出得分最高的几个区域,即selective search的结果.
这里写图片描述

图1 selective search流程图

其中图像分割方法可见论文
https://www.koen.me/research/pub/uijlings-ijcv2013-draft.pdf


预处理

通过Region Proposal算法, 我们得到了大量的候选区域. 但是CNN对输入图像的格式有一定的要求, 候选区域不一定正好符合这种格式要求.
- 将图像缩放至227 × 227.
- 其他预处理方法
这里写图片描述

图2 不同预处理方法


网络结构

在RCNN中采用的网络结构是AlexNet. AlexNet是开山鼻祖, 其在2012年的Imagenet比赛里获得冠军, 奠定了其在计算机视觉领域中的地位.
这里写图片描述

图3 AlexNet网络

注:图3来自 https://blog.csdn.net/zyqdragon/article/details/72353420

AlexNet存在一些问题:参数量太大, 精度低. 为了解决这些问题, 后来的学者们提出了VGG、ResNet、DenseNet等. 我们可以将AlexNet替换为VGG、ResNet、DenseNet等. 由于神经网络的特征表达能力的增强,这些RCNN变种的mAP也有了大幅提升.基础网络为AlexNet的RCNN在VOC2011目标检测数据集的mAP为58.5%, 而VGG16相应的mAP为66%.


分类器

在RCNN中采用的分类器是SVM(支持向量机).
事实上, 每个类别都会有一个配套的SVM, 所以对于VOC(共20个类别+1个背景)来说, 共有21个SVM分类器.
选择SVM的原因有以下几点:
- cnn在fine-tuning的时候,对训练数据作了比较宽松的标注, 所谓宽松的标注是指,没有强调标注位置的精确性.
- 用于训练softmax分类器的负样本是随机采样得到的.而SVM可以通过hard negative mining的方法来提高mAP.

注意虽然使用了SVM分类器, 但是卷积网络中的全连接层仍然保存.


训练

有监督的预训练

在基于深度学习的目标检测中,通常会涉及大量待学习的参数.但是通常没有大量的训练样本.这种情况下, 可以先采用Imagenet数据集来进行预训练, 得到参数的初始值. 然后再进行fine-tuning.这就是所谓的有监督的预训练,也称之为迁移学习.说的简单点,就是将其他人训练好的模型参数直接用作神经网络的训练初始值, 这通常会比你直接使用随机初始化的方法要好, 精度会有很大的提升.

fine-tuning

在fine-tuning过程中,
- IoU大于或者等于0.5的样本都称为是正样本, 剩下的样本称为是负样本.
- 采用的学习算法(优化算法)是SGD.
- 学习率为0.001(之所以定的这么小, 是因为这模型进行了pre-train.)
- SGD每次迭代采用32个正样本, 96个负样本来组成一个batch,因此batch_size大小为128.

上文在介绍神经网络的训练技巧, 接下来将会介绍和SVM分类器相关的训练方法.

hard negative mining

对于目标检测任务, 我们会事先标记出ground truth, 然后在算法中生成一系列proposal, 这些proposal有一些和ground truth没重叠, 有一些和ground truth有重叠. 那么IoU超过一定程度即认定是正样本, 小于IoU则认定是负样本. 然后进行训练, 但是这样存在一个问题, 即正样本的数量远远小于负样本的数量. 这样训练出来的分类器的效果不佳, 使用该分类器会得到False Positive, 把其中得分高的false Positive当作

生成负样本和正样本

在论文中认为IoU低于0.3的样本是负样本, 但是需要注意的是正样本是ground truth,而不是IoU高于0.3的所有样本.这样做的原因是SVM适用于小数据量的训练集.


测试

在测试时, 我们在测试图片上运行selective search算法来产生2000个候选区域.

表1: 各目标检测算法在VOC 2010测试集上的mAP/%

这里写图片描述

这里写图片描述

图4:各目标检测算法在ILSVRC2013检测测试集上的mAP/%

注:表1和图4截自论文《Rich feature hierarchies for accurate object detection and semantic segmentation》

问答环节

  • top-1 error和top-5 error的含义是啥?
    如果判别标准是将图片的真实类别必须是所得概率最大的那个类别才算正确, 那么就是top-1 error. 如果判别标准是只要图片的真实类别对应的概率在最大的5个里面就算正确,那么就是top-5 error.
    示例1:
    现有一个10分类任务(airplane、automobile、bird、cat、deer、dog、frog、horse、ship、truck). 将一张图片(图片内容是一只猫)输入CNN, 会产生10个概率(score), 分别表示该图片属于以上10种物体的可能性大小(也就是概率). 该图片在预测时得到的概率为[0.0, 0.1, 0.0, 0.8, 0.0, 0.05, 0.0, 0.0, 0.03, 0.02], 那么top-1 error和top-5 error均为0.
  • RCNN中采用的CNN是否需要保留全连接层?
    这是显然的, RCNN需要保留全连接层.

RCNN效果图展示

这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_37486217/article/details/81072064