https://zhuanlan.zhihu.com/p/21412911

rcnn需要固定图片的大小,fast rcnn不需要

rcnn,sppnet,fast rcnn,ohem,faster rcnn,rfcn都属于基于region proposal(候选区域)的目标检测方法,即预先找出图中目标可能出现的位置。

fast rcnn:在特征提取层的最后一层卷积后加入roi pooling layer,损失函数使用多任务损失函数(multi-task loss),将边框回归直接加入到CNN网络中训练。

     1.ROI pooling layer实际上是SPP-NET的一个精简版,SPP-NET对每个proposal使用了不同大小的金字塔映射,而roi pooling layer只需要下采样到一个7x7的特征图。对于VGG16网络conv5_3有512个特征图,这样所有region proposal对应了一个7*7*512维度的特征向量作为全连接层的输入。

     2.R-CNN训练过程分为了三个阶段,而Fast R-CNN直接使用softmax替代SVM分类,同时利用多任务损失函数边框回归也加入到了网络中,这样整个的训练过程是端到端的(除去region proposal提取阶段)。没有真正实现端到端训练。

     fast rcnn中一个batch是两张图片,每张图片64个region proposal,即一个batch里是128个region proposal。选择16个(即1/4)作为正例,选择48个(即3/4)作为负例。正例是iou大于等于0.5的框,负例是iou大于等于0.1,小于0.5的框。

faster rcnn:之前的网络都是单独生成的region proposal,faster rcnn利用了cnn网络来生成region proposal,这样就真正实现了端到端。在region proposal + CNN分类的这种目标检测框架中,region proposal质量好坏直接影响到目标检测任务的精度。如果找到一种方法只提取几百个或者更少的高质量的预选窗口,而且召回率很高,这不但能加快目标检测速度,还能提高目标检测的性能(假阳例少)。RPN(Region Proposal Networks)网络应运而生。

       RPN的核心思想是使用卷积神经网络直接产生region proposal,使用的方法本质上就是滑动窗口。RPN的设计比较巧妙,RPN只需在最后的卷积层上滑动一遍,因为anchor机制和边框回归可以得到多尺度多长宽比的region proposal。RPN机制生成的roi,跨越图像边界的都要忽略掉。

       RPN网络实际上就是在特征提取层最后一层之后再加一层卷积层,并且这一层是一个3x3的卷积。之后再生成只是这一层后面加了label loss和.....  这个到底怎么训练的

      faster rcnn训练的2个阶段(6个过程):1.rpn网络训练  2.利用rpn网络提取region proposal  3.利用生成的region proposal训练fast rcnn网络

                          4.rpn网络训练,但这个时候特征提取层的参数固定了,只训练后面的层的参数  5.利用rpn网络提取region proposal

                          6.特征提取层参数固定,利用新生成的region proposal去训练fast rcnn网络

      在1,3中都是利用imagenet预训练模型进行参数初始化,1,3,4,6中rpn网络后面的卷积层和fast rcnn后面的全连接层都是利用高斯分布进行初始化

ohem:将所有的region proposal拿来训练,一个batch大小为2048,map高于fast rcnn原来的情况。ohem方法和fast rcnn一样,一个batch128个region proposal,但这128个是按照loss由大到小排列,并且经过nms处理后选出的前128个大的region proposal。ohem取消了正负样本在mini-batch里的ratio(原Fast-RCNN的ratio为1:3)。

     训练过程:1.将原图的所有props扔到RoINet1,计算它们的loss(这里有两个loss:cls和det);

          2.根据loss从高到低排序,以及利用NMS,来选出前K个props(K由论文里的N和B参数决定)

            为什么要用NMS? 显然对于那些高度overlap的props经RoI的投影后,

         其在feature maps上的位置和大小是差不多一样的,容易导致loss double counting问题

           ohem中的nms和之前的有点不一样,ohem是按照loss大小排列,但之前的是按照这个框的概率值进行排列。

         3.将选出的K个props(可以理解成hard examples)扔到RoINet2,这时的RoINet2和Fast RCNN的RoINet一样,计算K个props的loss,并回传梯度/残差给                        ConvNet,来更新整个网络

