Two-stage:从R-CNN到Faster R-CNN

1. R-CNN

概览

R-CNN

R-CNN训练的过程如上图:

1 输入图片,通过selective search获取2000个可能包含目标的区域PR。
2 将PR变形缩放到227*227的大小输入到CNN网络中进行特征提取
3 将提取出的特征输入到svm中进行分类

接下来我们对每一部分进行细致的分析。

1.1 Region Proposal

候选区域的提取使用的是传统的selective search方法,其利用像素之间的关系来合并得到可能存在的区域,比滑窗法高效得多,但是计算量很大并且其候选框存在大量的冗余,后续的算法利用深度学习对RP进行了改进。

2特征提取

2.1 图片缩放

实际上,在第一步RP获得的候选框的大小不可能完全一样,然后我们使用的CNN网络由于最后连接了全连接层,那么我们输入的图片的大小必须是一致的(强行变形到一致会导致特征的损失,后续有网络对此进行了优化),那么输入之前我们把这些区域缩放到227*227,缩放的方法如下:

  • B: 直接用原始图片的像素扩充,形成一个227*227的区域
  • C: 用灰色填补缺失的部分
  • D: 直接放缩


    Wrap.PNG
2.2特征提取CNN
Alexnet.png

特征提取网络是基于Alex net的变形,AlexNet的结构如图,首先这个Alexnet的权重是在ImageNet数据集上训练好的,我们只需要把softmax的1000个类别改为21 (数据集为Pascal Voc格式,其中有20个类别,背景也算一个负类,一共21),然后在poscal voc数据集上做fine-tuning,使得alexnet的权重你和当前数据集。

3 SVM分类

对每一个类别,训练一个SVM分类器,每个SVM的输入为Alexnet中最后一个全连接层FC7的4096维向量,那么对于每个候选框来说,最终都会输出一个4096维向量来送入到SVM进行分类,那么就会得到2000个分类,其中对于同一个目标可能会存在多个候选框,那么我们就要做一个NMS(non-maximun suppression),得到最佳的预测框。对于位置的预测,我们训练一个回归器,输入的数据是Pool5的特征和每个样本对的坐标和长宽。后续深入探讨下Bbox回归

一些重要的细节

1.正负样本
在fine-tuning 中,对于得到的2000个RP,如果某个RP与GT(ground truth)重叠的部分最大的那个其IOU大于0.5,那么RP可以作为这个GT的正样本,否则为负样本,另外,GT也作为正样本。
在训练SVM的过程中,IOU大于0.7的认定为正样本,IOU小于0,3的认定为负样本。
在fine-tuning与SVM训练中之所以IOU不一样是因为:

  • 正样本相对负样本很少,IOU阈值低可以获得多一点的数据,同时也为了防止过拟合
  • SVM是一个最终的分类器,且SVM适用于小样本,IOU阈值高样本会更为准确,那SVM会更为精确。
  1. 回归
    用Alexnet中pool5的6*6*256维特征和bounding box的GT来训练回归,每种类型的回归也是单独训练的。输入的是pool5的特征和样本对的坐标(x,y)和长宽w, h。另外只跟和GT的IOU超过某个阈值,并且最大的RP进行回归,其余的RP不参与回归。
    假设我们现在有:候选框P,对应的ground truth :G,以及我们希望获得的预测结果\hat G,那么我们希望\hat G尽可能接近G。通过pool5层的特征X做线性变换得到函数F(X),输出平移量和缩放量,从而得到\hat G.
    详细的叙述下:
         P = (P_x,P_y,P_w,P_h)
         G = (G_x,G_y,G_w,G_h)
         \hat G = ({\hat G}_x,{\hat G}_y,{\hat G}_w,{\hat G}_h)
    我们提出了一个候选框P时,发现它与G IOU较低,那么可以把从候选框P到通过平移和缩放使得与G的IOU尽量大,那么其实学习的是一个平移量(\Delta x,\Delta y),移动P_x,P_y,使得其尽量靠近G_x,G_y,还需要学习一个缩放量\Delta w, \Delta h,让P_w,P_h按照一定比列缩放,使得最终的预测框\hat GG的IOU尽可能的大。

输入:
样本值:输入的是P区域经过Alexnet网络在pool5的特征向量
标签值:GT: G_* = ({G_x,G_y,G_w,G_h})
输出:平移以及缩放尺度 \Delta x, \Delta y, \Delta w,\Delta h

训练过程:

2. SppNet

R-CNN缺陷与SppNet的改进

  • R-CNN缺陷
    R-CNN提高了目标检测的mAP,但是即使在GPU上处理,其fps也很低,其中主要原因:
    • 在region proposal阶段提取了2k个RP,并且需要把每个RP都送入到Alexnet中进行特征提取,大大增加了计算量,导致处理时间较长.
    • 由于Alexnet输入的是一个固定尺寸的图片,而我们在将RP送入时是对其进行了放缩,一定程度上减少了物体的特征,例如下图中的灯塔。这样会导致识别率的降低。
  • SppNet改进
    • 在提取特征的时候,我们可以直接把图片输入到Alexnet中,得到一个完整的feature map,然后对应每个RP,直接在feature map上找到其相应位置的feature 即可,只需要进行一次特征提取,大大减少了运算量
    • 对于输入图片需要固定大小的问题,SppNet提出了一个叫做spatial pyramid pooling的结构来提取特征,并且保证提取的特征维数,长度等完全一致,然后输入到FCN中,接下来再详述这个结构。
