论文源址: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. Hibernate Transformers之三种结果转换说明

    在hibernate使用的过程中,我们通常需要对结果进行解释.Hibernate为我们提供了以下3种查询结果解释方法: Transformers.ALIAS_TO_ENTITY_MAP //把输出结果 ...

  2. Javascript - ExtJs - 其它

    组件通用配置 width:number | "%" //宽   height:number | "%" //高   autoEl:string | Json / ...

  3. ajax传递数组,后台更新

    js: var rows = $("#stu_reg_table").datagrid("getSelections"); if(rows != "& ...

  4. Django中的信号基础知识

    Django中提供了“信号调度”,用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. 1.Django内置信号 1 2 3 4 5 6 7 8 9 10 ...

  5. EasyGui的一个小例子

    EasyGui的安装:首先下载easyGui安装包,地址链接:https://pan.baidu.com/s/1D8f_eXWn7l8xhcTuEsqZmA 密码:e5z5 安装步骤: 1.进入eas ...

  6. 20145215《网络对抗》Exp4 恶意代码分析

    20145215<网络对抗>Exp4 恶意代码分析 基础问题回答 如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用 ...

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

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

  8. go byte 和 string 类型之间转换

    string 不能直接和byte数组转换 string可以和byte的切片转换 1,string 转为[]byte var str string = "test" var data ...

  9. awk输出单引号,双引号【转】

    双引号: awk '{print "\""}'        #放大:awk '{print "  \"  "}' 使用“”双引号把一个双引 ...

  10. JQuery 拾遗

    jquery基本上依赖百度,不熟悉的jquery操作记录于此: 1.判断元素的显示隐藏:$("#XXX").is(':visible'). 2. jquery取所有属性以什么开头 ...