Faster RCNN系列——RPN的真值详解

news2024/11/24 16:16:53

  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()

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

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

相关文章

C++|引用篇

目录 引用概念 引用的用法 做函数形参 优点一 优点二 引用做返回值 让我们更深入的了解引用与指针 语法层引用与指针完全不同的概念 站在底层的角度看指针与引用 引用概念 在语言层面上&#xff1a;引用不是定义新的变量&#xff0c;而是给已存在变量再取一个别名&am…

Spring——读取和存储(包含五大注解,对象装配,注入关键字)

目录 一、创建Spring项目 1. 创建一个普通的maven项目 2. 添加Spring框架支持&#xff08;spring-context&#xff0c;spring-beans&#xff09; 3. 添加启动类 二、Bean对象的读取和存储——不使用注释版 1. 创建Bean 2. 将Bean注册到容器 3. 获取并使用Bean对象 3.1…

Faster RCNN系列——Anchor生成过程

一、RPN模块概述 RPN模块的输入、输出如下&#xff1a; 输入&#xff1a;feature map&#xff08;输入图像经过特征提取网络后得到的特征图&#xff09;、物体标签&#xff08;训练集中所有物体的类别和边框信息&#xff09;输出&#xff1a;Proposal&#xff08;生成的建议框…

KD-2125地下管线故障测试仪

一、产品概述 KD-2125电缆综合探测仪&#xff08;管线仪&#xff09;可进行地下电缆线路&#xff08;停电/带电&#xff09;和金属管道等敷设路径探测、识别、埋深测量&#xff1b;以及路灯电缆、地埋线路的故障查找等&#xff0c;同时也可进行地下带电线缆排查。该设备以其优越…

Android---内存性能优化

内存抖动 内存抖动是由于短时间内有大量对象进出新生区导致的&#xff0c;内存忽高忽低&#xff0c;有短时间内快速上升和下落的趋势&#xff0c;分析图呈锯齿状。 它伴随着频繁的 GC&#xff0c;GC 会大量占用 UI 线程和 CPU 资源&#xff0c;会导致 APP 整体卡顿&#xff08;…

07 dubbo源码学习_集群Cluster

1. 入口2. 源码分析2.1 FailbackClusterInvoker2.2 FailoverClusterInvoker 失败自动切换2.3 FailfastClusterInvoker 快速失败2.4 FailsafeClusterInvoker 失败安全2.4 FailsafeClusterInvoker 并行调用多个服务提供者,只要有一个返回,就立即响应3. 如何使用本篇主要介绍集群…

Python VTK STL 映射三维模型表面距离

目录 前言&#xff1a; 效果&#xff1a; 实现步骤&#xff1a; Code: 前言&#xff1a; 本文介绍了Python VTK映射三维模型表面距离&#xff0c;通过如何使用VTK计算两个三维模型(stl)的表面距离&#xff0c;并将其距离值以颜色映射到模型&#xff0c;可用于对比 两相模型…

智慧养老平台建设方案word

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除。 1、 总体设计 1.1 建设原则 养老机构智能化管理工程是一项涉及多学科知识的复杂的系统工程&#xff0c;养老机构智能化管理围绕机构发展战略&#xff0c;立足机构需求&…

超星项目er图,进程

一.er图 二. 进程&#xff1a;发现之前的写的分类太乱而且服务端与客户端未分离&#xff0c;于是分离客户端与服务端&#xff0c;然后将客户端的界面三个程序整理放在三个包下&#xff0c;在服务端与客户端的数据交互方面采用序列化与反序列化进行功能判断采用以及数据传输&a…

WPF入门教程(六)--依赖属性(2)--属性值优先级与继承

一、 依赖属性的优先级 由于WPF 允许我们可以在多个地方设置依赖属性的值&#xff0c;所以我们就必须要用一个标准来保证值的优先级别。比如下面的例子中&#xff0c;我们在三个地方设置了按钮的背景颜色&#xff0c;那么哪一个设置才会是最终的结果呢&#xff1f;是Black、Re…

