Faster R-CNN

xyang

声明:本篇文章借用了他人理解,如有侵权,请联系,另如需转载,请注明出处

关于最新最全的目标检测论文,可以查看awesome-object-detection

《Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks》

NIPS 2015

  • arxiv: http://arxiv.org/abs/1506.01497

  • gitxiv: http://www.gitxiv.com/posts/8pfpcvefDYn2gSgXk/faster-r-cnn-towards-real-time-object-detection-with-region

  • slides: http://web.cs.hacettepe.edu.tr/~aykut/classes/spring2016/bil722/slides/w05-FasterR-CNN.pdf

  • github(official, Matlab): https://github.com/ShaoqingRen/faster_rcnn

  • github(Caffe): https://github.com/rbgirshick/py-faster-rcnn

  • github(MXNet): https://github.com/msracver/Deformable-ConvNets/tree/master/faster_rcnn

  • github(PyTorch–recommend): https://github.com//jwyang/faster-rcnn.pytorch

  • github: https://github.com/mitmul/chainer-faster-rcnn

  • github(Torch): https://github.com/andreaskoepf/faster-rcnn.torch

  • github(Torch): https://github.com/ruotianluo/Faster-RCNN-Densecap-torch

  • github(TensorFlow): https://github.com/smallcorgi/Faster-RCNN_TF

  • github(TensorFlow): https://github.com/CharlesShang/TFFRCNN

  • github(C++ demo): https://github.com/YihangLou/FasterRCNN-Encapsulation-Cplusplus

  • github(Keras): https://github.com/yhenon/keras-frcnn

  • github: https://github.com/Eniac-Xie/faster-rcnn-resnet

  • github(C++): https://github.com/D-X-Y/caffe-faster-rcnn/tree/dev

推荐阅读

  • Faster R-CNN: Down the rabbit hole of modern object detection

  • Faster R-CNN

  • 实例分割模型Mask R-CNN详解:从R-CNN,Fast R-CNN,Faster R-CNN再到Mask R-CNN

  • Faster RCNN 学习笔记:介绍Achor很详细

  • 图解Faster R-CNN简单流程

  • 从编程实现角度学习Faster R-CNN(附极简实现)

  • 从结构、原理到实现,Faster R-CNN全解析(原创)

  • 深度学习目标检测模型全面综述:Faster R-CNN、R-FCN和SSD

  • Faster R-CNN算法精读

  • Faster R-CNN 源码解析(Tensorflow版)

  • faster rcnn源码解析

  • Faster R-CNN论文翻译——中英文对照

  • faster-rcnn原理及相应概念解释

0. 创新点是什么?

  • 取代selective search ,直接通过一个Region Proposal Network(RPN)生成待检测区域(生成RoI区域时,时间从2s缩小到10ms)
    FASTER-RCNN创造性地采用卷积网络自行产生建议框,并且和目标检测网络共享卷积网络,使得建议框数目从原有的约2000个减少为300个,且建议框的质量也有本质的提高.
  • 产生建议窗口的CNN和目标检测的CNN共享

1. 问题或背景是什么?

Fast R-CNN 仍有缺点,体现在耗时的Selective Search依旧存在,而且并不是真正意义上的端到端的模型。

2. 相关的工作

Selective Search的算法过程是什么?

Selective Search实际上是借鉴了“层次聚类算法”的思想。

有兴趣可以了解一下“层次聚类算法”

Selective Search总体思路是什么?

总体思路:

  • 假设现在图像上有n个预分割的区域(Efficient Graph-Based Image Segmentation),表示为R={R1, R2, …, Rn},

  • 计算每个region与它相邻region(注意是相邻的区域)的相似度,这样会得到一个n*n的相似度矩阵(同一个区域之间和一个区域与不相邻区域之间的相似度可设为NaN),从矩阵中找出最大相似度值对应的两个区域,将这两个区域合二为一,这时候图像上还剩下n-1个区域;

  • 重复上面的过程(只需要计算新的区域与它相邻区域的新相似度,其他的不用重复计算),重复一次,区域的总数目就少1,知道最后所有的区域都合并称为了同一个区域(即此过程进行了n-1次,区域总数目最后变成了1).

R-CNN

R-CNN的流程是什么?

(1) 输入测试图像

(2)利用selective search算法在图像中从上到下提取2000个左右的Region Proposal

