【转】目标检测方法——R-FCN

目录

  • 作者及相关链接
  • 方法概括
  • 方法细节
  • 实验结果
  • 总结
  • 参考文献

作者及相关链接

  • 作者:

方法概括

  • R-FCN解决问题——目标检测

  • 整个R-FCN的结构

    • 一个base的conv网络如ResNet101, 一个RPN(Faster RCNN来的),一个position sensitive的prediction层,最后的ROI pooling+投票的决策层

  • R-FCN的idea出发点(关键思想)

    • 分类需要特征具有平移不变性,检测则要求对目标的平移做出准确响应。现在的大部分CNN在分类上可以做的很好,但用在检测上效果不佳。SPP,Faster R-CNN类的方法在ROI pooling前都是卷积,是具备平移不变性的,但一旦插入ROI pooling之后,后面的网络结构就不再具备平移不变性了。因此,本文想提出来的position sensitive score map这个概念是能把目标的位置信息融合进ROI pooling。

    • 对于region-based的检测方法,以Faster R-CNN为例,实际上是分成了几个subnetwork,第一个用来在整张图上做比较耗时的conv,这些操作与region无关,是计算共享的。第二个subnetwork是用来产生候选的boundingbox(如RPN),第三个subnetwork用来分类或进一步对box进行regression(如Fast RCNN),这个subnetwork和region是有关系的,必须每个region单独跑网络,衔接在这个subnetwork和前两个subnetwork中间的就是ROI pooling。我们希望的是,耗时的卷积都尽量移到前面共享的subnetwork上。因此,和Faster RCNN中用的ResNet(前91层共享,插入ROI pooling,后10层不共享)策略不同,本文把所有的101层都放在了前面共享的subnetwork。最后用来prediction的卷积只有1层,大大减少了计算量。

方法细节

  • Backbone architecture: ResNet 101——去掉原始ResNet101的最后一层全连接层,保留前100层,再接一个1*1*1024的全卷积层(100层输出是2048,为了降维,再引入了一个1*1的卷积层)。
  • k^2(C+1)的conv: ResNet101的输出是W*H*1024,用K^2(C+1)个1024*1*1的卷积核去卷积即可得到K^2(C+1)个大小为W*H的position sensitive的score map。这步的卷积操作就是在做prediction。k = 3,表示把一个ROI划分成3*3,对应的9个位置分别是:上左(左上角),上中,上右,中左,中中,中右,下左,下中,下右(右下角),如图Figuire 3。

  • k^2(C+1)个feature map的物理意义: 共有k*k = 9个颜色,每个颜色的立体块(W*H*(C+1))表示的是不同位置存在目标的概率值(第一块黄色表示的是左上角位置,最后一块淡蓝色表示的是右下角位置)。共有k^2*(C+1)个feature map。每个feature map,z(i,j,c)是第i+k(j-1)个立体块上的第c个map(1<= i,j <=3)。(i,j)决定了9种位置的某一种位置,假设为左上角位置(i=j=1),c决定了哪一类,假设为person类。在z(i,j,c)这个feature map上的某一个像素的位置是(x,y),像素值是value,则value表示的是原图对应的(x,y)这个位置上可能是人(c=‘person’)且是人的左上部位(i=j=1)的概率值。
  • ROI pooling: 就是faster RCNN中的ROI pooling,也就是一层的SPP结构。主要用来将不同大小的ROI对应的feature map映射成同样维度的特征,思路是不论对多大的ROI,规定在上面画一个n*n 个bin的网格,每个网格里的所有像素值做一个pooling(平均),这样不论图像多大,pooling后的ROI特征维度都是n*n。注意一点ROI pooling是每个feature map单独做,不是多个channel一起的。
  • ROI pooling的输入和输出:ROI pooling操作的输入(对于C+1个类)是k^2*(C+1)*W‘ *H‘(W‘和H‘是ROI的宽度和高度)的score map上某ROI对应的那个立体块,且该立体块组成一个新的k^2*(C+1)*W‘ *H‘的立体块:每个颜色的立体块(C+1)都只抠出对应位置的一个bin,把这k*k个bin组成新的立体块,大小为(C+1)*W‘*H‘。例如,下图中的第一块黄色只取左上角的bin,最后一块淡蓝色只取右下角的bin。所有的bin重新组合后就变成了类似右图的那个薄的立体块(图中的这个是池化后的输出,即每个面上的每个bin上已经是一个像素。池化前这个bin对应的是一个区域,是多个像素)。ROI pooling的输出为为一个(C+1)*k*k的立体块,如下图中的右图。更详细的有关ROI pooling的操作如公式(1)所示:

  

  • vote投票:k*k个bin直接进行求和(每个类单独做)得到每一类的score,并进行softmax得到每类的最终得分,并用于计算损失

  • 损失函数:和faster RCNN类似,由分类loss和回归loss组成,分类用交叉熵损失(log loss),回归用L1-smooth损失

  • 训练的样本选择策略:online hard example mining (OHEM,参考文献1) 。主要思想就是对样本按loss进行排序,选择前面loss较小的,这个策略主要用来对负样本进行筛选,使得正负样本更加平衡。
  • 训练细节:

    • decay = 0.0005
    • momentum = 0.9
    • single-scale training: images are resized such that the scale (shorter side of image) is 600 pixels [6, 18].
    • 8 GPUs (so the effective mini-batch size is 8×), each GPU holds 1 image and selects B = 128 RoIs for backprop.
    • fine-tune learning rate = 0.001 for 20k mini-batches,  0.0001 for 10k mini-batches on VOC.
    • the 4-step alternating training between training RPN and training R-FCN.(类似于Faster RCNN)
    • 使用atrous(hole算法)

