要解决的问题

  • 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

fast rcnn 论文解读(附代码链接)相关推荐

  1. cnn 句向量_深度学习目标检测Fast R-CNN论文解读

    前言 我们知道,R-CNN存在着以下几个问题: 分步骤进行,过程繁琐.Selective Search生成候选区域region proposal->fine tune预训练网络->针对每个 ...

  2. YOLOv7来临:论文解读附代码解析

    前言: 是一份关于YOLOv7的论文解读,首发于[GiantPandaCV]公众号,写的不是很好,望大佬们包涵! 2022年7月,YOLOv7来临, 论文链接:https://arxiv.org/ab ...

  3. FPN论文解读 和 代码详解

    FPN论文解读 和 代码详解 论文地址:[Feature Pyramid Networks for Object Detection](1612.03144v2.pdf (arxiv.org)) 代码 ...

  4. CVPR 2020 Oral 文章汇总,包括论文解读与代码实现

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要10分钟 Follow小博主,每天更新前沿干货 [导读]本文为大家整理了10篇CVPR2020上被评为Oral的论文解读和代码汇总. 1.Ra ...

  5. 单目标跟踪算法:Siamese RPN论文解读和代码解析

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:周威 | 来源:知乎 https://zhuanlan.zhihu.com/p/16198364 ...

  6. Fast R-CNN论文详解

    Fast R-CNN论文详解 作者:ture_dream &创新点 规避R-CNN中冗余的特征提取操作,只对整张图像全区域进行一次特征提取: 用RoI pooling层取代最后一层max po ...

  7. Fast R-CNN论文原理+目标检测笔记(二)

    文章目录 Fast R-CNN 1. SPPnets 2. ROI池化层 2.1 介绍 2.2 ROI池化层原理 3. Fast R-CNN的原理 Fast R-CNN 论文摘要:This paper ...

  8. Mask Scoring R-CNN论文解读

    Mask Scoring R-CNN论文解读     人工智能大神何凯明的Mask R-CNN对实例分割做出了巨大的贡献,在2019年的CVPR会议中,一个基于Mask R-CNN的一个名为Mask ...

  9. 【Cylinder3D论文解读及代码略解】

    Cylinder3D论文解读及代码略解 论文解读 Abstract Introduction Related work 室内点云分割 室外点云分割 3D体素划分 Methodology(本文方法) C ...

最新文章

  1. 使用电脑一定得有良好的习惯呀!
  2. 浙大计算机专业分数线,被浙江大学提前批的冷门专业录取,后悔没选计算机专业:可惜分数...
  3. 属性被分为八大类不包括_Python语言---私有属性
  4. mysql binlog 统计_对MySQL binlog日志解析,统计每张表的DML次数
  5. Dijkstra解决POJ 2263
  6. 区别vue的this和JTopo中的this
  7. 外卖匹配系统_歧视外卖员的北京SKP是个什么东西?
  8. glusterfs java_GlusterFS分布式文件系统使用简介
  9. JDBC(连接池) -- 02(I)
  10. L1-012. 计算指数-PAT团体程序设计天梯赛GPLT
  11. 适合程序员的健身方法(转)
  12. python编程的区别_Python与其它编程语言的区别
  13. python学习笔记7-读取pdf并输出到excel
  14. android arial字体,Arial字体大小
  15. SmartUpload文件上传
  16. 数控技术 - 直线插补 - 逐点比较法
  17. win10备份为wim_玩转一键自动还原,强大你的win10系统
  18. zyb的面试(模拟)
  19. 抑制剂以及抗体偶联物在免疫检查点中的作用
  20. Dynamic Head: Unifying Object Detection Heads with Attentions 阅读

热门文章

  1. sql 基础增删改查语句
  2. 面试题——Java虚拟机
  3. 一些移动端的ui框架
  4. POJ1958 Strange Towers of Hanoi [递推]
  5. lambda 复制数组
  6. mac brew安装mysql
  7. 引脚悬空是什么电平_STM32单片机必须掌握的八种IO口模式和引脚配置方式
  8. hexo+github 一小时搭建个人博客
  9. PAT乙级(1017 A除以B)
  10. php 修改input内容,JS简单获取并修改input文本框内容的方法示例