从 R-CNN 到 Mask R-CNN

R-CNN

在那个时间点,基于深度学习的卷积神经网络开始屠榜ImageNet,R-CNN的思路非常直接,既然在图像分类方向上卷积神经网络效果这么好,那么如果把一张图的所有目标抠出来,一个一个送入CNN,不就可以将CNN和目标检测任务结合起来使用了,于是R-CNN就诞生了。

RCNN结构图

训练流程:

先在ImageNet上对CNN进行supervised pre-training;

然后在PASCAL VOC 2012数据集上进行domain-specific fine-tuning,即把ImageNet的1000分类层替换成21分类层(20个目标类加上1个背景类,因为region proposal会多产生一个背景类)进行fine-tuning;

然后将21分类层替换成每个类别一个线性SVM分类器(即总共21个SVM),然后进行分类训练;

最后加上边界框回归分支,进行定位训练。

推理流程:

先对输入图片使用selective search抽取2000个region proposals;

然后将region proposals一个一个送入CNN进行计;

最后使用SVM分类器和边界框回归分支得到最终的类别和定位。

贡献

R-CNN之前的方法是先unsupervised pre-training,然后fine tuning,而R-CNN是第一个提出先supervised pre-training,然后fine tuning用于下游任务。

R-CNN在PASCAL VOC 2012数据集上比起之前的方法提升了30%,R-CNN奠定了目标检测的总体框架,开辟目标检测领域region proposal+CNN范式的新时代。

缺陷:

将R-CNN和OverFeat进行比较,提到OverFeat比R-CNN速度快9倍,主要是因为OverFeat的region proposals是作用在CNN后的feature map上的,CNN参数共享大大提高region proposals的并行性。

R-CNN中提到,SVM可能不是必须的,可能可以精简训练流程。

Fast R-CNN

Fast R-CNN针对R-CNN的两个伏笔进行了改进,通过CNN并行处理所有region proposal,并且同时训练分类和定位。

训练流程:

先在ImageNet上进行pre-training;

然后在PASCAL VOC数据集上进行分类和定位多任务的fine-tuning;

在训练流程上,相对于R-CNN直接将2,3,4步骤合并成一个步骤完成,大大降低了训练的复杂程度。

推理流程:

先将整张图片送入CNN得到feature map;

然后对feature map进行selective search,得到region of interest(RoI);

然后将每个RoI送入RoI pooling转化成相同维度的向量;

最后通过两个独立的FC,预测出类别和位置。

在推理流程上,相比于R-CNN,送入CNN的是整张图片,selective search是在更小分辨率的feature map上进行的,大大减少了计算量。

RoI pooling

将不同尺寸大小的RoI进行维度上的对齐,可以统一进行multi-task的训练和推理。

