Fast-RCNN网络详解

news/2024/11/25 13:18:31/

文章目录

  • 一、前言
  • 二、Fast-RCNN原理步骤
    • 2.1候选区域的生成
    • 2.2.ROI Pooling层
    • 2.3.分类器
    • 2.4.边界框的预测
    • 2.5.损失计算
      • 2.5.1.分类损失
      • 2.5.2.边界框回归损失
  • 三、总结
  • 参考博客与视频、代码

一、前言

前面学习了SS算法、R-CNN网络,接下来继续学习Fast-RCNN网络。
在这里插入图片描述

本文两个目的,其一作为个人笔记,方便自己巩固复习知识;其二帮助正在自学的朋友,希望拙劣的见解可以帮助到大家。

二、Fast-RCNN原理步骤

Fast-RCNN可以分为三个步骤:

1)使用SS算法生成大概1-2k的候选框。
2)参考SPPnet模型来将整张图片输入网络得到特征图,再将第一步得到的候选框映射到特征矩阵来提取特征矩阵。
3)特征层通道ROI pooling操作缩放到7*7大小,展平连接一系列的全连接层得到分类结果和边界框回归参数。

2.1候选区域的生成

在这里插入图片描述
上图为R-CNN与Fast-RCNN生成候选区域的方式对比

R-CNN
可以看到R-CNN生成的候选框都需要输入深度网络提取特征,进行正向传播,冗余区域的重复计算,极大的增加了计算量,降低效率。
Fast-RCNN
它将整张图片输入网络,得到特征图,SS算法得到的候选框映射到特征图来获取特征,这样就不需要再重复计算这些候选区域。大大减小了计算量。

训练数据的采样(正样本与负样本)

与R-CNN不同的是,我们并没有使用SS算法生成的所有候选框,SS算法生成的近2000个候选框,实际上训练只使用了一小部分的候选框,而且样本分为正样本和负样本。具体论文里面有提到:分为正样本和负样本是为了平衡数据,因为如果正样本明显偏多,那么网络会理所当然的认为待识别的候选框是目标种类的一种,但实际上候选框也很有可能是背景,因此为了平衡包含目标和包含背景分为了正样本和负样本。

正样本与负样本的定义:候选框与真实框IOU大于0.5即为正样本,IOU在[0.1,0.5],记为负样本。
在这里插入图片描述

2.2.ROI Pooling层

在这里插入图片描述

ROI Pooling层的实现

将样本划分为7*7个区域,对每个区域进行max pooling操作
在这里插入图片描述

2.3.分类器

在这里插入图片描述
上面讲到我们在提取特征后经过ROI pooling层处理缩放到相同大小,然后拉直展平再经过两个全连接层,再分别于并联全连接层来分别进行类别概率的预测和bounding box边界框的预测。

对于分类器最后输出N+1个类别的概率,N为检测目标的类别数目,1为背景,得到的概率分布是经过了softmax的处理。

2.4.边界框的预测

在这里插入图片描述
对于每个类别都会输出一组候选框回归参数(d_x, d_y, d_w, d_h)最后一层输出的结点个数为(N+1)*4

那么如何利用这些参数得到最终的预测框?
在这里插入图片描述

如图中所示:P表示预测框,G为真实框、G^为最终预测框,我们可以这么理解这几个公式:认为输出的回归参数对预测框进行中心坐标x,y的偏移调整,以及对候选框的宽和高进行缩放调整。

这几个公式来自于R-CNN论文,exp指指数次方。

2.5.损失计算

在这里插入图片描述
与R-CNN不同的是,Fast-RCNN因为分类与边界框的回归是一起训练的,因此损失也为对应部分损失的和。

2.5.1.分类损失

L c l s ( p , u ) L_{cls}(p, u) Lcls(p,u)指分类的损失,p为预测类别的概率分布p=p_0,p1,…pk,u为目标真实类别标签​,计算公式为:

L c l s ( p , u ) = − l o g p u L_{cls}(p, u) = -log^{p_u} Lcls(p,u)=logpu

Pu指当前框预测类别为u的概率。实际上上面的公式就是为交叉熵损失,只不过其他的类别标签为0,因此被化简了。
在这里插入图片描述

2.5.2.边界框回归损失

λ 表示平衡系数来使数值稳定 \lambda表示平衡系数来使数值稳定 λ表示平衡系数来使数值稳定
[u>=1]为艾弗森括号,当真实标签为u类别这一项为1,当不满足这个条件等于0,也就是说只有预测类别不是背景才为1,为背景则为0, t u t^u tu为预测的边界框回归参数,具体为:
( t x u , t y u , t w u , t h u ) ({t_x}^u,{t_y}^u,{t_w}^u,{t_h}^u) (txu,tyu,twu,thu)
v为真实的边界框回归参数(v是通过真实的框位置中心和框宽和高利用上面的公式反推而来的,反推公式如下)