【论文阅读】On clustering using random walks

《On clustering using random walks》阅读笔记 1. 问题建模 1.1 问题描述 let G(V,E,ω)G(V,E,\omega)G(V,E,ω) be a weighted graph, VVV is the set of nodes, EEE is the edge between nodes in VVV, ω\omegaω is the function ω&#xff1a;E→Rn\omega&#xff1a…

网络基础2【HTTP、UDP、TCP】

目录 一.应用层 1.协议 2.网络版计算器 3.HTTP协议 &#xff08;1&#xff09;了解url和http &#xff08;2&#xff09;http的用处 &#xff08;3&#xff09;urlencode和urldecode &#xff08;4&#xff09;http协议格式 4.HTTPS协议 &#xff08;1&#xff09;加密…

《花雕学AI》用ChatGPT创造猫娘角色:人工智能角色扮演聊天对话的风险与对策

出于好奇心&#xff0c;我以“ChatGPT&#xff0c;调教猫娘”为题&#xff0c;开始了解ChatGPT角色扮演提示语的用法。ChatGPT给出的介绍是&#xff0c;调教猫娘是一种利用ChatGPT的角色扮演功能&#xff0c;让模型模仿一种类似猫的拟人化生物的行为和语言的活动&#xff0c;并…

【云原生网关】apisix使用详解

目录 一、apisix介绍 1.1 apisix是什么 二、apisix特点 2.1 多平台支持 2.2 全动态能力 2.3 精细化路由 2.4 对运维友好 2.5 多语言支持 三、apisix优势 3.1 apisix生态全景图 3.2 apisix定位 3.3 apisix优点 3.4 与nginx对比 四、apisix应用场景 4.1 Load Bala…

设计模式-结构型模式之桥接模式

2. 桥接模式2.1. 模式动机设想如果要绘制矩形、圆形、椭圆、正方形&#xff0c;我们至少需要4个形状类&#xff0c;但是如果绘制的图形需要具有不同的颜色&#xff0c;如红色、绿色、蓝色等&#xff0c;此时至少有如下两种设计方案&#xff1a;第一种设计方案是为每一种形状都提…

Python 基础(七):常用运算符

❤️ 博客主页&#xff1a;水滴技术 &#x1f338; 订阅专栏&#xff1a;Python 入门核心技术 &#x1f680; 支持水滴&#xff1a;点赞&#x1f44d; 收藏⭐ 留言&#x1f4ac; 文章目录一、算术运算符二、按位运算符2.1 按位与 &2.2 按位或 |2.3 按位异或 ^2.4 按位取反…

Three.js教程:顶点颜色数据插值计算

推荐&#xff1a;将 NSDT场景编辑器 加入你3D工具链 其他工具系列&#xff1a; NSDT简石数字孪生 顶点颜色数据插值计算 上节课自定义几何体给大家介绍了一个顶点位置坐标概念&#xff0c;本节课给大家介绍一个新的几何体顶点概念&#xff0c;就是几何体顶点颜色。 通常几何体…

python学习笔记(二)IF、FOR、WHILE、break、continue、函数定义与调用、面向对象

笔记二 流程控制if条件语句for循环语句while循环语句break 和continue python 函数定义与调用函数与调用函数的脚本分离脚本模板函数参数匿名参数变量作用域全局变量与局部变量 python面向对象类的创建实例的创建属性、方法的访问属性的添加、删除和修改属性的访问python内置类…

( “树” 之 前中后序遍历 ) 144. 二叉树的前序遍历 ——【Leetcode每日一题】

基础概念&#xff1a;前中后序遍历 1/ \2 3/ \ \ 4 5 6层次遍历顺序&#xff1a;[1 2 3 4 5 6]前序遍历顺序&#xff1a;[1 2 4 5 3 6]中序遍历顺序&#xff1a;[4 2 5 1 3 6]后序遍历顺序&#xff1a;[4 5 2 6 3 1] 层次遍历使用 BFS 实现&#xff0c;利用的就是 BFS…

写不了博客了吗?

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…