Faster R-CNN讲透版

之前对Faster R-CNN一直模棱两可,最近将Faster R-CNN进行了深入了解。用此文对Faster R-CNN讲透。
参考:https://zhuanlan.zhihu.com/p/32404424
https://zhuanlan.zhihu.com/p/31426458

1. Faster R-CNN架构

image.png

主体为3部分。

  • Extractor用于对图像提取特征,得到feature map.
  • RPN提供感兴趣区域rois
  • ROIHead 对rois进行分类与坐标回归

2.数据处理

Faster R-CNN有对原始图像进行resize成HxW的操作。使得长边小于等于1000,短边小于等于600(至少有一个等于)。可直接理解为resize为1000*600.

3.特征提取

image.png

以VGG16为例,conv层feature map尺寸不变,经过四次pooling后,原始图像尺寸下降为1/16。原始图片resize之后尺寸为3×H×W,四次下采样后的feature map尺寸为C×(H/16)×(W/16)

4.RPN

4.1 anchor生成

RPN对feature map的每一个点生成9中尺寸的anchor,即大小为(128,256,512),长宽比为(1:1,1:2,2:1)。


image.png

对于1000×600尺寸的图片,经过四次下采样的feature map 尺寸为62×37(即(1000/16)×(600/16))每个点取9个anchor即62×37×9约为20000个anchor。

4.2 RPN训练

image.png

RPN的训练过程是对anchor进行分类与坐标回归。20000个anchor全部进行训练不现实,所以AnchorTargetCreator用于从20000个anchor选择256个。

  • 对于每一个ground truth bounding box (gt_bbox),选择和它重叠度(IoU)最高的一个anchor作为正样本
  • 对于剩下的anchor,从中选择和任意一个gt_bbox重叠度超过0.7的anchor,作为正样本,正样本的数目不超过128个。
  • 随机选择和gt_bbox重叠度小于0.3的anchor作为负样本。负样本和正样本的总数为256。
    简单地说正负样本1:1选择256个anchor传入RPN网络进行训练。RPN网络结构为全卷积,所以不限制形状。经过33卷积层后是两个11卷积层分别用于分类(positive与negative样本)与位置回归。分类是个1(前景),0(后景)的二分类问题。
    image.png

    回归是对四个参数进行回归,注意只有当GT与需要回归框位置比较接近时,才可近似线性变换成立。
    总结来说,RPN训练的作用是对anchor的二分类与坐标回归。
    4.3 RPN生成ROIs
    RPN在自身训练的同时,还会提供RoIs(region of interests)给Fast RCNN(RoIHead)作为训练样本。RPN生成RoIs的过程(ProposalCreator)如下:
  • 对于每张图片,利用它的feature map, 计算 (H/16)× (W/16)×9(大概20000)个anchor属于前景的概率,以及对应的位置参数。
  • 选取概率较大的12000个anchor
  • 利用回归的位置参数,修正这12000个anchor的位置,得到RoIs
  • 利用非极大值((Non-maximum suppression, NMS)抑制,选出概率最大的2000个RoIs
  • 注意:在inference的时候,为了提高处理速度,12000和2000分别变为6000和300.

NMS的作用是消除冗余框,希望只有一个框来代表目标
操作过程,1)对所有框的得分排序,选中得分最高的框,2)将与该框IOU比例高于阈值的框删去,3)从未选过的框再选择得分最高的框,重复这个过程。

5.Fast R-CNN/ROI Head

image.png

RPN给ROIHead传给2000个ROIs,ProposalTargetCreator将2000个ROIs减少为128个RIOs,传给RIO Pooling,其作用是将128个尺寸各异的RIOs pooling成相同尺寸的feature map(7*7),pooling成相同的尺寸因为后面分类与回归用的是全连接层,需要固定尺寸。ROIPooling后两个全连基层与特征提取网络的FC尺寸相同,可是用预期参数共享,作为初始化参数。再接FC21用于目标分类(20个类别+1背景)FC84坐标回归(21个类别,每个类别4个位置参数)。

5.1ProposalTargetCreator

ROIHead不是讲RPN给的2000个ROIs全部训练,而是ProposalTargetCreator将2000个ROIs减少为128个RIOs。

  • iou>0.3选择32个,作正样本
  • iou<=0.1作负样本。
    即正负样本1:3共128个ROIs训练ROIHead。

5.2 训练细节

对128个ROIs的坐标进行标准化处理(减去均值除以标准差)。
对于分类问题,直接利用交叉熵损失. 而对于位置的回归损失,一样采用Smooth_L1Loss, 只不过只对正样本计算损失.而且是只对正样本中的这个类别4个参数计算损失。

5.3测试

测试的时候对所有的RoIs(大概300个左右) 计算分类(21类)概率,并利用位置参数调整预测候选框的位置。然后再用一遍极大值抑制(之前在RPN的ProposalCreator用过)。

细节

  • 测试时候,RPN生成ROIs时候,使用NMS降低数量,到ROIHead,再用NMS降低目标框数量。(两次NMS)
  • 测试时候,RPN生成ROIs时候,对6000个anchor进行了位置回归,到ROIHead,再对位置进行回归。(两次位置回归)
  • RPN分类是二分类,ROIHead是21分类(20类目标+1背景)
  • 在训练Faster RCNN的时候总损失是四个损失的和:

RPN 分类损失:anchor是否为前景(二分类)
RPN位置回归损失:anchor位置微调
RoI 分类损失:RoI所属类别(21分类,多了一个类作为背景)
RoI位置回归损失:继续对RoI位置微调

  • 三个creator

AnchorTargetCreator : 负责在训练RPN的时候,从上万个anchor中选择一些(比如256)进行训练,以使得正负样本比例大概是1:1. 同时给出训练的位置参数目标。 即返回gt_rpn_loc和gt_rpn_label。
ProposalTargetCreator: 负责在训练RoIHead/Fast R-CNN的时候,从RoIs选择一部分(比如128个)用以训练。同时给定训练目标, 返回(sample_RoI, gt_RoI_loc, gt_RoI_label)
ProposalCreator: 在RPN中,从上万个anchor中,选择一定数目(2000或者300),调整大小和位置,生成RoIs,用以Fast R-CNN训练或者测试。
其中AnchorTargetCreator和ProposalTargetCreator是为了生成训练的目标,只在训练阶段用到,ProposalCreator是RPN为Fast R-CNN生成RoIs,在训练和测试阶段都会用到

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

推荐阅读更多精彩内容