RoI pooling如图所示。以RoI pooling后尺寸变成2x2为例,右上图的黑色矩形框对应一个RoI(h,w=5,7),RoI需要分成4个bin,由于RoI pooling切分bin的时候需要对划分尺寸进行量化(h//2=2,w//2=3),所有第一个bin包含2x3个像素,第二个bin包含2x4个像素,第三个bin包含3x3个像素,第四个bin包含3x4个像素。最后对每个bin中的像素进行max pooling得到最终的2x2 feature map。

贡献

Fast R-CNN极大的简化了R-CNN的训练流程,可以端到端的训练检测器,为后续Faster R-CNN的出现奠定了基础。

缺陷:

Fast R-CNN指出region proposal部分还是计算量太大了,导致速度不能进一步提高。

Faster R-CNN

虽然Fast R-CNN极大加快了检测器的推理速度,但是region proposal部分仍然是检测器进一步提升速度的瓶颈。于是,Faster R-CNN针对Fast R-CNN埋下的伏笔,设计了RPN和Anchor两个新组件,来改善region proposal提取RoI的质量,同时提升检测器的精度和速度。

训练流程:

通过ImageNet pre-trained model初始化CNN,然后端到端fine-tuning RPN部分;

固定住RPN,然后通过RPN产生的region proposal来训练Fast R-CNN部分;

固定住CNN和Fast R-CNN来fine-tuning RPN网络;

固定住CNN和RPN来fine-tuning Fast R-CNN网络。

相当于是对RPN和Fast R-CNN两个部分交替进行训练,因为使用了RPN,导致训练难度增加,比起Fast R-CNN训练过程更加复杂了(后续开源代码对Faster R-CNN训练流程进行了简化,可以同时训练RPN和Fast R-CNN)。

推理流程:

先将图片输入CNN得到featmap;

然后通过RPN产生RoI;

然后将每个RoI送入RoI pooling转化成相同维度的向量;

最后通过两个独立的FC,预测出类别和位置。

Region Proposal Networks

Faster RCNN则抛弃了传统的滑动窗口和SS方法,直接使用RPN生成检测框,这也是Faster R-CNN的巨大优势,能极大提升检测框的生成速度。

上图是RPN网络的具体结构。RPN网络分成2个分支,一个分支通过softmax分类得到所有anchors的分类分数,另一个分支用于计算所有anchors的边界框回归偏移量,以获得精确的proposal。最后在ProposalCreator通过分类分数和偏移量来得到合适的proposals。

Anchors

Faster R-CNN中在feature map的每个位置都设置了三种尺度三种长宽比的anchor,总共9种。anchor数量对RPN输出维度产生的变化如上图所示:原文中使用的CNN网络是ZF,CNN最后的conv5层num_output=256,对应生成256张特征图,所以相当于feature map每个点都是256-dimensions;在conv5之后,做了3x3卷积保持num_output=256,相当于每个点又融合了周围3x3的空间信息;在conv5 feature map的每个位置上设置k个anchor(默认k=9),而每个anhcor要分positive和negative,所以每个点由256d feature转化为cls=2k scores;而每个anchor都有(x, y, w, h)对应4个偏移量,所以reg=4k coordinates;训练时在合适的anchors中随机选取128个postive anchors+128个negative anchors进行训练。

Loss Function

Faster R-CNN训练时有4个损失函数,函数形式跟Fast R-CNN的损失函数相似:

RPN 分类损失:anchor是否为前景(二分类)

RPN位置回归损失:anchor位置微调

RoI 分类损失:RoI所属类别(21分类,多了一个类作为背景)

RoI位置回归损失:继续对RoI位置微调

四个损失相加作为最后的损失,反向传播,更新参数。

贡献

Faster R-CNN设计的RPN和anchor可以极大提升region proposal质量,同时极大提升了检测器的精度和速度。Faster R-CNN是R-CNN系列的集大成者,能够用近乎实时的速度检测物体,让目标检测在更多场景应用成为可能。

Mask R-CNN

Faster R-CNN的RoI pooling是粗粒度的空间量化特征提取,不能做输入和输出pixel-to-pixel的特征对齐,并且不能直接应用于实例分割。于是Mask R-CNN提出用RoIAlign来替代RoI pooling,得到pixel-to-pixel的特征对齐,并且在Faster R-CNN框架的基础上简单地增加了一个mask分支就能实现实例分割。

训练流程:

先在ImageNet上进行pre-training;

然后在COCO数据集上进行分类、定位和分割三个任务fine-tuning。

推理流程:

先将图片输入CNN得到featmap;

然后通过RPN产生RoI;

然后将每个RoI送入RoI pooling转化成相同维度的向量;

最后通过两个独立的FC,预测出类别和位置,同时通过mask分支预测出分类分数前N个RoI的分割mask。

Network Architecture

Mask R-CNN把抽取特征的CNN部分定义为backbone,把分类、回归和分割部分定义为head。Mask R-CNN把ResNet第4个stage出来的feature定义为ResNet C4,同时Mask R-CNN还探索了更加有效的FPN网络。

FPN结构如图所示。FPN采用自顶向下结构,通过横向连接构建网络内部特征金字塔。FPN可以根据anchor的尺度大小分配特征层,从不同特征层提取RoI特征。

head结构如图所示。ResNet C4的backbone后面增加了一个stage5,然后进行分类、回归和分割。FPN的backbone将FPN结构收集到的RoI直接送入两个分支,然后进行分类、回归和分割。其中分割分支,通过deconv来得到更大分辨率的feature map,从而得到更精确的mask预测结果,分割分支的最终feature map通道数等于类别数,每个通道预测一种类别的mask。相比Faster R-CNN,损失函数多了mask项。

RoIAlign

分割需要pixel-to-pixel对齐的RoI特征,这促使Mask R-CNN设计了RoIAlign来替代RoI pooling。

RoIAlign如上图所示。切分bin的时候和RoI pooling有所不同,避免了量化带来的误差,保证pixel-to-pixel的对齐。如右下图,RoIAlign切分bin的时候不进行量化,每个bin划分成2x2(4个红色x标记),每个红色x通过最相邻的4个像素值进行双线性插值计算,得到每个bin的4个插值,最后通过max pooling得到最终的2x2 feature map。

贡献

Mask R-CNN完美地展现了Faster R-CNN的易拓展性和强大的检测能力。但是Mask R-CNN最重要的贡献其实是提高了人们对实例分割任务思维上的认知。从现在看,先检测后分割的思路似乎非常简单,但是在Mask R-CNN出现之前,实例分割大多数都是bottom-up的思路,而Mask R-CNN是top-down的思路,在当时如何在检测框架中简洁优雅的嵌入实例分割是很困难的。Mask R-CNN最终夺得ICCV 2017 Best Paper。下图展示Mask RCNN分割结果图。

R-CNN/Fast R-CNN/Faster R-CNN/Mask R-CNN比较  
RCNN到Mask RCNN

从上图可以清清楚楚的看出从R-CNN到Mask R-CNN框架是如何演变的,可以分成两个支线看:训练流程和推理框架。

训练流程:

R-CNN -> Fast R-CNN极大精简了目标检测框架的训练流程,从4个独立训练流程精简成了2个独立训练流程;

Fast R-CNN -> Faster R-CNN因为RPN网络的引入,导致训练流程重新变成了RPN和Fast R-CNN交替训练4次(后续开源代码将RPN和Fast R-CNN联合训练了);

Faster R-CNN -> Mask R-CNN又转变成了2个独立训练流程。

推理框架:

R-CNN -> Fast R-CNN提取RoI进行并行化处理,将分类和定位看成一个多任务,并设计RoI pooling来进行特征对齐;

Fast R-CNN -> Faster R-CNN提出RPN来对region proposal部分进行加速,并且提出anchor来适应不同形态的目标;

Faster R-CNN -> Mask R-CNN增加一个mask分支,展示了Faster R-CNN的易拓展性,并且设计了RoIAlign进行pixel-to-pixel的对齐。

总结

整个R-CNN系列非常经典,阵容极其华丽(RBG、何恺明、任少卿等等)。从传统视觉到深度学习,RGB简单直接的应用CNN构造了R-CNN检测器,开启基于深度学习的目标检测新时代;从R-CNN到Fast R-CNN、Faster R-CNN通过实验观察和思考,发现问题,解决问题;Mask R-CNN在已有领域,通过简单设计改造,从目标检测任务迁移到实例分割任务。无论是从设计思维,洞察力和科研敏锐性上,都无可挑剔。

©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,681评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,710评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,623评论 0 334
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,202评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,232评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,368评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,795评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,461评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,647评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,476评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,525评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,226评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,785评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,857评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,090评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,647评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,215评论 2 341

推荐阅读更多精彩内容