论文阅读笔记三十五:R-FCN:Object Detection via Region-based Fully Convolutional Networks(CVPR2016)
论文源址: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)的更多相关文章
- 论文阅读笔记四十五:Region Proposal by Guided Anchoring(CVPR2019)
论文原址:https://arxiv.org/abs/1901.03278 github:code will be available 摘要 区域anchor是现阶段目标检测方法的重要基石.大多数好的 ...
- 论文阅读笔记三十四:DSSD: Deconvolutiona lSingle Shot Detector(CVPR2017)
论文源址:https://arxiv.org/abs/1701.06659 开源代码:https://github.com/MTCloudVision/mxnet-dssd 摘要 DSSD主要是向目标 ...
- 论文阅读笔记三十九:Accurate Single Stage Detector Using Recurrent Rolling Convolution(RRC CVPR2017)
论文源址:https://arxiv.org/abs/1704.05776 开源代码:https://github.com/xiaohaoChen/rrc_detection 摘要 大多数目标检测及定 ...
- 论文阅读笔记三十八:Deformable Convolutional Networks(ECCV2017)
论文源址:https://arxiv.org/abs/1703.06211 开源项目:https://github.com/msracver/Deformable-ConvNets 摘要 卷积神经网络 ...
- 论文阅读笔记七: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 ...
- 论文阅读笔记三十六:Mask R-CNN(CVPR2017)
论文源址:https://arxiv.org/pdf/1703.06870.pdf 开源代码:https://github.com/matterport/Mask_RCNN 摘要 Mask R-CNN ...
- 论文阅读笔记三十:One pixel attack for fooling deep neural networks(CVPR2017)
论文源址:https://arxiv.org/abs/1710.08864 tensorflow代码: https://github.com/Hyperparticle/one-pixel-attac ...
- 论文阅读笔记二十五:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition(SPPNet CVPR2014)
论文源址:https://arxiv.org/abs/1406.4729 tensorflow相关代码:https://github.com/peace195/sppnet 摘要 深度卷积网络需要输入 ...
- 论文阅读笔记三十二:YOLOv3: An Incremental Improvement
论文源址:https://pjreddie.com/media/files/papers/YOLOv3.pdf 代码:https://github.com/qqwweee/keras-yolo3 摘要 ...
随机推荐
- shell编程 之 引号、括号的用法总结
1 单引号 a=1 b='a string' 单引号屏蔽各种特殊字符.echo ‘$a " % \n ' 只能得到 $a " % \n 单引号可以指明界限,防止由分隔符----空格 ...
- 【运维】略谈Raid级别
*何为Raid? Raid就是磁盘阵列(Redundant Arrays of Independent Disks,RAID),有"独立磁盘构成的具有冗余能力的阵列&quo ...
- Python全栈(第一部分)day3
昨日内容回顾 格式化输出 %s %d %% 编码 ascii: 只能显示英文,特殊字符,数字 万国码unicode: 最开始16位,中文不够,用32位,占用4个字节 升级: utf-8 utf-16 ...
- python 十大web框架排名总结
0 引言 python在web开发方面有着广泛的应用.鉴于各种各样的框架,对于开发者来说如何选择将成为一个问题.为此,我特此对比较常见的几种框架从性能.使用感受以及应用情况进行一个粗略的分析. 1 D ...
- Kafka监控KafkaOffsetMonitor【转】
1.概述 前面给大家介绍了Kafka的背景以及一些应用场景,并附带上演示了Kafka的简单示例.然后,在开发的过程当中,我们会发现一些问题,那就是消息的监控情况.虽然,在启动Kafka的相关服务后,我 ...
- python之async-timeout模块
async-timeout 兼容async的超时的上下文管理器 async-timeout的timeout和asyncio的wiat_for比较 首先从使用上来说asyncio.wait_for(aw ...
- 设计模式C++学习笔记之六(Facade门面模式)
Facade门面模式,也是比较常用的一种模式,基本上所有软件系统中都会用到. GOF 在<设计模式>一书中给出如下定义:为子系统中的一组接口提供一个一致的界面, Facade 模式定义 ...
- latex中的希腊字母
原文地址:http://blog.csdn.net/xxzhangx/article/details/52778539 希腊字母,我们从小学开始认识它,但对它的读音我依旧靠蒙(说蒙真的感觉好羞愧啊). ...
- ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)
背景 老生常谈,为sql当时着迷了,啥都用sql解决.看这个语句,麻烦的. ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) 简单的说row ...
- Alpha 冲刺 (2/10)
目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:拿快递也不能耽搁了软工 团队部分 后敬甲(组长) 过去两天完成了哪些任务 文字描述 github代码管理规范 商家端订单 ...