目标检测系列(二):Fast R-CNN

在前面R-CNN中我们讲到Ross Girshick使用CNN取代传统的方法来提取图像特征,将卷积神经网络引入了神经网络中,使得目标检测的性能得到了很大的提升。

虽然R-CNN相较于传统方法有了显著的提升,但是R-CNN还有几个明显的弊端:

  • 1、 训练是多段式的,需要训练几个不同的模型——提取特征的CNN模型,分类用的SVM模型以及精修候选框的回归模型;
  • 2、训练时间和空间开销很大。在时间上,训练一个非常深的网络花费时间非常多,如VGG16,这个过程在单GPU上需要2.5天(VOC07上的5k个图像)。在空间上,由于不论是候选框还是CNN提取的候选框特征都是需要储存在磁盘上的,这些储存需要数百GB的空间;
  • 3、目标检测速度很慢。在测试时,需要先从每个候选框提取特征。使用VGG16检测单个图像需要47s(单GPU)。

R-CNN慢是因为他为每个图像的候选框都进行的单独的运算(前向传播)。而SPPnet正是考虑到同一张图像的前向传播计算是可以共享,其将整张原始图像作为输入,计算整个图像的卷积特征图,然后使用从共享特征图提取的特征向量来对每个候选框进行分类(这里有个操作是将候选框的坐标映射到feature map坐标上)。SPPnet通过最大池化将候选框内的特征图转化为固定大小的输出(例如,6x6)来提取针对候选框的特征。其多个feature map被池化,然后连接成空间金字塔。SPPnet在测试时将R-CNN加速10到100倍。而由于更快的候选框特征提取训练时间也减少3倍。

但SPP网络也有很多与R-CNN相同的明显缺点——系统为多级流水线,特征写入磁盘占用空间大。而且,与R-CNN不同,在SPPnet中的fine-tune无法对ROI 池化之前的卷积层进行有效的反向传播更新。可以预见,这种限制会对系统的性能产生影响。

Fast R-CNN提出了一种新的训练方法,同时克服了R-CNN和SPPnet的缺点,同时提高了速度和准确性。Fast R-CNN有以下几个有点:

  • 1、相较于R-CNN和SPPnet更高的目标检测精度(mAP);
  • 2、训练是使用多任务损失的单阶段训练;
  • 3、训练可以更新所有网络参数;
  • 4、不需要磁盘空间缓存特征。

Fast R-CNN网络将整个图像和一组候选框作为输入,网络首先使用几个卷积层(conv)和最大池化层来处理整个图像,以产生特征图。然后对于每个候选框,ROI池化层从特征图中提取固定长度的特征向量。每个特征向量被送入一系列全连接(fc)层中,其最终分支有两个输出:一个输出K各类别加上一个背景类别的softmax概率估计,另一个为K各类别的每一个类别输出的四个数值。魅族4个值表示K个类别的一个类别的候选框的修正。

下面将从网络结构和训练及预测过程来对Fast R-CNN进行介绍。

ROI池化层

SPPnet的Roi池化是多尺度的池化,而Fast R-CNN的Roi池化是单一尺度池化。它将任意输入的feature map转换成特定大小HxW的输出(这里HxW是独立于Roi的超参数,他只跟模型有关,更准确的说是模型最后几层全连接层的大小)。每个RoI由指定其左上角(r,c)及其高度和宽度(h,w)的四元组(r,c,h,w)定义。

由于Roi大小不是固定的而(每个网络)输出HxW是固定的(VGG16的7x7),因此对于不同的Roi大小所需要的pooling的kernel size也是不同的。若Roi的大小为(x, y), 输出为HxW,则pooling的核大小为x/H*y/W(默认是非重叠pooling,即stride等于kernel size)。例如对于一个Roi大小为12x12,要求输出大小HxW为4x4,则其pooling核大小为12/4*12/4,即3x3。而当Roi大小为16x16时,其pooling核的大小则要相应的变成4x4了。

使用预训练模型进行初始化

与R-CNN一样,Fast R-CNN也是用预训练模型进行初始化,不同的是这里使用的是不同深度/宽度的3个模型。而R-CNN最后一个层的单个softmax分类器也被替换成了两个分支,一个与原来的相同也是softmax分类器,另一个则是bounding box回归器。这样就将R-CNN的多阶段训练(CNN+SVM+候选框回归)合成了一步。而网络输入也改成了两个:图像列表和这些图像中的Roi的列表。

fine-tune

在这里Fast R-CNN克服了SPPnet方向传播更新网络的低效。至于为什么是低效的,我也没有太看懂,姑且先贴上知乎上的一个回答为什么SPP-Net无法fine-tune卷积层?:
SPP-Net中fine-tuning的样本是来自所有图像的所有RoI打散后均匀采样的,即RoI-centric sampling,这就导致SGD的每个batch的样本来自不同的图像,需要同时计算和存储这些图像的Feature Map,过程变得expensive. Fast R-CNN采用分层采样思想,先采样出N张图像(image-centric sampling),在这N张图像中再采样出R个RoI,具体到实际中,N=2,R=128,同一图像的RoI共享计算和内存,也就是只用计算和存储2张图像,消耗就大大减少了。

