Fast R-CNN解读

来源:互联网 发布:软件架构设计的软件 编辑:程序博客网 时间:2024/06/07 10:28

Introduction

由于检测的复杂性,目前的一些模型都是多阶段的训练过程,首先是得到region proposals,然后提取region feature,预测bounding box, 最后进行精修,这一系列过程并不是端到端的,需要存储大量的中间特征,耗费大量的空间,并且训练过程很慢,也不elegant.

因此,rgb大神把这整个过程串起来了,提出一个单阶段训练算法,同时把object proposals分类和精修一起做了,相比于R-CNN和SPP-Net,训练速度和测试速度都快了很多。

R-CNN 缺点:

1.训练时多阶段的;首先微调卷积神经网络获得object proposals,然后把卷积网络特征喂给SVM,SVM作为物体检测器,代替了原有的softmax分类器,最后学习到bounding box;

2.训练的时间复杂度和空间复杂度很高;为了SVM和bound-box regrossor的训练,每个proposal特征提出出来并存在了磁盘上,5000张图片就需要2.5天,这些特征存储也需要好几百G的存储空间;

3.物体检测很慢;测试的时候,需要计算每个proposal的特征,VGG 16在GPU模式下检测一张图片需要47s;


SPP-Net通过加入SPP层大大加速了R-CNN的速度,并且每张图片只需要计算一次特征;但是SPP-Net依旧是多阶段的,并且不能对卷积层进行微调,这绝对是限制了深度网络的准确率。


Fast R-CNN architecture and training


可以看到,Fast R-CNN的网络结构有一个比较大的变化,输入时一张图片和一系列的proposals,经过CNN提取特征,输入到ROI pooling层变成大小相同的特征向量(大小为H*W,可以看成是SPP层的一种特殊情况,单pooling),然后到FC层,但是最后是两个输出层,一个产生proposal的类别,一个产生bounding-box的位置;


Fast R-CNN用预训练好的网络,需要做三个方面的修改

1. 最后一层的max pooling变成RIO pooling,比如VGG16的H=W=7;

2. 最后一层的输出从1000变成了K+1(类别+背景) 和bounding box regrossor;

3. 网络又两个输入,一个是图片,另一个是图片的ROI;


Fast R-CNN的优点:

1.比R-CNN和SPP-Net更高的检测质量(map);

2.训练时单个阶段的,使用多任务损失函数(multi-task loss);

3.训练可以更新所有网络层的参数;

4.不需要feature caching的存储;


SPP-Net不能BP的原因:

根本原因在于当每个训练样本来自于不同 的图片通过SPP层BP效率是极其低的,低效率又是因为每个ROI有很大的感受野(receptive field),经常是横跨整个输入图片的;


本文提出一种利用特征共享的更加高效的训练方式。在训练过程中,SGD的mini-batch首先抽样N张图片,然后每张图片抽样R/N个ROIs,同一张图片的ROI在forwad和backward的过程中都是共享参数的;


Multi-task loss

相比于训练softmax分类器,SVM,regrossor三个阶段,fast R-CNN把这些过程都一起优化。

多任务损失函数:



L1 loss对异常值更不敏感相比于L2 loss;

超参数lambda控制两个loss的平衡,在使用中取1;

多尺度训练的方法可以近似大小不变;


Fast R-CNN detection

SVD for faster detection

对于整个图片的分类,相比于卷积层,FC层画的时间很少,但是在检测中,由于ROI的数量很大,有一半的时间画在了FC层,通过简单的奇异值分解对FC层进行加速;


假设某层的参数可以分解为:

U大小为u*t,V为v*t,中间为t*t,这样的话参数个数可以从u*v降为t(u+v),如果t远远小于min(u,v)就更显而易见了;把SVD用于两层FC层,可以很好的加速,并且mAP只下降了0.3%;



Main results



fine-tune conv3_1以上的卷积层;

更多的训练数据可以提升mAP;

softmax和SVM的比较:



0 0
原创粉丝点击