ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

fast rcnn 论文解读(附代码链接)

2021-06-05 16:57:01  阅读:174  来源: 互联网

标签:loss 训练 region 网络 fast rcnn proposal 链接


要解决的问题

  • 1、RCNN和SPPnet分多步训练,先要fine tuning一个预训练的网络,然后针对每个类别都训练一个SVM分类器,最后还要用regressors对bounding-box进行回归,另外region proposal也要单独用selective search的方式获得,步骤比较繁琐。

  • 2、时间和内存消耗比较大。在训练SVM和回归的时候需要用网络训练的特征作为输入,特征保存在磁盘上再读入的时间消耗还是比较大的。

  • 3、测试的时候也比较慢,每张图片的每个region proposal都要做卷积,重复操作太多。

针对上述这些问题,本篇论文作者提出了fast rcnn网络,可以解决R-CNN和SPPnet的缺点,同时提高其速度和准确性。fast rcnn具有以下优点:

  • 1、高精度检测,训练是单步训练,而loss是multi-task loss。

  • 2、训练可以更新所有网络层,且内存不需要太大。

网络架构

fast rcnn的架构流程如下:网络有两个输入:图像和对应的已框出来的region proposal。其中region proposal由selective search方法得到,没有表示在流程图中。对每个类别都训练一个回归器,且只有非背景的region proposal才需要进行回归。架构是端到端多任务训练。

下面是网络的一般通用架构

架构实施具体细节

1、ROI polling layer:ROI Pooling的作用是对不同大小的region proposal,从最后卷积层输出的feature map提取大小固定的feature map。因为全连接层的输入需要尺寸大小一样,所以不能直接将不同大小的region proposal映射到feature map作为输出,需要做尺寸变换。即将一个hw的region proposal分割成HW大小的网格,然后将这个region proposal映射到最后一个卷积层输出的feature map,最后计算每个网格里的最大值作为该网格的输出,所以不管ROI pooling之前的feature map大小是多少,ROI pooling后得到的feature map大小都是H*W。

2、从预训练网络进行初始化:使用三个经过预训练的ImageNet网络进行实验,每个网络具有五个最大池化层以及五个到十三个conv层。当预训练的网络初始化Fast R-CNN网络时,它将经历三个转换。首先,最后一个最大池化层被RoI池化层代替,该RoI池化层通过将H和W设置为与网络的第一个完全连接层兼容(例如,对于VGG16,H = W = 7)进行配置。其次,将网络的最后一个完全连接层和softmax替换为先前描述的两个同级层(K + 1类的完全连接层和softmax以及特定于类别的bounding-box regressors)。第三,修改网络以获取两个数据输入:图像和这些图像的RoI。

3、multi-task loss:损失函数的定义是将分类的loss和回归的loss整合在一起,其中分类采用log loss,即对真实分类(下图中的pu)的概率取负log,而回归的loss和R-CNN基本一样。分类层输出K+1维,表示K个类和1个背景类。

这是回归的loss,其中t^u表示预测的结果,u表示类别。v表示真实的结果,即bounding box regression target。

4、采用SVD分解改进全连接层:truncate svd可以简化全连接层的计算,加快检测时间,且无需在模型压缩后执行其他微调。

训练

算法的主网络还是VGG16,输入是224* 224* 3,经过5个卷积层和2个降采样层(这两个降采样层分别跟在第一和第二个卷积层后面)后,进入ROI Pooling层,该层的输入是conv5层的输出和region proposal,region proposal的个数差不多2000。然后再经过两个都是output是4096的全连接层。最后分别经过output个数是21和84的两个全连接层(这两个全连接层是并列的,不是前后关系),前者是分类的输出,代表每个region proposal属于每个类别(21类)的得分,后者是回归的输出,代表每个region proposal的四个坐标。最后是两个损失层,分类的是softmaxWithLoss,输入是label和分类层输出的得分;回归的是SmoothL1Loss,输入是回归层的输出和target坐标及weight。

测试

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

实验结果

fast rcnn在常用的数据集上表现出的性能都比SOTA要好。除了算法提升外,数据集越大算法的精度越高,所以数据是信息时代的“石油”。

fast rcnn在速度上的提升

更多细节

该论文还阐述了其他细节:

  • 1、在迁移学习基础上更新哪些层的参数实验

  • 2、SVM V.S. softmax,是否svm更有效

  • 3、输入多种规格的图片,更多训练数据

  • 4、multi-task training有助于提高精度吗

  • 5、比较实现尺度不变的目标检测的两种策略:蛮力匹配(brute-force learning)和图像金字塔。

结论

Fast RCNN不仅大大提高了检测速度,也提高了检测准确率。其中,其是对整张图像卷积而不是对每个region proposal卷积。ROI Pooling,分类和回归都放在网络一起训练、multi-task loss是算法的三个核心。当然Fast RCNN的主要缺点在于region proposal的提取使用selective search,目标检测时间大多消耗在这上面(提region proposal 2~3s,而提特征分类只需0.32s),这也是后续Faster RCNN的改进方向之一。

代码链接

论文最后把代码开源,github链接:https://github.com/rbgirshick/py-faster-rcnn

标签:loss,训练,region,网络,fast,rcnn,proposal,链接
来源: https://blog.51cto.com/u_15242250/2870180

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有