论文源址:https://arxiv.org/abs/1605.06409

开源代码:https://github.com/PureDiors/pytorch_RFCN

摘要

提出了基于区域的全卷积网络,用于精确高效的目标检测,相比于基于区域的检测器(Fast/Faster R-CNN),这些检测器重复的在子区域进行数百次计算,而本文在整张图像上进行共享计算。因此,本文提出了基于位置敏感分数图用于解决图像分类中的平移不变性及目标检测中的平移可变性之间的矛盾。将图像分类网络处理为全卷积网络用于目标检测。

介绍

目标检测的网络可以被RoI pooling划分为两部分,(1)独立于RoIs的共享的全卷积子网络。(2)不共享计算的RoI子网络。这种形式的拆分在历史上是开创性分类结构的结果,像AlexNet,VGG等包含两个子网络。包含一个结尾为空间池化层的卷积子网络,另一部分为后接的全连接层。因此,图像分类网络中的最后一个空间池化层自然变为目标检测网络中的RoI pooling层。

效果较好的分类网络如,ResNet及GoogleNet等为全卷积层进行分类。相类似的,在目标检测网络中使用全卷积层构建共享的卷积子网络。使RoI子网络没有隐藏层。但实验发现,这种解决方案得到的检测精度十分低,与分类网络较高的准确度十分不匹配。为了解决此问题,Faster R-CNN中将RoI pooling非自然的插入在两个卷积层之间,提高了RoI子网络的深度,同时提高了精度,但由于每个Roi并非是共享计算的,因此,运行速度较慢。

本文认为上面的设计的不合理主要是由于图像分类中增加的平移不变性,而目标检测中的重视平移带来的变化二者之间的矛盾。一方面,图像级别的分类更偏向于平移不变性,图像中物体的移动并不影响分类结果的判定。因此,深度卷积网络结构最后尽可能的具有平移不变性。另一方面,目标检测的任务需要在一定程度上可以表示平移的变化。而分类网络中的深度卷积网络具有平移不变性。为了解决此问题,基于ResNet的检测网络在卷积层中插入RoI pooling层。区域确定操作打破了分类网络的平移不变性。当评估不同的区域时,后面的RoI层不再具有平移不变性。但这种设计引入大量的region-wise网络层,因此不利于训练及测试的效率。如下图。

本文提出了一个基于区域的全卷积网络(R-FCN)用于目标检测,网络包含共享的全卷积结构。为了将平移变化引入FCN,利用一组特殊的卷积层作为FCN的输出,构造了一系列对位置较为敏感的得分图。每个score map都针对相对空间位置信息进行编码。在FCN的顶部添加了一个对位置敏感的RoI池化层,用于处理从score map得到的信息。整个网络可学习的层为在整张图片上的共享卷积及编码用于目标检测的空间位置信息。网络结构如下

本文基于ResNet-101的backbone,R-FCN在PASCAL VOC2007上得到的结果为83.6%,在2012上得到的结果为82%.同时,速度要比基于ResNet-101的Faster R-CNN快2.5至20倍,实验证明本文方法可以很好的解决平移中的变化。基于全卷积的图像分类网络ResNet可以有效的被处理成全卷积网络用于目标检测。

 本文方法

本文采用两阶段的目标检测策略:(i)region proposal(ii)region classification 虽然存在不依赖于region proposal的方法,但基于区域的方法仍然是效果最好的。本文通过全卷积网络RPN提取候选区域,本文在RPN及R-FCN网络之间共享特征。如下图所示。

给定proposal regions,R-FCN的结构用于对RoI分类为目标类别及背景。R-FCN中,带有可学习权重的层只有在整张图片中的共享卷积。最后一层卷积输出一系列针对每个类别的大小为kxk 位置敏感的score maps,因此会有kxkx(c+1)维的输出。kxk的score map与一个描述相对位置的kxk的空间格子相对应。(大小为3x3,9个score maps编码一个目标的9种情况{top-left,top-center,top-right,....,botton-right})

