深度学习·神经网络·计算机视觉机器学习与计算机视觉读论文

读论文系列:Object Detection ICCV2015

2018-03-20  本文已影响165人  梦里茶

Fast RCNN是对RCNN的性能优化版本,在VGG16上,Fast R-CNN训练速度是RCNN的9倍, 测试速度是RCNN213倍;训练速度是SPP-net的3倍,测试速度是SPP-net的3倍,并且达到了更高的准确率,本文为您解读Fast RCNN。

Overview

Fast rcnn直接从单张图的feature map中提取RoI对应的feature map,用卷积神经网络做分类,做bounding box regressor,不需要额外磁盘空间,避免重复计算,速度更快,准确率也更高。

Related work

RCNN缺点

需要先预训练卷积层,然后做region proposal, 然后用SVM对卷积层抽取的特征做分类,最后训练bounding-box回归器。

总结:RCNN就是慢!最主要的原因在于不同的Region Proposal有着大量的重复区域,导致大量的feature map重复计算。

SPP-net

SPP-net中则提出只过一遍图,从最后的feature map裁剪出需要的特征,然后由Spatial pyramid pooling层将其转为固定尺寸特征,由于没有重复计算feature map,训练速度提升3倍,测试速度提升了10-100倍。

但是SPP-net也有缺点,SPP-net的fine-tune不能越过SPP层,因为pyramid BP开销太大了,只能fine-tune全连接层,tune不到卷积层,所以在一些较深的网络上准确率上不去。

Fast RCNN architecture

Fast RCNN

其他都是一目了然的,接下来主要讲RoI pooling

RoI pooling

我们可以根据卷积运算的规则,推算出原图的region对应feature map中的哪一部分。但是因为原图region的大小不一,这些region对应的feature map尺寸是不固定的,RoI pooling就是为了得到固定大小的feature map。

由于多个RoI会有重复区域,所以max pooling时,feature map里同一个值可能对应pooling output的多个值。所以BP算梯度的时候,从RoI pooling层output y到input x的梯度是这样求的

RoI gradient

其中

举例:

RoI pooling BP

也就是说,将Loss对输出的梯度,传回到max pooling对应的那个feature unit上,再往回传

其实这是SPPnet的一个特例,是Spatial pooling,没有pyramid,也因此计算量大大减少,能够实现FC到CNN的梯度反向传播,并且,实验发现其实feature pyramid对准确率提升不大。倒是原图层面的Pyramid作用大些:

但是这种Pyramid方法计算代价比较大,所以Fast RCNN中只在小模型上有这样做

Multi-task loss

定义真实的bounding box为(vx, vy, vw, vh),预测的bounding box位置(由第二个fc层输出,有K个类,每个类分别有4个值,分别为)txk,tyk,twk, thk

LIoc(tk, v) = ∑i∈{x,y,w,h} smoothL1(tik - vi)

即预测位置和真实位置四个值的差值求和,其中

smoothL1(x) = 0.5x2 if |x|<1 otherwise |x|-0.5

是一个软化的L1(画一下图像可以看出来,在(-1,1)的范围内是抛物线,没L1那么尖锐),如果采用L2 loss,需要仔细调节学习率防止梯度爆炸。


smooth L1

整个模型的Loss就是:

L(p, k, tk, v) = Lcls(p, k) + λ|k ≥ 1| LIoc(tu, v)

训练

之前RCNN是需要分开微调SVM分类层和bounding box regressor的

前面讲了RoI pooling使得梯度反向传播到卷积层成为可能,但是这种BP训练仍然很耗显存和时间,尤其是在输入的ROI属于不同图片时,因为单张图的feature map是不存到磁盘的,当一张图的几个RoI和其他图的几个RoI混在一起交替输入时,需要反复前向传播计算feature map,再pooling,实际上也就反复计算了feature map。

在Fast RCNN的训练中,每次输入两张图(这么小的batch size),每张图取64个ROI,单张图的多个ROI在前向计算和后向传播过程中是共享feature map的的,这样就加快了训练速度。

然而,这犯了训练中的一个忌讳,实际上,相当于训练数据(ROI)没有充分shuffle,但在Fast RCNN的实验中效果还行,就先这样搞了。

样本筛选

Truncated SVD加速全连接层运算

W ≈ U∑tVT

将u×v大小的矩阵W分解为三个矩阵相乘,其中,U是一个u×t的矩阵,包含W的前t个左奇异向量,∑t是一个t×t的对角矩阵,包含W的前t个上奇异向量,VT是一个v×t的矩阵,包含W的钱t个右奇异向量,参数数量从uv变成t(u+v),当t远小于min(u,v)时,参数数量就显著少于W。

具体实现上,将一个权重为W的全连接层拆成两个,第一层的权重矩阵为∑tVT(并且没有bias),第二层的权重矩阵为U(带上W原来的bias)。

在Fast RCNN中,Truncated SVD减少了30%的训练时间。

实验结果

PK现有方法

创新点必要性验证

在VOC07上,end2end + bb regressor > stage-wise+ bb regressor > end2end

image.png

S M L是由浅到深的三个网络,可以看到,只用Softmax分类也能达到不错的效果,在网络比较深的情况下,也有超越SVM的可能。

注意,在训练更大的数据的时候,需要更多的iteration,更慢的learning rate decay。

More Region Proposal

图中红色线表示Average Recall,通常人们用Average Recall来评价Region Proposal的效果,然而,proposals越多,AR这个指标一直往上涨,但实际上的mAP并没有上升,所以使用AR这个指标比较各种方法的时候要小心,控制proposal的数量这个变量不变。

图中蓝色线表示mAP(= AVG(AP for each object class)),可以看到,

上一篇 下一篇

猜你喜欢

热点阅读