目标检测——R-FCN算法解读

news2024/11/17 13:29:57

论文:R-FCN: Object Detection via Region-based Fully Convolutional Networks
作者:Jifeng Dai, Yi Li, Kaiming He and Jian Sun
链接:https://arxiv.org/pdf/1605.06409v2.pdf
代码:https://github.com/daijifeng001/r-fcn

文章目录

  • 1、算法概述
  • 2、R-FCN细节
  • 3、实验结果

1、算法概述

之前基于区域的目标检测方法,像Fast/Faster R-CNN虽然在提取区域特征这部分做了共享,但基于子区域的分类和回归部分,还没有达到计算共享,几百个候选框,依然需要做几百次分类和回归操作,这大大消耗了推理时间。本文所提基于区域的检测器是全部采用卷积操作,几乎所有的计算都是在整个图像上共享的,为了实现所有操作共享这一目的,作者提出了位置敏感的分数图来解决图像分类中的平移不变性(translation-invariance)和目标检测中的平移敏感(translation-variance)之间的矛盾。作者以ResNet101作为主干,在VOC 2007测试集上能达到 83.6%的mAP。推理时间为每张图片170ms,是Faster R-CNN的2.5到20倍。

2、R-FCN细节

先说之前的基于区域候选框的目标检测算法,它们可看作以RoI pooling层为切入点将整个网络分为两个子网络(subnetworks),前部分子网络为RoI Pooling之前的共享计算的全卷积子网络,后一部分为RoI-wise的子网络(全连接层),它们不共享计算。这主要是由于前期采用的经典分类网络就是卷积+全连接这样的设计结构造成的。现在例如ResNets和GoogLeNets都被设计成了全卷积网络,类比到目标检测网络,是不是也可以将后部分的RoI-wise子网络层替换成全卷积网络?

要想分类得比较准,那就要网络学习到平移不变性,即目标从图像左边平移到右边,该目标的类别还是一样,即对位置不敏感;但对于回归任务,又要网络学习到平移可变性,让网络对位置敏感,这样才能保证网络对于目标从图像左边平移到右边后能正确预测到平移后目标的位置。要同时满足这两点,Faster RCNN通过插入RoI Pooling层实现了,但RoI Pooling带有位置截断属性,经过RoI截取后,RoI对目标的感受野也被截断了,相同的目标经过RoI Pooling层后可能得到不同的类别。结合网络越深能提取到越高层特征的特性,若RoI pooling越靠近网络前部,则会导致分类不准确,若RoI Pooling约靠近网络后部,则会导致回归不准确。

由于卷积神经网络擅长提取图像特征,但是对特征所处的位置不太敏感,所以作者在网络中增加了位置敏感因素,使得全卷积网络对目标的位置具有敏感特性。R-FCN的整体结构如下:
在这里插入图片描述
在这里插入图片描述
可以看到R-FCN,主体结构还是和Faster R-CNN大体上类似的,只是RoI Pooling这里做了一些变化,另外R-FCN也将Faster R-CNN的RoI-wise部分全部换成了卷积操作,使得基于区域的分类/回归任务都可以共享计算。对比效果如下表:
在这里插入图片描述

  • Backbone architecture
    R-FCN主干网络采用ResNet-101,它包含前面100层的卷积层加global average pooling层和1000类的fc层,作者只用了前面100层卷积层作为提取特征,最后一个卷积层输出是2048维,作者用了一个随机初始化的1024维的1x1卷积层作了降维处理,然后用了k*k(C+1)通道的卷积层用来生成分数图。
  • Position-sensitive score maps & Position-sensitive RoI pooling
    为了显式地将位置信息编码到每个RoI中,作者通过网格将每个RoI矩形划分为k * k个网络格子。对于w * h的RoI区域,每个网格大小为w/k * h/k。作者通过最后一个卷积层将每个类别映射成k * k个分数图。对第(i,j)个网络(0<=i,j<=k-1),定义一个位置敏感RoI池化操作为:
    在这里插入图片描述
  • 分类
    对该RoI每类的所有相对空间位置的分数取平均或者投票得到
    在这里插入图片描述
    然后通过softmax做分类
    在这里插入图片描述
  • Bounding-box回归
    也是采用类似分类的方法,通过最后一个卷积层使得每个RoI产生4k2维向量,经过投票后,用Fast R-CNN的参数化得到1个4维向量(tx,ty,tw,th)。