(3)将每个Region Proposal缩放(wrap)成227*227 的大小并输入CNN,将CNN的fc7层的输出作为特征

(4)将每个Region Proposal提取的CNN特征输入到SVM进行二分类

(5)对于SVM分好类的Region Proposal且为positive做Bounding box Regression, 用Bounding box回归值矫正原来的建议窗口,生成预测窗口坐标。

R-CNN的缺陷是什么?

(1) 步骤繁琐
训练分为多个阶段:微调网络+训练SVM+训练边框回归器

(2)训练耗内存
占用磁盘空间大,5000张图片产生上百G的特征

(3)训练速度慢
使用GPU,VGG模型处理一张图片需要47

(4)测试速度慢
每个Region Proposal 都需要运行整个CNN前向计算

(5)SVM和回归是事后操作
在SVM和回归过程中CNN特征没有被学习更新过

Fast R-CNN

Fast R-CNN的流程是什么?

(1)输入测试图像

(2)利用selective search算法在图像中从上到下提取2000个左右的Region Proposal

(3)将整张图片输入到CNN中,进行特征提取

(4)将Region Proposal映射到CNN的最后一层卷积feature map 上

(5)通过RoI pooling层使每个Region Proposal 生成固定尺寸的featur map

(6)利用Softmax Loss 和 Smooth L1 Loss 对分类概率和边框回归概率联合训练

Fast R-CNN与R-CNN相比,有什么不同?

(1)最后一层卷积层后加了一个RoI pooling layer

(2)损失函数使用了多任务损失函数(Multi-task Loss),将边框回归直接加入到CNN网络中训练

Fast R-CNN与R-CNN相比,有哪些改进?

(1)训练速度慢
R-CNN在训练时,是在采用SVM分类之前,把通过CNN提取的特征存储在硬盘上.这种方法造成了训练性能低下,因为在硬盘上大量的读写数据会造成训练速度缓慢.

FAST-RCNN在训练时,只需要将一张图像送入网络,每张图像一次性地提取CNN特征和建议区域,训练数据在GPU内存里直接进Loss层,这样候选区域的前几层特征不需要再重复计算且不再需要把大量数据存储在硬盘上.

(2)测试速度慢
R-CNN把一张图像分解成大量的建议框,每个建议框拉伸形成的图像都会单独通过CNN提取特征.实际上这些建议框之间大量重叠,特征值之间完全可以共享,造成了运算能力的浪费.

FAST-RCNN将整张图像归一化后直接送入CNN,在最后的卷积层输出的feature map上,加入建议框信息,使得在此之前的CNN运算得以共享.

(3)训练耗资源大
R-CNN中独立的SVM分类器和回归器需要大量特征作为训练样本,需要大量的硬盘空间.FAST-RCNN把类别判断和位置回归统一用深度网络实现,不再需要额外存储.

Softmax Loss(探测分类概率)是什么?

softmax公式

计算个分类的概率值

softmax Loss 公式

RPN进行分类时,即寻找最小LOSS值

Smooth L1 Loss(探测边框回归)是什么?

Faster R-CNN

Faster R-CNN的训练流程是什么?

(1)输入测试图像

(2)将整张图片输入到CNN,进行特征提取

(3)用RPN生成Region Proposal,每张图片生成300个Region Proposal

(4)把Region Proposal 映射到CNN最后一层卷积feature map上

(5)利用RoI pooling层将每个Region of Interest 生成固定尺寸的feature map

(6)利用 Softmax Loss 和 Smooth L1 Loss 对分类概率和边框回归联合训练

Faster R-CNN与Fast R-CNN相比,有什么不同?

(1)使用RPN(Region Proposal Network)代替原来的Selective Search方法产生建议窗口;

(2)产生建议窗口的CNN和目标检测的CNN共享

Faster R-CNN较于Fast R-CNN改进在哪里?

(1) 如何高效快速产生建议框?

FASTER-RCNN创造性地采用卷积网络自行产生建议框,并且和目标检测网络共享卷积网络,使得建议框数目从原有的约2000个减少为300个,且建议框的质量也有本质的提高.

3. Faster R-CNN

Conv Layers

Conv的结构是什么?

