目标检测——Faster R-CNN算法解读

论文:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
作者:Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun
链接:https://arxiv.org/abs/1506.01497
代码:https://github.com/rbgirshick/py-faster-rcnn

R-CNN系列其他文章:

  • R-CNN算法解读
  • SPPNet算法解读
  • Fast R-CNN算法解读

目录

  • 1、算法概述
  • 2、Faster R-CNN细节
    • 2.1 Region Proposal Networks
    • 2.2 RPN和Fast R-CNN共享卷积特征
  • 3、实验结果
  • 4、创新点和不足

1、算法概述

之前的工作,像SPPnet和Fast R-CNN虽然都相对于R-CNN在提取特征的时间上有所改进,但针对区域候选框的生成这一步未做改进,这是两个算法的不足之处,此论文提出了Region Proposal Network(RPN)通过共享卷积层自动生成区域候选框:通过将RPN集成到Fast R-CNN中可实现区域候选框生成、类别预测及边界框预测一步到位,用VGG-16作为主干,在GPU上推理能达到5fps。Faster R-CNN在2015年的ILSVRC和COCO竞赛中取得了第一名的成绩。

2、Faster R-CNN细节

先说区域候选框的选取规则,为了尽量完全地包含图像中的目标,区域候选框旨在有效地预测具有广泛尺度和纵横比。目前的方式如下图几种:
在这里插入图片描述
图1-a中是图像金字塔,图1-b是卷积核金字塔(通过变换卷积核大小),图1-c就是本文采用的方法,在特征图上应用多尺度/多纵横比的矩形框参考(论文中命名为“anchor”),这样可以避免枚举多个比例或宽高比的图像或卷积核。Faster R-CNN由于这样的操作,使得可以在单一尺度图像上完成候选框生成工作从而提高了运行速度。其整体网络框图如下所示:
在这里插入图片描述
Faster R-CNN由两部分组成,第一部分为由全卷积网络组成的RPN结构,第二部分为Fast R-CNN检测器。如上图所示,RPN结构可以集成到Fast R-CNN中,共享其网络前部产生的特征图。当RPN模块产生区域候选框后,告诉Fast R-CNN模块区域候选框的位置,后面就是延续Fast R-CNN的操作了,应用RoI Pooling,然后输出接分类和回归分支。

2.1 Region Proposal Networks

候选框生成网络(RPN)接受任意大小的图像作为输入并输出一组矩形框做为目标的候选框,每个候选框都有一个是否是目标的得分(objectness,用softmax,只有两类,是目标或是背景,也可以用逻辑回归直接回归一个是目标的分数)。RPN结构为全卷积网络,文中采用ZFNet和VGG16,在特征图上应用3x3大小的滑窗将特征转换为256个1x1大小的特征图(ZFNet)和512个1x1大小的特征图(VGG16),最后用1x1大小的卷积核接分类分支和回归分支。
在这里插入图片描述
Anchors
每个滑窗包含有k个anchor boxes,所以每个3x3大小的滑窗对应有2k个分类分数和4k个坐标框预测。如上图所示,文中k取9,包含3个尺度,每个尺度包含3个宽高比;对于一个WxH大小的特征图,共生成WHk个anchor。由于这种基于锚点的多尺度设计,我们可以简单地使用在单尺度图像上计算的卷积特征,多尺度锚框的设计是共享特征而不需要为寻找多尺度花费额外成本的关键组件。

样本选择
正样本:该anchor与ground-truth拥有最高的IoU,或者该anchor与任意一个ground-truth的IoU都大于0.7。这里就说明一个ground-truth可以为多个anchor分配正样本标签。
负样本:与所有ground-truth的IoU都小于0.3的anchor被视为负样本。
其他剩余的anchor被丢弃,没有参与到RPN训练中。

Loss Function
RPN的损失函数有些类似于Fast R-CNN的多任务损失,如下:
在这里插入图片描述
Lcls为二分类损失,Lreg为回归损失,采用smoothL1,其中正负样本均参与分类损失的计算,回归损失只有正样本参与计算。对于bounding-box回归,也是采用类似R-CNN的做法,学习基于anchor的偏移量,预测box,anchor box,和ground-truth box之间的关系如下面公式:
在这里插入图片描述
例如针对某个预测box,使得anchor box中心点xa与预测box中心点x的距离尽量接近anchor box中心点xa与ground-truth box中心点x*的距离,其他三个值同理,这样就等价于预测box接近ground-truth box了。

训练RPN
训练RPN网络的样本都是来自图片的anchor样本选取的正负样本,由于负样本较多,会造成正负样本不平衡问题,所以我们设置batchsize为256,正负样本比例为1:1,如果正样本少于128,就用负样本补齐。