3、实验结果

作者在VOC2007,VOC2012上测试结果如下:
在这里插入图片描述
可以看到,在mAP指标上,相对于Faster R-CNN,没有掉点,但是在推理速度上提升很大。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1303266.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【开源】基于Vue和SpringBoot的森林火灾预警系统

项目编号&#xff1a; S 019 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S019&#xff0c;文末获取源码。} 项目编号&#xff1a;S019&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 系统基础模块2.3 烟…

CodeGeeX发布HBuilderX插件,助力VUE开发效率提升

北京时间2023年12月8日&#xff0c;CodeGeeX正式发布了适配国产IDE平台HBuilderX的插件。这款插件的推出&#xff0c;使得使用HBuilderX作为开发环境的程序员可以在IDE和AI辅助编程工具之间做出选择。 CodeGeeX&#xff1a;基于大模型的AI智能编程助理 CodeGeeX是一款基于大模…

Hbase2.5.5分布式部署安装记录

文章目录 1 环境准备1.1 节点部署情况1.2 安装说明 2 Hbase安装过程Step1&#xff1a;Step2:Step3:Step4&#xff1a; 3 Web UI检查状态并测试3.1 Web UI3.2 创建测试命名空间 1 环境准备 1.1 节点部署情况 Hadoop11&#xff1a;Hadoop3.1.4 、 zookeeper3.4.6、jdk8 Hadoop1…

【JavaWeb学习专栏 | CSS篇】css简单介绍 css常用选择器集锦

个人主页&#xff1a;[兜里有颗棉花糖(https://xiaofeizhu.blog.csdn.net/) 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【JavaWeb学习专栏】【Java系列】 希望本文内容可以帮助到大家&#xff0c;一起加油吧&#xff01;…

IP与以太网的转发操作

TCP模块在执行连接、收发、断开等各阶段操作时&#xff0c;都需要委托IP模块将数据封装成包发送给通信对象。 网络中有路由器和集线器两种不同的转发设备&#xff0c;它们在传输网络包时有着各自的分工。 (1)路由器根据目标地址判断下一个路由器的位置 (2)集线器在子网中将网…

Redis为什么是单线程的?

Redis为什么是单线程的&#xff1f; 1.代码更清晰&#xff0c;处理逻辑更简单&#xff1b; 不2.用考虑各种锁的问题&#xff0c;不存在加锁和释放锁的操作&#xff0c;没有因为可能出现死锁而导致的性能问题&#xff1b; 3.不存在多线程切换而消耗CPU&#xff1b; 4.无法发挥多…

2023年医疗器械行业分析(京东医疗器械运营数据分析):10月销额增长53%

随着我国整体实力的增强、国民生活水平的提高、人口老龄化、医疗保障体系不断完善等因素的驱动&#xff0c;我国的医疗器械市场增长迅速。 根据鲸参谋电商数据分析平台的相关数据显示&#xff0c;今年10月份&#xff0c;京东平台上医疗器械市场的销量将近1200万&#xff0c;环比…

IDE代码编辑器:CLion 2023.3(WinMac)中文激活版

CLion 2023是一款由JetBrains公司为C/C编程设计的跨平台集成开发环境&#xff08;IDE&#xff09;。它集成了丰富的功能和工具&#xff0c;旨在帮助开发人员更高效地进行C/C编程和调试。 以下是这款软件的一些主要特点和功能&#xff1a; 高效的编程体验&#xff1a;为Mac用户提…

HarmonyOS编译开源native库(OpenSSL实例)

前言 近期项目要开始做鸿蒙版本&#xff0c;有一部分依赖native的代码也需要迁移&#xff0c;某个native模块依赖openssl&#xff0c;需要在鸿蒙下重新编译openssl才行。一开始找了很多相关文档都没有得到方法&#xff0c;无奈只能自己凭经验慢慢试&#xff0c;最后还是成功了…

javascript和HTML手机端实现多条件筛选的实战记录(筛选层的展示与隐藏、AJAX传输数组)