rcnn,sppnet,fast rcnn,ohem,faster rcnn,rfcn的更多相关文章

  1. Object Detection(RCNN, SPPNet, Fast RCNN, Faster RCNN, YOLO v1)

    RCNN -> SPPNet -> Fast-RCNN -> Faster-RCNN -> FPN YOLO v1-v3 Reference RCNN: Rich featur ...

  2. 从R-CNN到FAST-RCNN再到Faster R-CNN

    (Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks)   R-CNN: (1)输入测试图像: ...

  3. object detection技术演进:RCNN、Fast RCNN、Faster RCNN

    object detection我的理解,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别.object detection要解决的问题就是物体在哪里,是什么这整个流程的问题.然而,这个问题 ...

  4. 基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN

    object detection我的理解,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别.object detection要解决的问题就是物体在哪里,是什么这整个流程的问题.然而,这个问题 ...

  5. 目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN

    看到一篇循序渐进讲R-CNN.Fast R-CNN.Faster R-CNN演进的博文,写得非常好,摘入于此,方便查找和阅读. object detection,就是在给定的图片中精确找到物体所在位置 ...

  6. RCNN,fast R-CNN,faster R-CNN

    转自:https://www.cnblogs.com/skyfsm/p/6806246.html object detection我的理解,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别. ...

  7. (转)基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN

    object detection我的理解,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别.object detection要解决的问题就是物体在哪里,是什么这整个流程的问题.然而,这个问题 ...

  8. 基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN,Faster R-CNN

    基于深度学习的目标检测技术演进:R-CNN.Fast R-CNN,Faster R-CNN object detection我的理解,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别.obj ...

  9. R-CNN, Fast R-CNN, Faster R-CNN, Mask R-CNN

    最近在看 Mask R-CNN, 这个分割算法是基于 Faster R-CNN 的,决定看一下这个 R-CNN 系列论文,好好理一下 R-CNN 2014 1. 论文 Rich feature hie ...

随机推荐

  1. 删除重复Row记录数据

    使用CTE,ROW_NUMBER,PARTITION BY来处理数据表重复记录. 先准备下面的数据: IF OBJECT_ID('tempdb.dbo.#Part') IS NOT NULL DROP ...

  2. uoj#311. 【UNR #2】积劳成疾(期望dp)

    传送门 果然\(dp\)题就没咱啥事儿了 设\(f_{i,j}\)为长度为\(i\)的区间,所有元素的值不超过\(j\)的总的疲劳值 如果\(j\)没有出现过,那么\(f_{i,j}=f_{i,j-1 ...

  3. uoj#228. 基础数据结构练习题(线段树)

    传送门 只有区间加区间开方我都会--然而加在一起我就gg了-- 然后这题的做法就是对于区间加直接打标记,对于区间开方,如果这个区间的最大值等于最小值就直接区间覆盖(据ljh_2000大佬说这个区间覆盖 ...

  4. 剑指Offer的学习笔记(C#篇)-- 矩形覆盖

    题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 一 . 解题思路 这个貌似就是普通的跳台阶问题. 二 . 代 ...

  5. Java基础笔记(一)——JDK、JRE、JVM

    JDK.JRE和JVM三者的关系 Java程序执行过程 JVM(java virtual machine) 注:由于各种操作系统(windows.linux等)支持的指令集(二进制可执行代码)不同,程 ...

  6. 蓝桥校内选拔赛B题(不一定正确)

    由于没报名,只能靠别人发的截图来做了 我的思路:全排列,判断加号位置,判断/位置,看是否存在这个相等的 时间复杂度较高,在10e8左右 代码: #include<cstdio> #incl ...

  7. Http请求数据解释

    请求的数据里面包含三个部分内容 : 请求行 . 请求头 .请求体 请求行 POST /examples/servlets/servlet/RequestParamExample HTTP/1.1 PO ...

  8. HDU 1087 E - Super Jumping! Jumping! Jumping! DP

    http://acm.hdu.edu.cn/showproblem.php?pid=1087 设dp[i]表示去到这个位置时的最大和值.(就是以第i个为结尾的时候的最大值) 那么只要扫描一遍dp数组, ...

  9. Spark Mllib里的本地矩阵概念、构成(图文详解)

    不多说,直接上干货! Local matrix:本地矩阵 数组Array(1,2,3,4,5,6)被重组成一个新的2行3列的矩阵. testMatrix.scala package zhouls.bi ...

  10. 多线程----Thread类,Runnable接口,线程池,Callable接口,线程安全

    1概念 1.1进程 进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 任务管理器中: 1.2线程 线程是进程中的一个执行单元 ...