Faster R-CNN首先是支持输入任意大小的图片的,比如上图中输入的PQ,进入网络之前对图片进行了规整化尺度的设定,比如设定图像短边不超过600,图像长边不超过1000,我们可以假定MN=1000*600(如果图片少于该尺寸,可以边缘补0,即图像会有黑色边缘)

如上图所示:

- 13个Conv层
kernel_size=3,pad=1,stride=1;

所以,conv层不会改变图片大小(即:输入的图片大小=输出的图片大小)
- 13个ReLU层
激活函数,不改变图片大小
- 4个Pooling 层
kernel_size=2,stride=2;pooling层会让输出图片是输入图片的1/2

Conv的输出结果是什么?

经过Conv layers,图片大小变成(M/16)(N/16),即:6040(1000/16≈60,600/16≈40);则,Feature Map就是6040512-d(注:VGG16是512-d,ZF是256-d),表示特征图的大小为60*40,数量为512

RPN

RPN的主要工作是什么?

1、把feature map分割成多个小区域,识别出哪些小区域是前景,哪些是背景,简称RPN Classification,对应粉色框中上半分支;

2、获取前景区域的大致坐标,简称RPN bounding box regression

Feature Map进入RPN后,先经过一次33的卷积,同样,特征图大小依然是6040,数量512,这样做的目的应该是进一步集中特征信息,接着看到两个全卷积,即kernel_size=1*1,p=0,stride=1;

如上图中标识:

①   rpn_cls:60*40*512-d ⊕  1*1*512*18 ==> 60*40*9*2 逐像素对其9个Anchor box进行二分类②   rpn_bbox:60*40*512-d ⊕  1*1*512*36==>60*40*9*4逐像素得到其9个Anchor box四个坐标信息(其实是偏移量,后面介绍)

Anchors

Anchors的生成规则是什么?

前面提到经过Conv layers后,图片大小变成了原来的1/16,令feat_stride=16,在生成Anchors时,我们先定义一个base_anchor,大小为1616的box(因为特征图(6040)上的一个点,可以对应到原图(1000600)上一个1616大小的区域),源码中转化为[0,0,15,15]的数组,参数ratios=[0.5, 1, 2]scales=[8, 16, 32]

先看[0,0,15,15],面积保持不变,长、宽比分别为[0.5, 1, 2]是产生的Anchors box

如果经过scales变化,即长、宽分别均为 (168=128)、(1616=256)、(16*32=512),对应anchor box如图

综合以上两种变换,最后生成9个Anchor box

RPN的工作原理怎么解释?

主要看上图中框住的‘RPN’部分的网络图,其中‘rpn_conv/33’是33的卷积,上面有提到过,接着是两个1*1的全卷积,分别是图中的‘rpn_cls_score’和‘rpn_bbox_pred’,在上面同样有提到过。

这一层主要是为特征图60*40上的每个像素生成9个Anchor box,并且对生成的Anchor box进行过滤和标记,参照源码,过滤和标记规则如下:

① 去除掉超过1000*600这原图的边界的anchor box
② 如果anchor box与ground truth的IoU值最大,标记为正样本,label=1
③ 如果anchor box与ground truth的IoU>0.7,标记为正样本,label=1
④ 如果anchor box与ground truth的IoU<0.3,标记为负样本,label=0
剩下的既不是正样本也不是负样本,不用于最终训练,label=-1

什么是IoU?

RPN网络中的网络如何学习到预测box的能力?

通过ground truth box与预测的anchor box之间的差异来进行学习

除了对anchor box进行标记外,另一件事情就是计算anchor box与ground truth之间的偏移量

令:ground truth:标定的框也对应一个中心点位置坐标x*,y和宽高w,h*

anchor box: 中心点位置坐标x_a,y_a和宽高w_a,h_a所以,偏移量:△x=(x*-x_a)/w_a   △y=(y*-y_a)/h_a

△w=log(w*/w_a) △h=log(h*/h_a)

rpn_loss_cls、rpn_loss_bbox、rpn_cls_prob这三个变量指什么

下面集体看下这三个,其中‘rpn_loss_cls’、‘rpn_loss_bbox’是分别对应softmax,smooth L1计算损失函数,‘rpn_cls_prob’计算概率值(可用于下一层的nms非最大值抑制操作)

在’rpn-data’中已经为预测框anchor box进行了标记,并且计算出与gt_boxes之间的偏移量,利用RPN网络进行训练。