实现多条件筛选功能在JavaScript和HTML中可以分为以下几个步骤&#xff1a; HTML页面布局: 设计你的页面布局&#xff0c;包括筛选条件的选择器和结果展示区域。‘’ JavaScript逻辑:通过JavaScript监听筛选条件的变化&#xff0c;并根据选择的值对结果进行筛选。动态展示: 实…

编辑器Sublime text 常用快捷命令 列模式 替换空行

平替notepad 下载可取官网 www.sublimetext.com 据说可以无限试用&#xff0c;没有功能限制 1、快速删除空行 ctrl h选择正则表达式 .*Find输入&#xff1a; ^(\t)*$\nReplace输入&#xff1a;点击Replace All 2、快速选择指定字符 用鼠标选中alt f3修改 3、列编辑模式 ct…

亿道三防平板/手持终端/工业笔记本/车载电脑配件指南,使用高效加倍!

以前我们在选购合适的三防加固计算机时&#xff0c;总是在强调项目的规格参数需求&#xff0c;强调三防平板/手持终端/工业笔记本/车载电脑等终端设备的性能和功能。然而&#xff0c;我们常常忽略了一个重要的维度&#xff1a;用户体验。三防加固计算机作为数字化基础设施和生产…

Spark与PySpark(1.概述、框架、模块)

目录 1.Spark 概念 2. Hadoop和Spark的对比 3. Spark特点 3.1 运行速度快 3.2 简单易用 3.3 通用性强 3.4 可以允许运行在很多地方 4. Spark框架模块 4.1 Spark Core 4.2 SparkSQL 4.3 SparkStreaming 4.4 MLlib 4.5 GraphX 5. Spark的运行模式 5.1 本地模式(单机) Local运行模…

ubuntu18.04配置cuda+cudnn+tensorrt+anconda+pytorch-gpu+pycharm

一、显卡驱动安装 执行nvidia-smi查看安装情况 二、cuda安装 cuda官网下载cuda_11.6.2_510.47.03_linux.run&#xff0c;安装执行 sudo sh cuda_11.6.2_510.47.03_linux.run提升安装项&#xff0c;驱动不用安装&#xff0c;即第一项&#xff08;Driver&#xff09;&#xff…

SpringBoot集成swagger2配置权限认证参数

作者简介&#xff1a;大家好&#xff0c;我是撸代码的羊驼&#xff0c;前阿里巴巴架构师&#xff0c;现某互联网公司CTO 联系v&#xff1a;sulny_ann&#xff08;17362204968&#xff09;&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗…

【JavaWeb学习笔记】8 - HTTP

一、常用文档 请求头 响应头 中间件获取的网页协议和返回的内容 这些称为HTTP协议 请求和响应 常见的请求头 响应头 状态码 HTTP状态码 当浏览者访问一个网页时&#xff0c;浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前&#xff0c;此网页所在的服务…

【二者区别】cuda和cudatoolkit

Pytorch 使用不同版本的 cuda 由于课题的原因&#xff0c;笔者主要通过 Pytorch 框架进行深度学习相关的学习和实验。在运行和学习网络上的 Pytorch 应用代码的过程中&#xff0c;不少项目会标注作者在运行和实验时所使用的 Pytorch 和 cuda 版本信息。由于 Pytorch 和 cuda 版…

联邦蒸馏中的分布式知识一致性 | TIST 2024

联邦蒸馏中的分布式知识一致性 | TIST 2024 联邦学习是一种隐私保护的分布式机器学习范式&#xff0c;服务器可以在不汇集客户端私有数据的前提下联合训练机器学习模型。通信约束和系统异构是联邦学习面临的两大严峻挑战。为同时解决上述两个问题&#xff0c;联邦蒸馏技术被提…

vue 中国省市区级联数据 三级联动

vue 中国省市区级联数据 三级联动 安装插件 npm install element-china-area-data5.0.2 -S 当前版本以测试&#xff0c;可用。组件中使用了 element-ui, https://element.eleme.cn/#/zh-CN/component/installation 库 请注意安装。插件文档 https://www.npmjs.com/package/ele…

【Go-自学版】03-即时通信系统1

1. 基础 server 构建 main.go | server.go // main.go package mainfunc main() {// http://127.0.0.1:8888/ server : NewServer("127.0.0.1", 8888)server.Start() }// server.go package mainimport ("fmt""net" )type Server struct {IP …