Fast RCNN算法详解

FastR-CNN是一种基于快速区域的卷积网络方法,用于物体检测。它在一张图片上进行卷积运算,使用ROI pooling处理不同大小的目标区域,同时进行分类和回归训练。与R-CNN相比,FastR-CNN在PASCAL VOC2012上的mAP更高,训练和测试速度更快。
摘要由CSDN通过智能技术生成

论文:Fast R-CNN 
论文链接

优势

本文提出了一种基于快速区域的卷积网络方法(Fast R-CNN)用于物体检测。Fast R-CNN建立在先前的工作基础上,使用深度卷积网络有效地对目标区域进行分类。与之前的工作相比,Fast R-CNN采用了多项创新来提高训练和测试速度,同时提高了检测精度。 快速R-CNN训练非常深的VGG16网络比R-CNN快9倍,在测试时间快213倍,并在PASCAL VOC 2012上实现更高的mAP。与SPPnet相比,Fast R-CNN训练VGG16 3倍速更快 ,测试速度快10倍,并且更准确。

1、不再类似于R-CNN对每个region proposal进行卷积运算,region proposal之间有重叠,造成计算资源量费,Fast R-CNN是对一整张图片进行卷积运算。

2、用ROI pooling进行特征的尺寸变换,使得不同大小region proposal可得到相同大小feature map。

3、将regressor放进网络一起训练,每个类别对应一个regressor,同时用softmax代替原来的SVM分类器。

算法概述

训练过程

输入图片224*224,经过卷机网络得到feature map,进入ROI Pooling层,该层输入为卷积网络得到的feature map以及通过selective search得到的region proposal,region proposal的个数差不多2000。如图1所示,通过ROI Pooling层得到ROI feature,经过两个全连接层,输出为4096,而后分别经过两个并列关系的全联接层,左侧FC用于分类,右侧FC用于回归坐标。左侧FC输出为21,VOC数据集为20类以及背景类;右侧FC输出为84,表示,每个region proposal的4个坐标。最后为两个loss层,左侧为softmax loss,右侧为SmoothL1Loss。

测试过程

与训练基本相同,最后两个loss层要改成一个softmax层,输入是分类的score,输出概率。最后对每个类别采用NMS(non-maximun suppression)。

图1 Fast R-CNN结构

 

算法详解

输入:图片和对应的Region Proposal

ROI Pooling层:将大小不同的region proposal提取固定大小feature map。原理:h*w的region proposal分割成H*W个大小相同的网格,将region proposal映射到最后一个卷积层输出的feature map上,每个网格取最大值,得到大小为H*W的feature map。

训练中,每个mini-batch包含2张图像和128个region proposal(ROI),即每张图片包含64个ROI。然后从这些ROI中挑选约25%的ROI作为目标proposal,这些ROI和ground truth的IOU值为[0.5,1],其余为背景proposal,这些ROI和ground truth的IOU值为[0.1,0.5),另外只采用随机水平翻转的方式增加数据集。 

测试的时候则每张图像大约2000个ROI。

损失函数:总loss由L_{cls}L_{loc}构成,如图2所示。

图2 总loss函数

 式中,p表示预测score,p=(p_0,...p_K),u表示真是类别,t^{k}表示预测的回归偏移,t^k=(t_{x}^{k},t_{y}^{k},t_{w}^{k},t_{h}^{k}),v表示ground truth的值,v=(v_x,v_y,v_w,v_h)[u\geqslant 1]=\left\{\begin{matrix}1,u\geqslant 1 \\ 0, otherwise \end{matrix}\right.

采用SVD改进全联接层:应用于ROI Pooling层之后的全联接层。权重矩阵W为u*v,U为u*t,V为v*t,SVD分解如下:

W\approx U\Sigma _tV^T

经过SVD,参数由u*v变为t*(u+v),只要t远小于min(u,v)即可简化全联接层计算。如图3所示。

图3 有无SVD情况下前向传播时间对比

实验结果

1、mAP得到提升。

2、训练与测试时间缩短。

3、multi-task训练有帮助。

S,M,L各模块有四列,分别如下所述:

第一列表示仅采用分类训练,测试也没有回归;

第二列采用论文中的分类加回归训练,但是测试时候没有回归;

第三列采用分段训练,测试时候有回归;

第四列采用论文中的分类加回归训练,且测试时候有回归。

由上表可知,每一列mAP都比第一列高。

4、单尺度与多尺度对比。

单尺度尺寸为600 pixels,多尺度为(480,576,688,864,1200)

由上表可知,多尺度虽然能在提升一点mAP,但是时间代价比较大。作者直接给出原因:深度卷积网络可以学习尺度不变性。这个待研究。

5、softmax VS SVM

由上表可知,softmax略微优于SVM,但相比于以前的多阶段训练方法,“一次性”微调就足够了。

6、更多proposal是否效果会更好?

由上图可知,随着proposal增加,mAP先升高后降低,过多的proposal会对模型产生轻微影响。

总结

Fast RCNN优点:将RCNN众多步骤整合在一起,不仅大大提高了检测速度,也提高了检测准确率。其中,对整张图像卷积而不是对每个region proposal卷积,ROI Pooling,分类和回归都放在网络一起训练的multi-task loss是算法的三个核心。另外还有SVD分解等是加速的小贡献,数据集的增加时mAP提高的小贡献。 
Fast RCNN的主要缺点在于region proposal的提取使用selective search,目标检测时间大多消耗在这上面(提region proposal 2~3s,而提特征分类只需0.32s),这也是后续Faster RCNN的改进方向之一。


参考:https://blog.csdn.net/u014380165/article/details/72851319

Faster RCNN是一种基于深度学习的目标检测算法,它是RCNNFast RCNN的改进版,具有更快的检测速度和更高的准确率。本文将详细介绍Faster RCNN的PyTorch实现。 Faster RCNN的实现主要分为两个部分:特征提取和区域提取。特征提取使用预训练的卷积神经网络(如VGG16、ResNet等)对输入图像进行特征提取,得到一系列特征图。区域提取使用RPN(Region Proposal Network)对特征图进行处理,得到一系列候选区域,然后对每个候选区域进行分类和回归,得到最终的目标检测结果。 在PyTorch中实现Faster RCNN,可以使用torchvision中的models和transforms模块,以及torch.utils.data中的DataLoader和Dataset模块。具体实现步骤如下: 1. 加载数据集 使用torchvision中的transforms模块对数据进行预处理,然后使用Dataset模块加载数据集,最后使用DataLoader模块对数据进行批量处理。 2. 加载预训练模型 使用torchvision中的models模块加载预训练模型(如VGG16、ResNet等),然后修改模型最后一层的输出,使其适应目标检测任务。 3. 定义RPN 定义RPN网络,包括卷积层、分类层和回归层,使用预训练模型的特征图作为输入,输出候选区域。 4. 定义ROI Pooling层 定义ROI Pooling层,将候选区域映射到固定大小的特征图上,以便进行分类和回归。 5. 定义分类和回归网络 定义分类和回归网络,包括卷积层、全连接层和softmax层,使用ROI Pooling层的输出作为输入,输出目标检测结果。 6. 训练模型 使用反向传播算法和优化器对模型进行训练,调整模型参数,使其适应目标检测任务。 7. 测试模型 使用测试数据集对模型进行测试,计算模型的准确率和召回率,评估模型性能。 以上就是Faster RCNN的PyTorch实现步骤,具体实现细节可以参考PyTorch官方文档和相关论文。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值