Faster RCNN系列3——RPN的真值详解与损失值计算

faster-rcnn详解(rpn,损失函数) rpn工作流程: 在CNN生成的特征图上,执行一个3×3的卷积,pading设为(1,1),保证能够卷到特征图的每个位置,最后得到一个跟特征图尺寸一模一样的特征图,然后在后面并联两个1×1卷积,通道数分别为2k和4k,实现类别和边界框回归参数的预测,这里的类别是前景或背景 在cnn生成的特征图上的每个位置,生成9个anchor(假如20k),然后去除越界的anchor(剩下6k)【**注意,原论文中,是在20k个anchor中采样256个正负样本,然后执行下面的操作(用这符合条件的256个anchor训练 阅读详情

Faster RCNN系列:

Faster RCNN系列1——Anchor生成过程
Faster RCNN系列2——RPN的真值与预测值概述
Faster RCNN系列3——RPN的真值详解与损失值计算
Faster RCNN系列4——生成Proposal与RoI
Faster RCNN系列5——RoI Pooling与全连接层

一、RPN真值详解

  RPN的真值分为类别真值和偏移量真值,即每一个Anchor是否对应着真实物体,以及每一个Anchor对应物体的真实偏移值,这两种真值的具体求解过程如下图所示:

在这里插入图片描述

  1. Anchor生成

  Anchor生成的具体过程可参考Faster RCNN系列——Anchor生成过程,可生成 37 × 50 × 9 = 16650 37×50×9=16650 37×50×9=16650个Anchors,这种方法对于靠近图像边缘的点来说,可能生成超出图像范围的Anchor,需要把这部分超过图像范围的Anchor过滤掉。

def forward(self, input):
	# 利用NumPy首先得到原图上的中心点坐标,并利用contiguous保证内存连续
	shifts = torch. from_numpy(np.vstack((shift_x.ravel(), shift__y.ravel(),
										  shift_x.rave1(), shift_y.rave1())).transpose())
	shifts = shifts.contiguous().type_as(rpn_cls_score) .float ()
	# 调用基础Anchor生成所有Anchors
	self.anchors = self.anchors.type_as(gt_boxes)
	all_ anchors = self. anchors.view(1, A, 4) + shifts.view(K, 1, 4)
	# 保留边框内的Anchors
	inds_inside = torch.nonzero(keep).view(-1)
	anchors = all_ anchors[inds_inside, :]
  1. 类别真值求解

  类别真值求解的详细过程可参考Faster RCNN系列——RPN的真值与预测值概述中类别真值的部分,需要注意的是,求解过程中的三个步骤的顺序不能变动,原因:

  • 保证一个Anchor既符合正样本,也符合负样本时,才会被赋予正样本。

  • 为了保证召回率,允许一个标签对应多个Anchor,不允许一个Anchor对应多个标签。

def forward(self, input):
	# 生成标签向量,对应每一个Anchor的状态,1为正,0为负,初始化为-1
	labels = gt_boxes.new(batch_size, inds_inside.size(0)).fill_(-1)
	# 生成IoU矩阵,每一行代表一个Anchor, 每一列代表一个标签
	overlaps = bbox_overlaps_batch(anchors, gt_boxes)
	# 对每一行求最大值,返回的第一个为最大值,第二个为最大值的位置
	max_overlaps, argmax_overlaps = torch.max(overlaps, 2)
	# 对每一列取最大值,返回的是每一个标签对应的IoU最大值
	gt_max_overlaps, _ = torch.max(overlaps, 1)
	# 如果一个Anchor最大的IoU小于0.3, 视为负样本
	labels[max_overlaps < 0.3] = 0
	#与所有Anchors的最大IoU为0的标签要过滤掉
	gt_ max_overlaps[gt_max_overlaps==0] = 1e-5
	# 将与标签有最大IoU的Anchor赋予正样本
	keep = torch.sum(overlaps.eq(gt_max_overlaps.view(batch_size, 1, -1).expand_as(overlaps)), 2)
	if torch.sum(keep)>0:
		labels[keep>0] = 1
	#  如果一个 Anchor最大的IoU大于0.7,视为正样本
	labels[max_overlaps >= 0.7] = 1
  1. Anchor的筛选

  由于Anchor的总数量接近于2万,并且大部分Anchor的标签都是背景,如果都计算损失的话则正、负样本失去了均衡,不利于网络的收敛。因此,RPN默认选择256个Anchors进行损失的计算,其中最多不超过128个的正样本。如果数量超过了限定值,则进行随机选取。当然,这里的256与128都可以根据实际情况进行调整,而不是固定死的。

def forward(self, input):
	......
	for i in range(batch_size):
	#如果正样本数量太多,则进行下采样随机选取
		if sum_fg[i] > 128 :
			fg_inds = torch.nonzero(labels[i] == 1).view(-1)
			rand_num = torch.from_numpy(np.random.permutation
			(fg_ inds.size(0))).type_as(gt_boxes).long()
			disable_inds = fg_inds[rand_num[:fg_inds.size(0)-num_fg]]
			labels[i][disable_inds] = -1
			# 负样本同上
			......
  1. 偏移量真值求解

  偏移量真值的求解过程可参考Faster RCNN系列——RPN的真值与预测值概述中偏移量真值的部分。

  得到偏移量的真值后,将其保存在bbox_ targets 中。与此同时,还需要求解两个权值矩阵bbox_inside_weights 和bbox_outside_weights,前者是用来设置正样本回归的权重,正样本设置为1,负样本设置为0,因为负样本对应的是背景,不需要进行回归;后者的作用则是平衡RPN分类损失与回归损失的权重,在此设置为1/256。

def forward(self, input):
	......
	# 选择每一个Anchor对应最大Iou的标签进行偏移计算
	bbox_targets = _compute_targets_batch(anchors, gt_ boxes.view(-1, 5)[argmax_overlaps.view(-1), :].view(batch_size, -1, 5))
	#设置两个权重向量
	bbox_inside_weights[labels==1] = 1
	num_examples = torch.sum(labels[i] >=0)
	bbox_outside_weights[labels == 1] = 1.0 / examples.item()
	bbox_outside_weights[labels == 0]=1.0 / examples.item()

二、RPN预测值

  RPN的预测值分为类别预测值和偏移量预测值,计算过程可参考Faster RCNN系列——RPN的真值与预测值概述,通过卷积神经网络的分类分支求得类别预测值、通过回归分支求得偏移量预测值。

三、损失值计算

  有了类别真值、偏移量真值、类别预测值、偏移量预测值,就可以计算RPN网络的损失函数了。RPN网络的损失函数包含类别损失和回归损失,公式如下:

L ( P i , t i ) = 1 N c l s ∑ L c l s ( p i , p i ∗ ) + λ 1 N r e g ∑ p i ∗ L r e g ( t i , t i ∗ ) L(P_{i},t_{i})=\frac{1}{N_{cls}}\sum L_{cls}(p_{i},p_{i}^{*})+\lambda \frac{1}{N_{reg}}\sum p_{i}^{*}L_{reg}(t_{i},t_{i}^{*}) L(Pi​,ti​)=Ncls​1​∑Lcls​(pi​,pi∗​)+λNreg​1​∑pi∗​Lreg​(ti​,ti∗​)

   ∑ L c l s ( p i , p i ∗ ) \sum L_{cls}(p_{i},p_{i}^{*}) ∑Lcls​(pi​,pi∗​)表示筛选出的256个Anchor的类别损失, p i p_{i} pi​为每一个Anchor的类别真值, p i ∗ p_{i}^{*} pi∗​为每一个Anchor的类别预测值。这里的类别只有前景和背景之分,为二分类,因此类别损失函数 L c l s L_{cls} Lcls​使用交叉熵损失函数,公式如下:

L c l s ( p i , p i ∗ ) = − ∑ p i l o g p i ∗ L_{cls}(p_{i},p_{i}^{*})=-\sum p_{i}logp_{i}^{*} Lcls​(pi​,pi∗​)=−∑pi​logpi∗​

   ∑ p i ∗ L r e g ( t i , t i ∗ ) \sum p_{i}^{*}L_{reg}(t_{i},t_{i}^{*}) ∑pi∗​Lreg​(ti​,ti∗​)表示回归损失, t i t_{i} ti​为每一个Anchor的偏移量真值, t i ∗ t_{i}^{*} ti∗​为每一个Anchor的偏移量预测值。这里的 p i ∗ p_{i}^{*} pi∗​对应上文中的bbox_inside_weights,用来筛选正负样本,这里的 λ 1 N r e g \lambda \frac{1}{N_{reg}} λNreg​1​对应上文中的bbox_outside_weights,用来平衡类别损失和回归损失。回归损失函数 L r e g L_{reg} Lreg​使用 s m o o t h L 1 smooth_{L1} smoothL1​函数,公式如下:

L r e g ( t i , t i ∗ ) = ∑ i ∈ x , y , w , h s m o o t h L 1 ( t i , t i ∗ ) L_{reg}(t_{i},t_{i}^{*})=\sum_{i\in x,y,w,h} smooth_{L1}(t_{i},t_{i}^{*}) Lreg​(ti​,ti∗​)=i∈x,y,w,h∑​smoothL1​(ti​,ti∗​)

s m o o t h L 1 ( x ) = { 0.5 x 2 i f ∣ x ∣ < 1 ∣ x ∣ − 0.5 o t h e r w i s e smooth_{L1}(x) = \left\{\begin{matrix} 0.5x^{2} & if|x|<1 & \\ |x|-0.5 & otherwise & \end{matrix}\right. smoothL1​(x)={0.5x2∣x∣−0.5​if∣x∣<1otherwise​​

参考文章

《深度学习之Pytorch物体检测实战》

C#海康威视摄像头控制,将IntPtr转换成Bitmap图片 C#通过skd控制海康威视摄像头,获取bitmap格式图片 阅读详情

相关推荐

Claude Code VSCode集成开发指南:AI编程助手完整配置

Claude Code与Visual Studio Code的深度集成为开发者提供了强大的AI编程支持。本文详细介绍Claude Code VSCode扩展的安装配置、功能特性和实际应用方法。通过完整的配置流程和代码示例,帮助开发者充分利用Claude AI的智能编程能力。文章涵盖从环境搭建到高级功能应用的完整指南,包括代码自动补全、智能重构、实时代码分析等核心功能的使用技巧,以及与现有开发工作流的整合方案。

2501_93058131的博客 5983

Faster-rcnn中的损失函数

L2 loss RPN网络中对于边框的预测是一个回归问题,通常可以选择平方损失函数,即L2损失。但是当预测值与目标值相差很大时,容易产生梯度爆炸。 L2 loss = L1 loss 我们...

贾路飞的博客 1万+

网卡Inter (R) Wi-Fi 6 AX201突然故障 错误代码10,无法找到无线网络,蓝牙也无效了

问题描述 说来也是坑,简直就莫名其妙。早上在工位上,电脑一切正常(一直用的是无线网络),然后周五准备开周会了,所以拔掉电脑外接设备(电源线,鼠标,外接显示器)拿起电脑到会议室。到了会议室之后,无线网断开了(但一般是不会断开的,都在公司范围内),所以选择重连,但发现已经没有无线网络列表了。 电脑机型:联想YOGA 14s 2021 初步尝试 1、关闭开始飞行模式 - 无果 2、重启并重启 (因为前两天已经提醒过有windows更新,趁这个机会就更新并重启了)- 无果 3、下载鲁大师、驱动精灵、联想驱动管

疯狂的蜗牛 5万+

RPN(Region Proposal Network)

Fast RCNN -RPN论文笔记

qq_52038588的博客 1765

STM32 SAES硬件加密协处理器全模式工程实践指南

AES(高级加密标准)是嵌入式系统中最基础且关键的对称密码算法,其硬件加速实现直接影响安全、性能与功耗平衡。Secure AES Coprocessor(SAES)作为STMicroelectronics在STM32U5等高安全MCU中集成的专用密码协处理器,不仅支持标准ECB/CBC/CTR模式,更原生兼容GCM和CCM等认证加密模式,具备抗侧信道、密钥保护与DMA卸载能力。理解其寄存器状态机(CHMOD/MODE/CPHASE)、NPBLB数据对齐机制及GCM四阶段编程范式,是规避Tag校验失败、IV错

weixin_42311427的博客 76

PX4笔记系列(二)vtol_att_control中的tiltrotor解析

update_vtol_state() 注释:采用两段切换的简单逻辑来进行过渡 当切换过渡开关后,飞机将会开始倾转动力,逐渐加速,当飞机获得足够速度后动力将会完全打到向前的位置。对于过渡返回阶段动力则是简单地倾转回来。 如果(不在向前过渡指令下): 当前vtol飞行模式: 1、旋翼模式 无操作 2、固定翼模式 令vtol飞行模式切换到过渡返回模式 3、P1过渡模式 进入过渡失败安全返回至旋翼模式 4、P2过渡模式 进入过渡失败安全返回至旋翼模式 5、过渡返回模式 记录过渡返回时间=当前时间-过渡开始

hypersonicss的博客 1880

Faster-RCNN简介及损失函数

【Faster RCNN】损失函数理解:https://blog.youkuaiyun.com/Mr_health/article/details/84970776 1. 使用Smoooh L1 Loss的原因 2. Faster RCNN的损失函数 2.1 分类损失 2.2 回归损失 一些感悟 关于文章中具体一些代码及参数如何得来的请看博客: tensorflow+faster rcnn代码解析(二):anchor_target_layer、proposal_target_layer、prop

qq_32790593的博客 4977

Windows下用VS2022编译libcurl全流程(含openssl配置避坑指南)

本文详细介绍了在Windows平台使用Visual Studio 2022编译libcurl库的完整流程,重点解决了集成OpenSSL支持HTTPS功能时的常见配置难题。从环境准备、源码获取、依赖编译到工程配置,提供了清晰的步骤和针对非默认安装路径的避坑指南,帮助开发者高效完成网络库的集成工作。

weixin_29291185的博客 245

Fast(er) rcnn的损失函数总结

Fast R-CNN Fast RCNN将分类与回归做到了一个网络里面,因此损失函数必定是多任务的: 其中分类任务还是我们常用的对数损失, 对数损失, 即对数似然损失(Log-likelihood Loss), 也称逻辑斯谛回归损失(Logistic Loss)或交叉熵损失(cross-entropy Loss), 是在概率估计上定义的.它常用于(multi-nominal, 多项)逻辑...

恋蛩音的博客 1万+

倍福CX9020(WINCE 7)控制器使用方法和操作

CX9020系列是倍福控制器中较为经济的,操作系统为Windows Embedded Compact 7(简称WINCE7或WINEC7),相对高端控制器(WINES7以上系统),操作系统古老而简洁,上位机软件的编写困难很多,本文是笔者在使用过程中摸索的流程,旨在为CX9020系列的新用户提供参考,也可供其他CE系统的控制器参考。本文中大部分截图采用倍福中国的培训文档,这是由于笔者是在流程走通后再写这篇文章,不想再恢复出厂设置走一遍截图。因笔者在写这篇文章时使用倍福控制器经验并不丰富,难免有纰漏,请读者批评

weixin_41883890的博客 4287

代谢组数据分析(十九):随机森林构建代谢组预后模型

建立胃癌(GC)预后模型时,从队列3中的181名患者中,使用右删失结果数据进行了随机分层抽样,分为训练数据集(n = 121)和测试数据集(n = 60)。训练了一个包含1000棵树的随机生存森林(RSF)模型,根据它们基于排列的特征重要性来选择突出的特征。通过再次训练随机生存模型,并选取28种代谢物,建立了显示出色预测能力(AUROC = 0.832,95% CI:0.697-0.951)的最佳模型,用于预测测试数据集中GC患者的生存结果。

专注生信领域 1713

Faster RCNN系列2——RPN的真值与预测值概述

本文简要介绍了RPN中的类别真值、偏移量真值、类别预测值、偏移量预测值的定义,参考书籍《深度学习之Pytorch物体检测实战》

python_plus的博客 1140

[deprecated]第四章:TTM分析: 4.2.1 存储分配ttm_bo_validate功能实现分析

ttm_bo_validate是TTM框架中负责验证和调整BufferObject物理内存分配的核心函数,主要用于显存管理。该函数通过placement参数判断BO是否需要迁移或重新分配资源,完成内存分配、迁移及缓存策略调整等操作。实现流程包括资源释放、兼容性检查、迁移保护、新资源分配、迁移实现等步骤,支持多跳迁移和临时缓冲区。典型应用于显存溢出迁移、缓存策略调整、驱动初始化等场景,确保BO始终处于预期状态。

图形/计算GPU的驱动与虚拟化技术分享园地 846

Faster RCNN系列1——Anchor生成过程

参考书籍《深度学习之Pytorch物体检测实战》

python_plus的博客 1260

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Faster RCNN系列5——RoI Pooling与全连接层

参考《深度学习之Pytorch物体检测实战》

python_plus的博客 891

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Faster RCNN系列4——生成Proposal与RoI

《深度学习之Pytorch物体检测实战》

python_plus的博客 1266

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Faster RCNN原理及Pytorch代码解读——RPN(四):损失函数

前两篇博客已经知道了RPN输出的预测值和真值,有了这些我们就可以计算RPN的损失了。 RPN的损失函数主要包含分类与回归两部分,具体公式如下: L(Pi,ti)=1Ncls∑i=1Lcls(Pi,Pi∗)+λ1Nreg∑i=1Pi∗Lreg(ti,ti∗)L({P_{i}, t_i}) =\frac{1}{N_{cls}} \sum_{i=1} L_{cls}(P_i, P^*_i)+ \lambda \frac{1}{N_{reg}} \sum_{i=1} P^*_iL_{reg}(t_i, t^

weixin_41693877的博客 3698

Faster-rcnn的网络及损失函数

38。

Sircollector的博客 867

【openCV-32】RPN的损失

RPN的损失函数由。

m0_69378371的博客 1188

FasterRCNN模型损失——pytorch实现

【代码】FasterRCNN模型损失——pytorch实现。

Peach_____的博客 1114

MMDetection学习系列(1)——Faster RCNN深度探索与实战指南

自R-CNN以及Fast R-CNN的出现之后,Fast R-CNN仍然有许多缺点,即选择性搜索找出所有的候选框这个也非常耗时,因此性能存在瓶颈,为了解决这个问题,Faster R-CNN就出现了。下图给出的是使用VGG16模型的Faster R-CNN网络结构图,即Faster R-CNN中的conv layers使用的是VGG16的conv layers。总的来说,架构由RPN和Fast-R-CNN构成,RPN生成候选区域,Fast-R-CNN使用RPN生成的候选区域进行分类和回归。

Coovally_AI的博客 1119

Faster-Rcnn代码实现的理解之损失函数

在《Faster-Rcnn代码之网络架构》中,我们采用DetectionTeamUCAS中的Faster-RCNN Tensorflow实现,对Faster-Rcnn的网络架构的代码进行了理解,在这个文章中,我们将对Faster-RCNN的损失函数的定义有关的代码做一些笔记。笔记中难免会出现一些理解的偏差,如有错误,还请各位看官不吝指出,共同学习,共同提高。 先放上faster-rcnn中RPN...

沉稳定风云 1万+

目标检测:Faster R-CNN——ROI Head模块介绍及源码笔记

目标检测:Faster R-CNN——ROI Head模块介绍及源码笔记 目的:为RPN模块提供的每个proposal进行类别预测和回归参数的预测,预测对象类别和微调RPN预测出来的边界区域输入:特征图、proposal输出:物体类别以及对应的边界框坐标模块流程:损失计算过程(这里与RPN模块类似):流程图原创,使用请转载。

qq_50001789的博客 2449

【Faster RCNN】损失函数理解

目录 1. 使用Smoooh L1 Loss的原因 2. Faster RCNN的损失函数 2.1分类损失 2.2 回归损失 一些感悟 关于文章中具体一些代码及参数如何得来的请看博客: tensorflow+faster rcnn代码解析(二):anchor_target_layer、proposal_target_layer、proposal_layer 最近又重新学习了一遍F...

Mr_health的博客 4万+

Faster R-CNN原理与实现:深度学习在计算机视觉中的应用

Faster R-CNN是一种端到端的目标检测模型,它整合了候选区域生成、特征提取、目标分类及位置回归等功能于一体。相比之前的R-CNN系列模型,Faster R-CNN的最大特点在于使用了RPN来替代选择性搜索等传统方法进行候选框的生成,从而大幅提高了检测效率。通过对Faster R-CNN工作原理的学习,我们了解到它是如何高效地完成目标检测任务的。本文不仅介绍了理论知识,还提供了具体的实现代码,希望能帮助读者更好地理解和应用这一强大的工具。

m0_58264325的博客 2145

通俗易懂地了解faster RCNN(RPN区域建议网络)

目标检测之faster RCNN[2015 Ren] ***回顾:*** R-CNN ==> 1image/mni Fast R-CNN ==> 1~2 fps 1. faster RCNN Backbone(神经网络模型) pre-train(预训练) fine-tuning(微调) re-train RPN:Region Proposal Net(区域生成网络 ) 代替selective searchs生成区域建议 输入feature map(特征图),输出一系列ROI(感兴趣区

m0_37223909的博客 9095
上一篇: Faster RCNN系列2——RPN的真值与预测值概述
下一篇: Faster RCNN系列4——生成Proposal与RoI
晓shuo
晓shuo 优质创作者: 人工智能技术领域 优质创作者: 人工智能技术领域
博客等级 码龄6年 4万+粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓shuo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值