Faster RCNN网络源码解读(Ⅰ) --- Fast RCNN、Faster RCNN论文解读

news2024/11/20 11:27:48

目录

一、Fast R-CNN论文解读

二、Faster R-CNN论文解读


一、Fast R-CNN论文解读

        Fast R-CNN是作者Ross Girshick继R-CNN后的又一力作。同样使用VGG16作为网络的backbone,与R-CNN相比训练时间快9倍,测试推理时间快213倍,准确率从62%提升至66%(在Pascal voc数据集上)。

        RCNN算法流程可分为4个步骤
①一张图像生成1K~2K个候选区域(使用Selective Search方法)-

②对每个候选区域,使用深度网络提取特征
③特征送入每一类的SVM分类器,判别是否属于该类

④使用回归器精细修正候选框位置

         Fast R-CNN算法流程可分为3个步骤
①一张图像生成1K~2K个候选区域(使用Selective Search方法)
②将图像输入网络得到相应的特征图,将SS算法生成的候选框投影到特征图上获得相应的特征矩阵
③将每个特征矩阵通过ROI pooling层缩放到7x7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果

        相比于Fast RCNN算法,Faster RCNN算法将整张图片送入backbone网络,得到特征图,再将SS区域投影映射到特征图上,避免了大量的计算。

        在训练过程中,我们并不是使用ss算法提供的所有候选区域进行训练,通过ss算法我们得到了大约2000个候选框,我们在训练过程中只需要使用其中的一小部分就可以了。

        对于采样的数据我们分成正样本和负样本,正样本是采样区域确实存在目标物体的样本,负样本可以简单理解成为背景。

        作者从2000个候选区域中采集64个候选区域(正+负):如下规则

         有了训练样本之后,我们将用于训练的样本框通过ROI Polling层缩放到统一的尺寸

        ROI Polling层如何实现的呢?

        假设左图是一个候选区域在我们特征图上的特征矩阵,划分为7*7,对每个区域进行最大池化下采样MaxPooling操作,得到了7*7的特征矩阵。

         Fast RCNN的分类器:

         我们将一张图片直接输入进我们的CNN网络中,得到了图像的特征图,根据映射关系我们能够得到每个候选区域的特征矩阵,我们将特征矩阵经过ROI Polling层缩放到一个统一的指定的尺寸,接着我们进行一个展平处理,通过两个全连接层得到我们的RoI feature,然后并联两个全连接层,分别进行目标概率预测和边界框预测。

        目标概率预测部分:

        输出N+1个类别的概率(N为检测目标的种类,1为背景)共N+1个节点(经过softmax处理概率和为1)。

        边界框回归器部分:

         如何根据回归参数和候选框得到最终的预测边界框呢?

        P代表候选框的坐标,G为最总预测的边界框中心。通过上述计算我们可以将黄色的框框调整到红色的框框中。

        最后我们说一下FastRCNN的损失吧:分类损失 + 边界框回归损失

         k是目标总类数量。

        分类损失采用softmax交叉熵损失:

        o_{i}^{*}代表的是真实标签值,o_{i}为预测值。o_{i}^{*}只有在正确标签的索引位置才为1,其他位置都是等于0的。

        假设真实标签的one-hot编码是:[0,0,...,1,...,0]

        预测的softmax概率为:[0.1,0.3,...,0.4,...,0.1]
        那么Loss=-log(0.4)

        边界框回归损失用smoothL_1计算:

        也就是说我们的边界框回归损失由四部分组成:回归参数xsmoothL_1损失、回归参数ysmoothL_1损失、 回归参数wsmoothL_1损失、回归参数hsmoothL_1损失。

        \lambda是平衡系数,用于平衡我们的分类损失和边界框回归损失,[\mu \geqslant 1]是艾弗森括号,即\mu \geqslant 1时它为1,反之为0。[\mu \geqslant 1]表示候选区域确实为我们所要检测的某一个类别(正样本),其他表示为负样本,负样本也就意味着没有边界框损失这一项了,那么边界框回归损失就为0。

        Fast RCNN可以分为两部分进行处理:

        相比于RCNN的三部分,是不是更清晰了:

         但Fast RCNN还是需要比较长的时间的,因为我们SS算法在CPU上运行,占程序运行的大部分时间,针对此,我们引入了Faster RCNN算法。