实验结果

  • VOC2007和VOC2010上与Faster R-CNN的对比:R-FCN比Faster RCNN好!

  • 深度影响对比:101深度最好!

  • 候选区域选择算法对比:RPN比SS,EB好!

  • COCO库上与Faster R-CNN的对比:R-FCN比Faster RCNN好!

  • 效果示例:

总结

  • R-FCN是在Faster R-CNN的框架上进行改造,第一,把base的VGG16换车了ResNet,第二,把Fast R-CNN换成了先用卷积做prediction,再进行ROI pooling。由于ROI pooling会丢失位置信息,故在pooling前加入位置信息,即指定不同score map是负责检测目标的不同位置。pooling后把不同位置得到的score map进行组合就能复现原来的位置信息。

参考文献

  1. http://www.cnblogs.com/lillylin/p/6277094.html
时间: 2024-08-01 10:36:20

【转】目标检测方法——R-FCN的相关文章

CVPR2019目标检测方法进展综述

CVPR2019目标检测方法进展综述 置顶 2019年03月20日 14:14:04 SIGAI_csdn 阅读数 5869更多 分类专栏: 机器学习 人工智能 AI SIGAI 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/SIGAI_CSDN/article/details/88687747 SIGAI特约作者 陈泰红研究方向:机器学习.图像处理 目标检测是很多计算机视觉应用的基础,

目标检测方法——SSD

SSD论文阅读(Wei Liu--[ECCV2016]SSD Single Shot MultiBox Detector) 目录 作者 文章的选择原因 方法概括 方法细节 相关背景补充 实验结果 与相关文章的对比 总结 作者 文章的选择原因 性能好,single stage 方法概括 文章的方法介绍 SSD主要用来解决目标检测的问题(定位+分类),即输入一张待测图像,输出多个box的位置信息和类别信息 测试时,输入一张图像到SSD中,网络输出一个下图最右边的tensor(多维矩阵),对该矩阵进行

目标检测方法__第一版

这篇写在两年前!!! 目标检测问题,对应英文:Target Detection 下面是解决这类问题的state-of-the-art方法的基本介绍: https://www.zhihu.com/question/34223049 https://zhuanlan.zhihu.com/p/21533724 http://zhangliliang.com/2015/05/19/paper-note-object-proposal-review-pami15/ http://people.eecs.b