R-FCN以位置敏感的RoI pooling 层结束。这一层聚合最后一层卷积层的输出,同时对每个RoI生成score.我们的位置敏感RoI层进行选择池化操作,每个大小为kxk的bin。每个大小为kxk的格子聚合来自一个score map中的响应。当进行端到端的训练时,RoI 层引导最后一层卷积来学习明确的位置敏感score maps。

backbone architecture:R-FCN基于ResNet-101,ResNet-101具有100层卷积层+全局平均池化层+1000个类别的全连接层。本文只用到了ResNet-101中的卷积层。在卷积层中应用空洞卷积,及在ImageNet上进行预训练。ResNet的最后一个卷积block为2048维。本文增加了一个1024x1x1的卷积层用于将为。然后使用kxkx(c+1)通道的卷积层生成score maps。

位置敏感 score maps及位置敏感RoI Pooling:为了编码每个RoI的位置信息。将每个ROI矩形框分为kxk个bins。对于一个大小为wxh的矩形框。一个格子的大小为,本文最后一层卷积层针对每个类别生成kxk个score maps。在第(i,j)个格子,定义一个roi pooling 操作用于池化第(i,j)个score map。kxk的位置敏感score 在RoI上进行投票。通过平均的scores进行投票。对于每个RoI产生一个(C+1)维的向量, 然后计算每个类别的softmax响应,基于交叉熵损失进行评估。

本文以一种相似的方式进行框回归。 基于kxkx(C+1)维的卷积层,增加了一个4xkxk维的卷积层用于进行框回归。对于每个RoI生成一个4xkxk维的向量。通过平均通票最终得到一个4维的参数向量,代表边界框

训练:损失函数定义为每个RoI框回归的交叉熵损失,c*代表RoI的ground -truth 标记,为类别交叉熵损失。将正样本定义为IOU大于0.5,其余的定义为负样本。假设一张图中 存在N个proposal。计算propsoal的损失,将其排序,选取排序最高的B个RoIs。对挑选的样本进行反向传播。

测试:推理后的结果基于NMS进行处理,阈值设置为0.3.

空洞卷积及stride:将ResNet-101的stride从32变为16像素,增大score map的分辨率。在conv5 block中执行stride=2变为stride=1。所有conv5的卷积核用空洞算法进行替换。结果如下。

实验

Reference

[1] S. Bell, C. L. Zitnick, K. Bala, and R. Girshick. Inside-outside net: Detecting objects in context with skip pooling and recurrent neural networks. In CVPR, 2016.

[2] L.-C. Chen, G. Papandreou, I. Kokkinos, K. Murphy, and A. L. Yuille. Semantic image segmentation with deep convolutional nets and fully connected crfs. In ICLR, 2015.

[3] J.Dai,K.He,Y.Li,S.Ren,andJ.Sun. Instance-sensitivefullyconvolutionalnetworks. arXiv:1603.08678, 2016.

[4] D. Erhan, C. Szegedy, A. Toshev, and D. Anguelov. Scalable object detection using deep neural networks. In CVPR, 2014.