二、Faster R-CNN论文解读

        Faster R-CNN是作者Ross Girshick继Fast R-CNN后的又一力作。同样使用VGG16作为网络的backbone,推理速度在GPU上达到5fps(包括候选区域的生成),准确率也有进一步的提升。在2015年的ILSVRC以及coco竞赛中获得多个项目的第一名。

我们回顾Fast RCNN算法流程可分为3个步骤
①一张图像生成1K~2K个候选区域(使用Selective Search方法)。

②将图像输入网络得到相应的特征图,将SS算法生成的候选框投影到特征图上获得相应的特征矩阵。
③将每个特征矩阵通过ROI pooling层缩放到7x7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果。

我们来先大概了解下Faster RCNN的算法步骤,我总结为三个步骤:

①将图像输入网络得到相应的特征图。
②使用RPN结构生成候选框,将RPN生成的候选框投影到特征图上获得相应的特征矩阵。
③将每个特征矩阵通过ROI pooling层缩放到7x7大小的特征图接着将特征图展平通过一系列全连接层得到预测结果。

        这里先是将我们的图像输入到CNN网络(特征提取网络)backbone中得到特征图(feature map),使用RPN结构生成候选框,接着将RPN生成的候选框投影在特征图上得到一个个相应的特征矩阵,将特征矩阵通过ROI Pooling层缩放到统一的大小(7*7),进行展平处理接着通过一系列的全连接层得到我们的预测概率以及边界框回归参数。

        其实Faster RCNN可以看作是RPN + Fast RCNN。我们这里主要讲解RPN。

         右图中底部为特征图(feature map)是通过backbone生成的,我们在特征图上面使用一个滑动窗口在特征图中进行滑动,每滑动一次我们生成一个一维的向量,在这个向量的基础上通过两个全连接层输出我们的目标概率以及边界框回归参数。

        2K(背景的概率 + 前景的概率)是针对K个anchorbox,针对每个anchor我们会生成四个边界框回归参数因此是4K个。在使用ZF网络中它所生成的特征图的深度(channel)是等于256的。

        对于特征图上每一个3*3的滑动窗口,计算中心点在原图上所对应的位置(等比例缩放),再以这个点为中心计算每个anchor box,这里都是给定的大小及长宽比例。

        用上图做解释,我们找到特征图对应的原图的点,在该点周围生成一系列的anchor box。anchor中可能包含了我们所要检测的目标,也可能没有我们所要检测的目标。

        对于K个anchor,我们会生成2K个cls(背景概率、前景概率--没有进行分类)和4K(anchor中心坐标、宽、高预测的量)个reg。经过边界框回归,我们希望尽可能框选出来我们的目标。

         在Faster R-CNN中给了9个anchor。(作者说是经验......)

        也就是说会生成2*9=18个预测分数和4*9=36个边界框回归参数。 

        对于一张1000x600x3的图像,大约有60x40x9(20k)个anchor,忽略跨越边界的anchor以后,剩下约6k个anchor(也就是我们说的proposal)。对于RPN生成的候选框之间存在大量重叠,基于候选框的cls得分,采用非极大值抑制,loU设为0.7,这样每张图片只剩2k个候选框。

        我们注意!anchor!=proposal,我们利用RPN生成的边界框回归参数将我们的anchor调节到我们的proposal的。

        正向传播过程也是比较简单的,滑动窗口采用3*3的Conv,采用步距为1,padding也为1,这样我们就能得到高度、宽度、深度和我们的feature map一样的特征矩阵,我们在特征矩阵上并联两个1*1的卷积层实现对类别和边界框的预测。

        RPN网络中正负样本的选择:

        我们在原图上会生成上万个anchor,并不是每个都用来训练我们的RPN网络,根据作者所说,我们从上万个anchor中采样256个anchor(正样本 + 负样本,比例约1:1),如果正样本数目不足则用负样本进行填充。

        对于定义正样本:①anchor与标注信息框(ground-truth)iou超过0.7或②anchor与标注信息(ground-truth)具有最大的iou(人工标注的框与很多anchor都相交,我们找到与人工标注有最大的iou值的anchor)

        对于负样本定义:与所有的标注信息(ground-truth)的iou值均小于0.3。

        丢弃所有不是正样本与负样本的anchor。

        我们看看RPN的损失定义:

         分类损失的两种计算方法:

         边界框回归损失:

        和Fast R-CNN如出一辙。

        这里t_x,t_y,t_w,t_h代表通过回归层预测出来的并不是计算出来的,那些带*的是根据anchor所对应的真实的ground-truth以及anchor的坐标计算出来的。

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

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