pipeline

上图是R-CNN和SppNet的pipeline,我们只讨论SppNet。输入一张图片Image到CNN中,得到全图的feature map,让2000个候选框RP与feature map直接映射,可以直接得到RP的特征(这里通过映射得到feature,不用经过CNN了,因为是直接从计算好的全局的feature map中得到的),然后将这个RP对应的feature map输入到空间金字塔变换层,输出一个固定大小的向量给到fc6,fc7中,进行分类。实际上,我们只需要着重关注两个点:RP到全局feature map的映射,空间金字塔变换层的结构。

RP->feature map

原始图片到feature map的映射要从感受野(receptive field)说起,感受野即特征图上一点在原始图像上对应的面积,之前我们找到一个图片,给定一层CNN的filter,stride,经过运算后可以得到其运算结果feature map的大小,实际上,它们的坐标之间是有关联的,我们以下图为例:


ec.jpg

在这个图中,假定Conv1为feature map1,Conv2为feature map2,原始图像大小为7*7,假定从在原图上那四个框框起来的面积为RP,我们用两个坐标来确定他的位置:(x_{min},y_{min}),(x_{max},y_{max}) = (0,0), (5,5)第一次的运算filter1 = 3,stride1=2,那么RP在Conv1上其坐标为( \hat x_{min\_conv1},\hat y_{min\_conv1}),(\hat x_{max\_conv1},\hat y_{max\_conv1}) = (0,0), (2,2)
第二次的运算filter1 = 2,stride1=1,那么RP在Conv2上其坐标为( \hat x_{min\_conv2},\hat y_{min\_conv2}),(\hat x_{max\_conv2},\hat y_{max\_conv2}) = (0,0), (0,0)
由这个例子可知,给定原图上的一个位置RP其坐标,可以计算出其在feature map上的坐标。

Spatial Pyramid Pooling

如下图,假设RP在feature map上得到的特征向量为N*N*256,那么先对N*N的面积做一个maxpooling,得到一个1*256向量,再把N*N分成四块,每块做maxpooling,得到一个4*256维向量,然后把N*N分成16块,每块做maxpooling,得到一个16*16的向量,然后把这三个向量合并起来得到一个21*256维向量输入到FCN中,可以看到,得到这个21*256维向量和尺寸N*N没有关系,输出的都是固定的大小,划分为4块或者是16块有时候并不一定可以均分,有固定的公式,这里就不展开。

SPPNET2.PNG

3. Fast R-CNN

SppNet缺点

  • 整体的结构是分阶段训练,不是一个end-to-end结构,训练CNN,训练SVM,训练bbox回归器没有结合到一起
  • 训练SVM,Bbox回归时算法不能更新卷积层的参数,影响网络的精度
    Fast R-CNN提出了ROI层,整合了整个结构,下图是pipeline:


    ROI.PNG

    首先把图片输入到CNN中得到一个全图的feature map,然后找到RP(候选框)在feature map对应的区域S,把S输入到ROI (region of interest ) pooling layer,输出一个固定大小的特征向量,然后特征向量经过FCN后,最后分为两个分支:一个处理softmax概率,一个作bbox回归。然后联合一起训练网络。

ROI layer

ROI层实际上就是单尺度的一个SppNet,就是把RP的feature map直接划分为H*W大小的块,然后直接去做maxpooling那么得到的一定是一个固定大小的向量。

4. Faster R-CNN

实际上,Fast R-CNN最耗时间的地方是在Region proposal,通过selective search获取2000个候选区RP,Faster R-CNN提出了RPN网络(region proposal network)来提取特征,使得R-CNN系列形成了一个完整的end-to-end的网络结构。Faster R-CNN = RPN +Fast R-CNN .

  • RPN
    基本思想:在提取好的feature map上,通过一个滑动窗口获取特征向量,然后输出到两个全连接层,一个是bbox回归层,一个是分类层cls。现在我们实际上来看下。
    原文中中结果特征提取后得到了一个13*13*256的feature map,然后他经过了一个3*3*256*256的卷积后得到了一个11*11*256的特征向量,就是图中的那个sliding window,对于这个11*11*256的feature map来说,其上面的1*1*256的向量可能在原图中代表的是一个很大的面积,而256-d则是这个面积的特征,原图的大小可能是440*440,那么对于1*1来讲,可能对应的是一个20*20的面积,然后有k个可能的anchor在上面框,框出物体,输出即为2k个score,为包含某个物体的概率和4k个coordinate,为bbox坐标。



    RPN.jpg
  • pipeline
    理解了RPN,我们可以看下Faster R-CNN的pipeline:
    • 首先,将图片输入到一个特征提取网络获得一个feature map
    • RPN作用在feature map后,给出RP的信息,然后和feature map一起输入到ROI pooling(ROI pooling实际上是一个单尺度的SppNet),得到了一个固定长度的特征向量。
    • 将固定长度的特征向量输入到FCN中,最后进行softmax回归分类和bbox regress进行定位。


      Pipeline

参考:
[1] RPN网络通俗理解
[2] 目标检测(一)——目标检测综述

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

推荐阅读更多精彩内容