论文阅读: R-CNN

时间:2022-09-04 06:33:07

Introduction

R-CNN提出于2013年11月。

R-CNN不是第一个提出“将检测任务转换为分类任务”,但却是第一个真正实现了该思想的算法:
论文阅读: R-CNN

其本质上主要解决了两大问题:

  • 如何location;
  • 如何在缺少检测专用数据集的情况下实现检测任务。

R-CNN对此提出了解决方案:

  1. 对于第一个问题,R-CNN中指出,Detection中最大的难关在于location。之前已经有人将location定义为regression问题了,但是效果并不好。如果要是采用在滑窗中进行location regression,技术难度又大。那咋办呢?别急,R-CNN就给出了解决方法:改成 对region proposal进行location regression 即可。并设计了如下的location regression计算公式:
    论文阅读: R-CNN

  2. 对于第二个问题,在train阶段,R-CNN先于ILSVRC2012数据集上预训练好,并直接在VOC2007或ILSVRC2013数据集上进行fine-tune;在test阶段,使用Selective Search进行RP生成,随后在resize成统一大小的RP上进行测试。该设计把train阶段和test阶段完美地统一了起来,很好地缓解了由于检测专用数据集缺少数据量的问题。

R-CNN思路如下:
1. R-CNN首先采用Selective Search来生成RP (每张生成约2k个) ;
2. 并很自然地想到了将所有RP resize成统一大小 (227×227):
论文阅读: R-CNN
3. 将resize后的RP分别喂入分类网络 (论文中用的是简化版的AlexNet,即去掉了AlexNet倒二的fc层) ;
4. 后面接着 k + 1 (前景+背景)个二分类的SVM,等着对卷积网络输出的特征tensor进行分类;
5. 对分类结果采用NMS进行一波“去重运动”;
6. 把所分tag归属为非背景的所有RP送入 k (前景)个location regressor,这时候只需要单独对RP区域进行location regression即可。

论文4.2节对于RP (Region Proposal) 的介绍中,最后一句讲到,RP生成环节的设计还有着很大的改进空间。这也为R-CNN的孙辈——Faster R-CNN提出RPN埋下了伏笔。

Innonvation

整套检测思路的设计,使得神经网络进行Detection任务变为了现实 (尽管之前也有了类似的OverFeat)。

检测算法的繁荣兴盛,自R-CNN始。

Result

R-CNN一文既出天下惊。

效果更不要说了,在当年的ILSVRC2013数据集上的mAP测评一骑绝尘:
论文阅读: R-CNN

论文阅读: R-CNN

RBG大神还饶有兴致地深入探究了一下R-CNN在ILSVRC2013上每个细类别的AP值:
论文阅读: R-CNN

在VOC2007上没有最好,只有更好:
论文阅读: R-CNN

论文阅读: R-CNN

R-CNN的一些实图检测效果:
论文阅读: R-CNN

Thinking

尽管R-CNN是划时代的,但是在它身上也能看到很多前人 (OverFeat等) 的智慧。


[1] Rich feature hierarchies for accurate object detection and semantic segmentation