相关文章

Win10家庭版安装Docker桌面版

文章目录1.主板BIOS中开启虚拟化2.开启Hyper-V(1)使用下列代码生成一个.cmd文件,并以管理员身份运行该文件。(2)看到运行成功即可关闭该文件。(3)勾选Hyper-V设置里的所有选项(4&…

2-2-3-10、并发设计模式

目录终止线程的设计模式Two-phase Termination(两阶段终止)模式——优雅的终止线程使用场景避免共享的设计模式Immutability模式——想破坏也破坏不了如何实现使用 Immutability 模式的注意事项Copy-on-Write模式应用场景Thread-Specific Storage 模式—…

这几个实用的微信功能,你该知道

生活中我们每天都会使用到微信,用了10年才发现,原来微信隐藏这么多神功能,真是太实用了,下面一起来看看吧!朋友圈发长视频 如果你想要在朋友圈里分享长视频,可以借助微信收藏“转发”到朋友圈。 在收藏里添…

一位普通前端开发的一年|2022总结

前言 2022年转眼快要结束,在这一年我学到了很多东西,现在就来总结一下我的2022,复盘一下过去一年的成果。 总结 在2022年2月底从上一家公司跳槽,面试了两家公司两家拿到了两个offer,当时感觉自己很厉害,…

jdk-Atomic源码学习

上文:AQS-Exchanger源码学习源码下载:https://gitee.com/hong99/jdk8Atomic了解atomic是并发框架中的一员,所属位置:java.util.concurrent.atomic 该类主要是用来解决内存可见性、有序、线程安全,当然底层也是通过cas来…

NEUQ week8 动态规划

题目 P1616 疯狂的采药 题目背景 此题为纪念 LiYuxiang 而生。 题目描述 LiYuxiang 是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个…

贪吃蛇基础·框架版(简单)结尾有原码

更新不易,麻烦多多点赞,欢迎你的提问,感谢你的转发, 最后的最后,关注我,关注我,关注我,你会看到更多有趣的博客哦!!! 喵喵喵,你对我…

PSM倾向得分匹配代码和案例数据

PSM倾向得分匹配代码和案例数据 含义:倾向评分匹配(Propensity Score Matching,简称PSM)是一种统计学方法,用于处理观察研究(Observational Study)的数据。 在观察研究中,由于种种…

【迅为iMX6Q】开发板 u-boot 2020.04 SD卡 启动

前言 iMX6Q 支持多种启动方式,如 emmc启动、SD 卡启动等,这里简单的记录一下 SD卡启动的流程 下载u-boot 使用 NXP 官方提供的 uboot-imx,代码地址为: https://github.com/nxp-imx/uboot-imx 使用 git 下载 uboot-imx&#xff…

自动驾驶接力赛,还在继续奔跑的Apollo带来哪些改变?

自动驾驶,被看作人工智能技术落地最快、范围最广、引发商业效应最显著的场景之一。从人人好奇的无人车,到满大街司空见惯的无人配送,自动驾驶在过去几年里快速成熟,成为城市交通系统的重要组成部分。数据显示,2020-203…

融云 CEO 董晗:国产化进程加速,助推政企数智办公平台深化发展

完整报告关注公众号,限免下载 政策催化加疫情助推下,办公线上化迅速完成着市场教育已经成为当前的主流趋势。而随着“国产化”成为各行业数字化发展道路上的关键词,政企办公领域国产替代的发展确定性更加凸显。关注【融云 RongCloud】&#x…

hnu计网实验四-网络层与链路层协议分析(PacketTracer)

一、实验目的: 通过本实验,进一步熟悉PacketTracer的使用,学习路由器与交换机的基本配置,加深对网络层与链路层协议的理解。 二、实验内容: 4.1 路由器交换机的基本配置 打开下面的实验文件,按提示完成实…

Java 集合框架

目录 1. 简介 2. 概览 3. 实现类 3.1 List 3.2 Queue 3.3 Set 3.4 Map 1. 简介 容器,就是可以容纳其他Java对象的对象。*Java Collections Framework(JCF)*为Java开发者提供了通用的容器,其始于JDK 1.2,优点是: 降低编程难度提高程序…

成为用友ISV优选伙伴,迈丹科技8个月经历了一次脱胎换骨

12月9日,用友第四届企业云服务开发者大赛鸣金收兵,第一次参赛,第一次与用友正式合作的厦门市迈丹科技开发有限公司(以下简称迈丹科技),便凭借SPC企业质量管理解决方案第一次获奖,而且还是企业赛…

Unity模型

1、Unity中使用的模型 Unity支持很多模型格式,比如:.fbx,.dae,.3ds,.dxf,.obj等等 大部分模型都不是在Unity中制作的,都是美术人员在建模软件中制作,如 3DMax、Maya等等 当他们制作…

VueJs中的ref函数

前言在Vue2.0里面,与页面相关显示的数据是挂载在data下,而在vue3.0里,想要一个数据具备响应式,那么需要引入响应式API函数,通过API函数加工处理后,才具备响应式,两者之间在底层实现数据的响应式上也存在着差异01ref可将数据变成响应式在setup里面使用let定义的变量不是响应式的…

【XR】VR手柄定位技术

rvy competitive analyse Y1的手柄使用了基于红外光的主动式光学定位追踪方案,主要是通过头显的摄像头在短曝光图像上观测到手柄上红外光电发射的红外光,通过检测光点并根据多视图几何原理计算初步的位姿,然后融合产生于手柄IMU(…

深度优先搜索和广度优先搜索的java代码实现过程详解

深度优先搜索和广度优先搜索 在很多情况下,我们需要遍历图,得到图的一些性质,例如,找出图中与指定的顶点相连的所有顶点,或者判定某个顶点与指定顶点是否相通,是非常常见的需求。 有关图的搜索,…

Spring Security怎么自定义登录页? 怎么注销?

本章内容 怎么自定义登录页底层都怎么实现如何注销?注销底层源码简单分析 开干 去网上找个好看的前端, 改改改改spring security配置启动几个红框框的地方注意下 Configuration public class SecurityConfig {Beanpublic SecurityFilterChain securityFilterChain(HttpSecu…

【决策树】简单介绍+个人理解(二)

1、ID3(Iterative Dichotomizer) ID3是Quinlan于1986年提出的, 它的提出开创了决策树算 法的先河, 而且是国际上最早的决策树方法, 在该算法中, 引入了信息论中熵的概念, 利用分割前后的熵来计算信息 增益, 作为判别能力的度量。ID3 算法的核心是在决策树各个结点上应用信息增…