传统目标检测方法的比较

· 适用范围 优点 缺点 帧 差 法 (1)摄像头固定场景: (2)实时性要求高: (3)目标的信息要求不高: (1)对运动目标敏感: (2)计算简单: (3)检测速度快.实时性高: (1)光线变化快时,算法失效: (2)缓慢运动和背景颜色一致时不能提取出特征像素点: (3)相邻帧之间目标重叠部分不能检测来: 背 景 减 除 法 (1)摄像头固定: (2)实时性要求不高: (3)目标信息要求高: (1)速度快,检测准确,易于实现, (2)能够达到实时检测视频中运动物体的要求 (3)轮廓完整,信息

基于深度学习的目标检测

普通的深度学习监督算法主要是用来做分类,如图1(1)所示,分类的目标是要识别出图中所示是一只猫.而在ILSVRC(ImageNet Large Scale Visual Recognition Challenge)竞赛以及实际的应用中,还包括目标定位和目标检测等任务.其中目标定位是不仅仅要识别出来是什么物体(即分类),而且还要预测物体的位置,位置一般用边框(bounding box)标记,如图1(2)所示.而目标检测实质是多目标的定位,即要在图片中定位多个目标物体,包括分类和定位.比如对图1(3

R-CNN,SPP-NET, Fast-R-CNN,Faster-R-CNN, YOLO, SSD系列深度学习检测方法梳理

1. R-CNN:Rich feature hierarchies for accurate object detection and semantic segmentation 技术路线:selective search + CNN + SVMs Step1:候选框提取(selective search) 训练:给定一张图片,利用seletive search方法从中提取出2000个候选框.由于候选框大小不一,考虑到后续CNN要求输入的图片大小统一,将2000个候选框全部resize到227*

第二十八节、基于深度学习的目标检测算法的综述

在前面几节中,我们已经介绍了什么是目标检测,以及如何进行目标检测,还提及了滑动窗口,bounding box.以及IOU,非极大值抑制等概念. 这里将会综述一下当前目标检测的研究成果,并对几个经典的目标检测算法进行概述,本文内容来自基于深度学习的目标检测,在后面几节里,会具体讲解每一种方法. 在深度度学习的目标检测算法兴起之前,传统的目标检测算法是怎样的呢? 传统的目标检测一般使用滑动窗口的框架,主要包括三个步骤: 利用不同尺寸的滑动窗口框住图中的某一部分作为候选区域: 提取候选区域相关的视觉特

第十八节、基于传统图像处理的目标检测与识别(HOG+SVM附代码)

其实在深度学习分类中我们已经介绍了目标检测和目标识别的概念.为了照顾一些没有学过深度学习的童鞋,这里我重新说明一次:目标检测是用来确定图像上某个区域是否有我们要识别的对象,目标识别是用来判断图片上这个对象是什么.识别通常只处理已经检测到对象的区域,例如,人们总是会使在已有的人脸图像的区域去识别人脸. 传统的目标检测方法与识别不同于深度学习方法,后者主要利用神经网络来实现分类和回归问题.在这里我们主要介绍如何利用OpecnCv来实现传统目标检测和识别,在计算机视觉中有很多目标检测和识别的技术,这里

关于目标检测

目标检测 Region based network RCNN 一张图像生成1K~2K个候选区域 对每个候选区域,使用深度网络提取特征 特征送入每一类的SVM 分类器,判别是否属于该类 使用回归器精细修正候选框位置 Selective Search 候选框生成 传统的生成方法,就是检测就是不同大小的滑动窗进行穷举,然后使用分类器判断哪个滑动窗是目标.而SS根据颜色,纹理之类的信息去把图片划分成不同区域可以相对于穷举搜索大量减少计算量,是简单的搜索剪枝思路.通过简单的区域划分算法,将图片划分成很多小