Multi-task loss

Fast R-CNN使用了多任务学习,网络具有两个输出层,即图像分类和候选框坐标回归。其loss为:

总loss

其中Lcls是分类softmax损失,而后面的Lloc则是候选框回归loss,这里的回归loss是一个更加平滑的L1回归:

作者表示这种形式可以增强模型对异常数据的鲁棒性,整个函数在matplotlib中画出来是这样的:
图片来自https://zhuanlan.zhihu.com/p/24780395

mini-batch采样

作者这里的采样是每一次先随机选取两张图像。使用的batch大小为128,即从每个图像选择64个Roi。

通过Roi池化层的反向传播和SGD超参数

反向传播具体参见论文,这里不进行讨论。SGD参数学习率为0.001,训练30k步后降为0.0001,在训练10k次迭代。使用0.9的动量和0.0005的参数衰减(权重和偏置)。

尺度不变性

作者在文章中尝试了两种实现尺度不变对象检测方法:(1)通过“brute force”学习(单一尺度)和(2)通过使用图像金字塔(多尺度)。

在‘brute force’方法中,训练和测试都是使用预先设置好的特定图像大小(只有一个大小),网络必须直接从训练数据中学习尺度不变性目标检测。

而图像金字塔则是将图像缩放到不同的大小放入网络进行训练,相当于进行了数据增强。

使用阶段的SVD来进行更快的检测。

作者将大的全连接层用奇异值分解(SVD)进行了转换使得计算速度更快,而准确率只有很小的下降。

实验结果

在VOC07和VOC12上进行了测试,结果大概就是我们在当前的目标检测方法中我们的表现是最棒的。具体可以看论文。

微调哪些层

在SPPnet中使用的是不太深的网络,仅fine-tune全连接层也达到了不错的结果。作者假设这个结果不适用于非常深的网络,因此采用了VGG16来做实验,而实验结果也表明:通过Roi池化层的训练对于非常深的网络是非常重要的

作者通过更新不同层数的卷积网络来评估微调带来的影响。结果如下图:

既然fine-tune卷积层对于深度网络非常重要,那么是否意味着所有卷积层都应该进行fine-tune呢?Absolutely Not。在较小的网络(S和M)中,我们发现conv1(第一个卷积层)是通用的和任务独立的。允许conv1学习或不学习,对mAP没有很有意义的影响。对于VGG16,我们发现只需要更新conv3_1及以上(13个卷积层中的9个)的层。这种观察是实用的:(1)从conv2_1更新使训练变慢1.3倍(12.5小时对比9.5小时)和(2)从conv1_1更新GPU内存不够用。当从conv2_1学习时mAP仅为增加0.3个点(表5,最后一列)

设计评估

作者通过实践来将Fast R-CNN与SPPnet、R-CNN进行比较,以期了解和评估Fast R-CNN中这些设计的效果如何。

多任务训练有用吗?

相较于多阶段训练,一步到位的多任务训练自然是更为方便的,但是结果如何呢?作者对这个问题进行了测试。

首先,仅使用分类loss来进行训练(下表中每组第一列)作为基线。然后每组第二列采用了多任务学习,两个loss,但是在测试时候不使用bounding box回归。

每组第三列是多阶段训练的结果。每组第四列是使用多任务训练同时加上了bounding box回归。结果如下:
多任务学习结果

从上面可以看出,多级训练结果是明显不如多任务训练的。

多尺度学习:to brute force or finesse

这里以两种策略实现了测度不变性检测并比较其准确性:暴力学习(单尺度)和图像金字塔(多尺度)。结果如下图:

上表显示了当使用一个或五个尺度进行训练和测试时的模型S和M的结果。令人惊讶的是多尺度训练竟然只比单一尺度略好。而最深的L模型的单一尺度训练结果是要远远优于中小模型的。这些结果表明:深度卷积网络擅长直接学习尺度不变性。多尺度方法消耗大量的计算时间仅带来了很小的mAP增加。而且深度模型的66.9%的mAP,略高于R-CNN的66.0%,而R-CNN中的结果是相当于使用的多尺度的。

需要更多数据吗?

当提供更多的训练数据时,好的目标检测器应该会得到改善。在增加数据集之后Fast R-CNN的mAP还是有比较明显的提升的,从66.9%到70.0%。

SVM分类是否优于softmax

Fast R-CNN在微调期间使用softmax分类器学习,而不是如在R-CNN和SPPnet中训练线性SVM。为了理解这种选择的影响,作者进行了实验,结果如下:

对于所有三个网络,Softmax略优于SVM,mAP分别提高了0.1到0.8个点。这种效应很小,但是它表明与先前的多级训练方法相比,“一次性”微调是足够的。我们注意到,Softmax,不像SVM那样,在分类RoI时引入类之间的竞争。

更多的候选区域更好吗?

答案是否定的,结果如下图所示,蓝色实线是使用selective search的结果,蓝色虚线是在selective research中加入了Dense 结果的:

结论

比R-CNN、SPPnet更快更好!

参考:
Fast R-CNN. Ross Girshick
Fast R-CNN 论文翻译

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

推荐阅读更多精彩内容