v x = G x − P x P w v_x = \frac{G_x - P_x}{P_w} vx=PwGxPx
v y = G y − P y P h v_y = \frac{G_y - P_y}{P_h} vy=PhGyPy
v w = l o g G w P w v_w =log^{ \frac{G_w}{P_w}} vw=logPwGw
v h = l o g G h P h v_h = log^{\frac{G_h}{P_h}} vh=logPhGh

L l o c ( t u , v ) = Σ i ∈ x , y , w , h ( s m o o t h L 1 ( t i u − v ) ) L_{loc}(t^{u}, v) = \Sigma_{i \in {x, y, w, h}}(smooth_{L_{1}}{(t_i}^{u}-v)) Lloc(tu,v)=Σix,y,w,h(smoothL1(tiuv))

SoomthL1函数如下:

s o o m t h L 1 = { 0.5 ∗ x 2 i f ∣ x ∣ < 1 ∣ x ∣ − 0.5 o t h e r w i s e soomth_{L_1}=\begin{cases}0.5*x^2 & if|x|< 1 \\ |x| - 0.5 & otherwise\end{cases} soomthL1={0.5x2x0.5ifx<1otherwise

三、总结

在这里插入图片描述
相比R-CNN,步骤简化为了两步,特征提取、分类、边界框回归都用一个CNN来完成。

参考博客与视频、代码

B站up主视频地址

[代码地址](https://github.com/rbgirshick/ fast-rcnn)

[论文地址]([1504.08083] Fast R-CNN (arxiv.org))
前文博客:
SS-算法
R-CNN网络详解


http://www.ppmy.cn/news/95456.html

相关文章

java 区分缺陷Defects/感染Infections/失败Failure

java 区分缺陷Defects/感染Infections/失败Failure 缺陷Defects 软件故障总是从代码中一个或多个缺陷的执行开始。 缺陷只是一段有缺陷、不正确的代码。 缺陷可能是程序语句的一部分或完整部分&#xff0c;也可能对应于不存在但应该存在的语句。 尽管程序员要对代码中的缺陷负…

C#,码海拾贝(22)——“全选主元高斯-约当消去法“求解“线性方程组“的C#源代码,《C#数值计算算法编程》源代码升级改进版

using System; namespace Zhou.CSharp.Algorithm { /// <summary> /// 求解线性方程组的类 LEquations /// 原作 周长发 /// 改编 深度混淆 /// </summary> public static partial class LEquations { /// <summary> …

echarts 被封装后多次复用,图表被覆盖,解决方法

场景&#xff1a;为了方便样式统一&#xff0c;封装了一个盒子&#xff0c;其中包含echarts&#xff0c;option是从父组件传来的 问题&#xff1a; 多个父级页面使用这个盒子后&#xff0c;发现只有第一个盒子展示图表&#xff0c;但展示的是最后一个图片的样式&#xff0c;其他…

consul命令总结

1. consul members -http-addrxxxxx 查看指定地址consul集群的所有节点 举例&#xff1a;查看地址192.168.5.47上consul集群的所有consul节点 如下图&#xff0c;该集群一共有三个节点 2. consul info -http-addrxxxxx 查看指定地址consul集群的详细信息 举例&#xff1a;查看…

【SDP协议】

SDP 1.概念2术语2.1 SERVICE ATTRIBUTE2.3 UUID 3 数据表示3.2 hci log4.4.4.3 PARTIAL RESPONSES AND CONTINUATION STATE4.4.4.4 ERROR HANDLING4.4.4.5 SERVICE SEARCH TRANSACTION4.4.4.6 SERVICE ATTRIBUTE TRANSACTION4.4.4.3 SERVICE SEARCH ATTRIBUTE TRANSACTION4.4.4…

Django JWT验证

什么是JSON Web Token&#xff08;JWT&#xff09;&#xff1f; JSON Web Token&#xff0c;简称JWT&#xff0c;是一种开放标准&#xff08;RFC 7519&#xff09;&#xff0c;用于在网络上传输信息&#xff0c;特别是在身份验证和授权方面。JWT是一串编码后的JSON格式字符串&…

C++数据结构:Python风格双向链表Pylist的实现

文章目录 前言一、目的二、代码详解1、Node类模板2、Pylist类构造3、内嵌迭代器4、Python风格insert方法5、Python风格append方法6、Python风格[]下标操作方法7、Python风格、 方法8、Python风格pop方法9、Python风格remove方法10、length、get方法 三、使用示例总结原创文章&a…

什么是web3 | 区块链web3.0人才

文章目录 一、Web31. 什么是web3&#xff1f;2. web3的dapp架构 二、区块链web3.0人才1. 区块链开发技术栈2. 欧易对人才的要求3. 如何成为一名合格的智能合约高级工程师4. web3各个赛道5. 链上数据分析师6. 一些案例 三、参考 一、Web3 1. 什么是web3&#xff1f; 20世纪90年…