论文阅读笔记三十五:R-FCN:Object Detection via Region-based Fully Convolutional Networks(CVPR2016)的更多相关文章

  1. 论文阅读笔记四十五:Region Proposal by Guided Anchoring(CVPR2019)

    论文原址:https://arxiv.org/abs/1901.03278 github:code will be available 摘要 区域anchor是现阶段目标检测方法的重要基石.大多数好的 ...

  2. 论文阅读笔记三十四:DSSD: Deconvolutiona lSingle Shot Detector(CVPR2017)

    论文源址:https://arxiv.org/abs/1701.06659 开源代码:https://github.com/MTCloudVision/mxnet-dssd 摘要 DSSD主要是向目标 ...

  3. 论文阅读笔记三十九:Accurate Single Stage Detector Using Recurrent Rolling Convolution(RRC CVPR2017)

    论文源址:https://arxiv.org/abs/1704.05776 开源代码:https://github.com/xiaohaoChen/rrc_detection 摘要 大多数目标检测及定 ...

  4. 论文阅读笔记三十八:Deformable Convolutional Networks(ECCV2017)

    论文源址:https://arxiv.org/abs/1703.06211 开源项目:https://github.com/msracver/Deformable-ConvNets 摘要 卷积神经网络 ...

  5. 论文阅读笔记七:Structure Inference Network:Object Detection Using Scene-Level Context and Instance-Level Relationships(CVPR2018)

    结构推理网络:基于场景级与实例级目标检测 原文链接:https://arxiv.org/abs/1807.00119 代码链接:https://github.com/choasup/SIN Yong ...

  6. 论文阅读笔记三十六:Mask R-CNN(CVPR2017)

    论文源址:https://arxiv.org/pdf/1703.06870.pdf 开源代码:https://github.com/matterport/Mask_RCNN 摘要 Mask R-CNN ...

  7. 论文阅读笔记三十:One pixel attack for fooling deep neural networks(CVPR2017)

    论文源址:https://arxiv.org/abs/1710.08864 tensorflow代码: https://github.com/Hyperparticle/one-pixel-attac ...

  8. 论文阅读笔记二十五:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition(SPPNet CVPR2014)

    论文源址:https://arxiv.org/abs/1406.4729 tensorflow相关代码:https://github.com/peace195/sppnet 摘要 深度卷积网络需要输入 ...

  9. 论文阅读笔记三十二:YOLOv3: An Incremental Improvement

    论文源址:https://pjreddie.com/media/files/papers/YOLOv3.pdf 代码:https://github.com/qqwweee/keras-yolo3 摘要 ...

随机推荐

  1. linux下安装oh-my-zsh

    如果是linux 系统,首先你需要安装 zsh sudo yum install zsh 或者 sudo apt-get install zsh 接下来我们需要下载 oh-my-zsh 项目来帮我们配 ...

  2. SpringSocial业务系统与社交网站的绑定与解绑

    SpringSocial提供了了以下三个服务,我们要做的仅仅是调用它们的服务,但是SpringSocial仅仅只提供了数据,没有提供视图 ⒈拿到所有社交网站与业务系统的绑定信息 SpringSocia ...

  3. Cascade R-CNN论文讲解(转载)

    转载链接:https://blog.csdn.net/qq_21949357/article/details/80046867 论文思想:为了解决IOU设置带来的最终的AP值,作者引入了cascade ...

  4. for循环查找元素怎么跳出for循环

    应用场景: 当我们通过for循环来循环对象或者数组时,当找到符合条件的数据时,想要跳出这个循环,不在执行循环继续往后面查找. 解决方法: for循环里面使用return没有效果,于是,我们回到最初控制 ...

  5. python3+selenium入门10-表单切换

    当元素在ifarm或farm中时,需要先进入到表单中,然后才能定位元素进行操作.直接对元素定位.会提示元素无法找到. <!DOCTYPE html> <html> <he ...

  6. 前端跨域问题的总结&&nodejs 中间层的路由转发

    前后端交互的时候,跨域是避不开的问题. 总结就是如下: 1.Cors 我在做前后端分离的时候,会采用cors 的方法:便于其他源的调用接口,这个可以设置成任意的源头,也可以允许指定的源头. 下面的是n ...

  7. 缓存系列之二:CDN与其他层面缓存

    缓存系列之二:CDN与其他层面缓存 一:内容分发网络(Content Delivery Network),通过将服务内容分发至全网加速节点,利用全球调度系统使用户能够就近获取,有效降低访问延迟,提升服 ...

  8. Java实现三大简单排序算法

    一.选择排序 public static void main(String[] args) { int[] nums = {1,2,8,4,6,7,3,6,4,9}; for (int i=0; i& ...

  9. 阿里云服务器ubuntu 配置

    由于阿里云的导入自定义 ubuntu 镜像需要开通 OSS 快照是收费的(看着感觉不贵,但是也很麻烦),而且自己已配置好的镜像想导入需要转换格式,还存在不能使用的情况,所以麻烦点直接在阿里云原来的ub ...

  10. ajax请求封装的公共方法

    /** * post 方法 */ function ajaxPost(url, params, callBack) { ajax(url,params,"post",callBac ...