RPN训练设置:在训练RPN时,一个Mini-batch是由一幅图像中任意选取的256个proposal组成的,其中正负样本的比例为1:1。如果正样本不足128,则多用一些负样本以满足有256个Proposal可以用于训练,反之亦然

实验图中的proposal是什么作用?

在输入中我们看到’rpn_bbox_pred’,记录着训练好的四个回归值△x, △y, △w, △h。

源码中,会重新生成60409个anchor box,然后累加上训练好的△x, △y, △w, △h,从而得到了相较于之前更加准确的预测框region proposal,进一步对预测框进行越界剔除和使用nms非最大值抑制,剔除掉重叠的框;比如,设定IoU为0.7的阈值,即仅保留覆盖率不超过0.7的局部最大分数的box(粗筛)。最后留下大约2000个anchor,然后再取前N个box(比如300个);这样,进入到下一层ROI Pooling时region proposal大约只有300个

实验图中的roi_data的作用是什么?

为了避免定义上的误解,我们将经过‘proposal’后的预测框称为region proposal(其实,RPN层的任务其实已经完成,roi_data属于为下一层准备数据)

主要作用:

① RPN层只是来确定region proposal是否是物体(是/否),这里根据region proposal和ground truth box的最大重叠指定具体的标签(就不再是二分类问题了,参数中指定的是81类)

② 计算region proposal与ground truth boxes的偏移量,计算方法和之前的偏移量计算公式相同

经过这一步后的数据输入到ROI Pooling层进行进一步的分类和定位.

Loss Function

训练的代价函数是什么?

代价函数分为两部分,对应着RPN两条支路,即目标与否的分类误差和bbox的回归误差,其中
$L_{reg}(ti,ti*) = R(ti-ti*)$

采用在Fast-RCNN中提出的平滑L1函数,作者认为其比L2形式的误差更容易调节学习率。注意到回归误差中 $L_{reg}$ 与pi相乘,因此bbox回归只对包含目标的anchor计算误差。也就是说,如果anchor不包含目标,box输出位置无所谓。所以对于bbox的groundtruth,只考虑判定为有目标的anchor,并将其标注的坐标作为ground truth。此外,计算bbox误差时,不是比较四个角的坐标,而是tx,ty,tw,th,具体计算如下

Training RPNs

这个在上面也讲过了

RPN与Fast R-CNN共享特征ling

这个在上面已经讲过了

RoI Pooling层

推荐:https://www.cnblogs.com/wangyong/p/8523814.html

全连接层

经过roi pooling层之后,batch_size=300, proposal feature map的大小是7*7,512-d,对特征图进行全连接,参照下图,最后同样利用Softmax Loss和L1 Loss完成分类和定位

通过full connect层与softmax计算每个region proposal具体属于哪个类别(如人,马,车等),输出cls_prob概率向量;同时再次利用bounding box regression获得每个region proposal的位置偏移量bbox_pred,用于回归获得更加精确的目标检测框

全连接层主要做了哪些工作?

  • 通过全连接和softmax对region proposals进行具体类别的分类

  • 再次对region proposals进行bounding box regression,获取更高精度的rectangle box

4. 实验结果

复现结果对比

<近期更新>