2.2 RPN和Fast R-CNN共享卷积特征

论文采用四步交替训练的方式实现RPN与Fast R-CNN的统一:

  • 第一步:用ImageNet预训练模型微调RPN网络;
  • 第二步:用RPN网络生成的区域候选框训练Fast R-CNN,训练之前也用ImageNet预训练模型初始化参数,这两步RPN和Fast R-CNN还没有共享卷积层参数;
  • 第三步:用Fast R-CNN前部分卷积层参数初始化RPN训练,但是固定住共享层的参数,单独更新RPN独有部分的参数,这个时候就保证两个网络共享卷积层参数一致了。
  • 第四步:固定住共享卷积层参数,微调Fast R-CNN独有部分的参数。

3、实验结果

作者在VOC2007,VOC2012上测试结果如下:
在这里插入图片描述
在这里插入图片描述
和用SS方式生成区域候选框的时间对比结果如下:
在这里插入图片描述

4、创新点和不足

  • 创新点:
    1、提出RPN网络生成候选框并集成到Fast R-CNN网络中,使得推理速度进一步得到提升;
    2、提出anchor锚框的概念,使得能在一张图片上得到多尺度多宽高比的预测框学习参考;
    3、 提出交替训练方法,使得RPN与Fast R-CNN能共享卷积层参数。
  • 不足:
    1、二阶段方法,推理速度还是难以在终端上运行;

突然想到yolo系列和这个RPN不谋而合啊,yolov2可以算单尺度版的RPN,yolov3可以算FPN版的RPN,只是yolo多了个类别识别分支,anchor设置不同,且分配正负样本的方式不同而已。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sqli-labs靶场详解(less17-less22)

目录 less-17 less-18 less-19 less-20 less-21 less-22 less-17 修改密码关卡 服务器后端 账号密码都存在数据库中 使用UPDATE进行修改密码 尝试username处 尝试好久尝试不出来应该是对用户名进行了过滤 于是对password进行注入 判断注入点 passwdadmin 报错&#xff1a…

CentOS 7 部署 MariaDB 的 2 种方法

有两种安装 MariaDB 服务器的方法。您可以安装 CentOS 7 存储库中可用的默认版本,也可以通过手动添加 MariaDB 存储库来安装最新版本。 如果安装过MariaDB或MySQL,使用以下命令彻底删除它们: yum remove mariadb* yum remove mysql* 方法一: 使用 Yum…

安卓开发学习---kotlin版---笔记(一)

Hello word 前言:上次学习安卓,学了Java开发,简单的搭了几个安卓界面。这次要学习Kotlin语言,然后开发安卓,趁着还年轻,学点新东西,坚持~ 未来的你会感谢现在努力的你~ 主要学习资料&#xff1a…

15、 深度学习之正向传播和反向传播

上一节介绍了训练和推理的概念,这一节接着训练和推理的概念讲一下,神经网络的正向传播和反向传播。 其实单看正向传播和反向传播这两个概念,很好理解。 正向传播(Forward Propagation)是指从输入层到输出层的数据流动过程,而反向传播(Backpropagation)是指数据从输出…

30秒搞定一个属于你的问答机器人,快速抓取网站内容

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情 文章目录 简介运行效果GitHub地址 简介 爬取一个网站的内容,然后让这个内容变成你自己的私有知识库,并且还可以搭建一个基于私有知识库的问…

IDEA下载和安装

IDEA的下载和安装 一、概述 IDEA全称IntelliJ IDEA,是用于Java语言开发的集成环境,它是业界公认的目前用于Java程序开发最好的工具。 集成环境:把代码编写,编译,执行,调试等多种功能综合到一起的开发工具…

光伏测算工具能测量哪些数据?

光伏测算工具在光伏电站的设计和规划过程中起着至关重要的作用。它们可以测量并分析一系列关键数据,以确保光伏电站的顺利建设和高效运营。本文将详细介绍光伏测算工具能测量的主要数据。 一、太阳能资源评估 光伏测算工具可以对场地的太阳能资源进行评估。这包括测…

ubuntu改window任务栏

经常在ubuntu和win之间切换,任务栏的布局不统一会让人很别扭,个人很喜欢win任务栏的不折叠图标功能,而ubuntu没有,又很喜欢的ubuntu的多工作空间,效率比副屏还高,还可以自定义切换工作空间的快捷键。鱼和熊…

判断一个字符序列是否为回文————利用使用双指针法