(目标检测)Faster R-CNN 论文解读+复现相关推荐

  1. 目标检测论文解读复现之六:基于YOLOv5的遥感图像舰船的检测方法

    目标检测论文解读复现 文章目录 目标检测论文解读复现 前言 一.摘要 二.网络模型及核心创新点 三.应用数据集 四.实验效果 五.实验结论 六.投稿期刊介绍 前言 此前出了目标改进算法专栏,但是对于应 ...

  2. 目标检测论文解读复现之五:改进YOLOv5的SAR图像舰船目标检测

    目标检测论文解读复现 文章目录 目标检测论文解读复现 前言 一.摘要 二.网络模型及核心创新点 三.应用数据集 四.实验效果(部分展示) 五.实验结论 六.投稿期刊介绍 前言 此前出了目标改进算法专栏 ...

  3. 目标检测论文解读复现之一:基于改进YOLOv5的整车原木数量检测方法——TWD-YOLOv5(代码已复现)

    目标检测论文解读复现 文章目录 目标检测论文解读复现 前言 一.摘要 二.网络模型及核心创新点 三.应用数据集 四.实验效果 五.投稿期刊介绍 前言 此前出了目标改进算法专栏,但是对于应用于什么场景, ...

  4. 目标检测——Faster R-CNN论文阅读

    论文阅读--Faster R-CNN:Towards Real-Time Object Detection with Region Proposal Networks 文章目录 论文阅读--Faste ...

  5. faster rcnn论文_52 个深度学习目标检测模型汇总,论文、源码一应俱全!(附链接)...

    来源:AI有道 本文约2000字,建议阅读5分钟 本文给你总结52个深度学习检测模型. 标签:计算机视觉目标检测作为计算机视觉中的一个重要分支,近些年来随着神经网络理论研究的深入和硬件 GPU 算力的 ...

  6. CVPR2020论文分方向整理之检测篇(代码/论文解读/136篇打包下载)

    z CVPR2020论文分方向整理之检测篇(代码/论文解读/136篇打包下载) 极市平台(微信公众号ID:extrememart):专注计算机视觉前沿资讯和技术干货.本文由极市平台首发,转载需获授权. ...

  7. 一文总结旋转目标检测全面综述:论文方法与代码

    参考一文总结旋转目标检测全面综述:论文方法与代码 - 云+社区 - 腾讯云 首先放上DOTA数据集官网(http://captain.whu.edu.cn/DOTAweb/index.html),官网 ...

  8. 盘点热门的目标检测开源方案(附论文+代码下载)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 在2020年中,目标检测领域出现了许多优秀的工作,今天我们来聊一聊在当前热门的五大目标检测开源方案. ...

  9. 一文读懂目标检测模型(附论文资源)

    来源: 大数据文摘 本文共1443字,建议阅读5分钟. 本文为你详细介绍目标检测,并分享资源大礼包,为你的目标检测入门打下基础. 这是一份详细介绍了目标检测的相关经典论文.学习笔记.和代码示例的清单, ...

  10. Paper之EfficientDet: 《Scalable and Efficient Object Detection—可扩展和高效的目标检测》的翻译及其解读—续篇

    Paper之EfficientDet: <Scalable and Efficient Object Detection-可扩展和高效的目标检测>的翻译及其解读 导读:2019年11月21 ...

最新文章

  1. Unity Log重新定向
  2. NGINX的几个应用场景
  3. 深入理解分布式技术 - RocketMQ解析
  4. 网构软件-Internetware
  5. Java面试会问的——数组、声明、初始化、冒泡、多维数组、稀疏数组
  6. mysql区间段_解决针对MySQL中对于某一个区间段范围的数据更新的情况
  7. 一个题目涉及到的50个Sql语句
  8. weblogic部署步骤
  9. M1 Repast Simphony打不开 无反应问题解决
  10. 给计算机图片文件夹加密码,文件夹加密软件如何给照片文件夹加密
  11. 自检zabbix健康脚本
  12. 实验楼Linux入门:Linux用户管理
  13. 相敬如宾 你将获得更多敬重
  14. 基于Java的奖学金评定管理系统
  15. MySQL:由于找不到VCRUNTIME140_1.dll,无法继续执行代码。重新安装程序可能会解决此问题
  16. 表格-table 样式
  17. 如何改进课堂学习方法?
  18. ROS入门、ROS完整教程
  19. SOA 架构中的ESB是更好的应用于异构系统集成整合还是用于统一服务调用/基础服务实施...
  20. jQuery实现的无缝轮播图

热门文章

  1. 六度分离【Floyd】
  2. 5本必读Python入门书籍,你都看过吗?(附福利)
  3. 使用Rundll32.exe和Rundll.exe
  4. 数据分析报告——经典统计量的描述性分析:平均数方差、偏度峰度
  5. 计算机组装与维修问答题答案,计算机组装与维修试题精选(内附答案).doc
  6. Ubuntu 18.04 安装网卡驱动(有线连接)
  7. 互联网快讯:雷军宣布小米正式对标苹果;极米多款投影产品获用户肯定;矽行半导体签约落地苏州高新区
  8. 二战考研哈工大之路记录
  9. matlab编制刚度矩阵,MATLAB FEM 刚度矩阵 - 计算模拟 - 小木虫 - 学术 科研 互动社区...
  10. 【微信小程序付款转二维码付款】