#include <stdio.h> #include <string.h> int is_palindrome(char s[]) { int left 0; int right strlen(s) - 1; // 循环判断左右指针字符是否相等 while (left < right) { // 如果左右指针所指字符不相等&#xff0c;则返回0表示不是回…

qt pdf 模块简介

文章目录 1. 技术平台2. Qt pdf 模块3. cmake 使用模块4. 许可证5. 简单示例5.1 CMakeLists.txt5.2 main.cpp 6. 总结 1. 技术平台 项目说明OSwin10 x64Qt6.6compilermsvc2022构建工具cmake 2. Qt pdf 模块 Qt PDF模块包含用于呈现PDF文档的类和函数。 QPdfDocument 类加载P…

常用sql记录

备份一张表 PostgreSQL CREATE TABLE new_table AS SELECT * FROM old_table;-- 下面这个比上面好&#xff0c;这个复制表结构时&#xff0c;会把默认值、约束、注释都复制 CREATE TABLE new_table (LIKE old_table INCLUDING ALL) WITHOUT OIDS; INSERT INTO new_table SELE…

10.30 作业 C++

设计一个Per类&#xff0c;类中包含私有成员:姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员:成绩、Per类对象p1&#xff0c;设计这两个类的构造函数、析构函数和拷贝构造函数。 #include <iostream>using namespace std;clas…

【SpringCloud】注册中心和Ribbon负载均衡

SpringCloud 1.Eureka注册中心 1.1 Eureka的作用 注册中心拉取服务负载均衡远程调用 order-service得知user-service实例地址流程&#xff1a; user-service服务实例启动后&#xff0c;将自己的信息注册到eureka-server&#xff08;Eureka服务端&#xff09;&#xff0c;称…

pytorch中Conv1d、Conv2d与Conv3d详解

1 卷积介绍 1.1 什么是卷积 卷积&#xff08;convolution&#xff09;&#xff0c;是一种运算&#xff0c;你可以类比于加&#xff0c;减&#xff0c;乘&#xff0c;除&#xff0c;矩阵的点乘与叉乘等等&#xff0c;它有自己的运算规则&#xff0c;卷积的符号是星号*。表达式…

继承 和 多肽(超重点 ! ! !)

[本节目标] 1.继承 2.组合 3.多肽 1.继承 1.1 为什么要继承 Java中使用类对现实世界中实体来进行描述&#xff0c;类经过实例化之后的产物对象&#xff0c;则可以用来表示现实中的实体&#xff0c;但是现实世界错综复杂&#xff0c;事物之间可能会存在一些关联&#xff0…

百度下拉词挖掘工具,百度下拉词挖掘获取软件

百度下拉词挖掘工具 百度下拉词挖掘工具&#xff0c;作为站长和SEO人员必备的工具之一&#xff0c;有着令人瞩目的功能。它能够追踪用户在百度搜索栏中输入关键词时&#xff0c;百度自动为用户推荐的下拉关键词。这一推荐不仅仅是用户搜索历史的体现&#xff0c;更是一种市场需…

算法通关村第十四关-青铜挑战认识堆

大家好我是苏麟 , 今天带大家认识认识堆 . 堆 堆是将一组数据按照完全二叉树的存储顺序&#xff0c;将数据存储在一个一维数组中的结构。 堆有两种结构&#xff0c;一种称为大顶堆&#xff0c;一种称为小顶堆 : 大顶堆 大顶堆的任何一个父节点的值&#xff0c;都大于或等于…

C++模版

文章目录 C模版1、泛型编程2、函数模版2.1、函数模版概念2.2、函数模版格式2.3、函数模版原理2.4、函数模版的实例化2.5、模板参数的匹配原则 3、类模版3.1、类模版概念3.2、类模版格式3.3、类模板的实例化 C模版 1、泛型编程 泛型编程&#xff08;Generic Programming&#x…

景联文科技加入中国人工智能产业联盟(AIIA)数据委员会

近日&#xff0c;景联文科技加入中国人工智能产业联盟&#xff08;AIIA&#xff09;数据委员会&#xff0c;成为委员会成员单位。 中国人工智能产业发展联盟&#xff08;简称AIIA&#xff09;是在国家发改委、科技部、工信部、网信办指导下&#xff0c;由中国信息通信研究院等单…

SQL-分页查询offset的用法

今天在做一道关于查询一张表中第二高工资的问题时发现没有思路&#xff0c;经过一番搜索发现需要用到offset偏移量来解决这个问题。 OFFSET关键字用于指定从结果集的哪一行开始返回数据。通常&#xff0c;它与LIMIT一起使用&#xff0c;以实现分页效果。其语法如下&#xff1a…