4 -【Faster R-CNN】之 RPN Head 代码精读

news2024/11/15 10:46:03

【Faster R-CNN】之 RPN Head 代码精读

  • 1、前言
  • 2、RPN Head 网络结构
  • 3、代码
  • 4、相关问题

1、前言

在上一篇文章 【Faster R-CNN】之 backbone 代码精读 中,我们学习了创建 backbone,并将 batch 中的图片通过backbone 获得了 feature maps。 batch 的 feature map size 类似为 [batch_size, out_channel, ]

其中:

  • batch_size, 是根据 gpu性能,我们自己指定的
  • out_channel : 是由 backbone 决定的,比如我们采用的是 resnet18 前部分到 layer4 的结构作为 backbone, 输出的 channel 就是 512
  • height, width : 是由 batch中的图片尺寸 和 backbone 共同决定的。 值得注意的是,同一个 batch 中的图像尺寸是相同的,不同 batch 间的图像尺寸是不一样的。所以,不同 batch 获得的 feature map 的 高和宽 是不一样的。

2、RPN Head 网络结构

在获得 feature map 之后,我们就要考虑 怎么预测 候选框(proposals) 的坐标,以及候选框的置信度了。 使用网络结构 如下:

在这里插入图片描述

这里网络相对简单,就不详细介绍了

3、代码

class RPNHead(nn.Module):
    def __init__(self, in_channels, num_anchors):
        super(RPNHead, self).__init__()
        self.conv = nn.Conv2d(in_channels, in_channels, kernel_size=3, stride=1, padding=1)
        # 预测 bounding box 中有 object 的概率 (为前景的概率)
        self.cls_logits = nn.Conv2d(in_channels, num_anchors, kernel_size=1, stride=1)
        # 预测 bounding box regression 参数
        self.bbox_pred = nn.Conv2d(in_channels, num_anchors * 4, kernel_size=1, stride=1)
		
		# 初始化模型参数
        for layer in self.children():
            if isinstance(layer, nn.Conv2d):
                torch.nn.init.normal_(layer.weight, std=0.01)
                torch.nn.init.constant_(layer.bias, 0)

    def forward(self, x):
        t = F.relu(self.conv(x))
        return self.cls_logits(t), self.bbox_pred(t)

假设 feature map 的 shape =(8, 512, 38, 40),经过 conv 3x3 得到的尺寸同样是 (8, 512, 38, 40),最后通过 conv 1x1 得到的 object 概率的 shap 为 (8, 15, 38, 40), 经过 conv 1x1 得到的 bounding box regression 的 shap 为 (8, 60, 38, 40)。


4、相关问题

问:为什么 RPN Head 的两个输出的 shape分别是 (8, 15, 38, 40) 和 (8, 60, 38, 40)呢?

强烈建议 结合下一篇文章 【Faster R-CNN】之 AnchorGenerator 代码精读 一起看,下篇文章 介绍了 anchor 与 feature map 、原图、bounding box 之间的关系。

  • object 概率的 shap 为 (8, 15, 38, 40),其中:8是batch size,表示batch 中有8张图像;(38,40)对应着 feature map 的每一个像素,15 对应着每个anchor; 矩阵中的每个值就 表示每张 feature map 中的每个像素 的 每个anchor 为 前景的概率。

  • bounding box resresison 的 shape 为(8, 60, 38, 40),其中:8是batch size,表示batch 中有8张图像;(38,40)对应着 feature map 的每一个像素,60 对应着 15 个 bounding box 的 4 个坐标位置(xmin, ymin, xmax, ymax); 矩阵中的每个值就 表示每张 feature map 中的每个像素 对应在原图中的 bounding box 的 4个坐标之一。


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

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

相关文章

linux的shell命令中grep命令返回值问题

linux的shell命令中grep命令返回值问题如何查看上一个命令退出状态?$?的作用set -e的作用一个代码例子shell脚本中的错误示例如何查看上一个命令退出状态? $?的作用 $? 是一个特殊变量,用来获取上一个命令的退出状态,或者上一…

【C语言练习】杨氏矩阵、杨辉三角

目录一:杨氏矩阵🐻何为杨氏矩阵?🐻题目描述:🐻思路一:🐻思路二:二:杨辉三角🐻何为杨辉三角?🐻题目描述:&#…

python数据结构(四):dict(字典)

一、定义字典 1、使用花括号,可以直接定义字典 使用一对大括号{},数据是成对存在的,每一行冒号左边的是键(key),右边的是值(value),称作键值对,以逗号分隔开。键是不能重…

Fennec:针对类Unix操作系统的多功能事件应急响应工具箱

关于Fennec Fennec是一个针对类Unix操作系统的多功能事件应急响应工具箱,Fennec基于Rust开发,可以帮助广大研究人员在类Unix操作系统上实现网络安全事件应急响应。除此之外,Fennec还支持广大研究人员自行开发相关的配置文件,并增…

第一章.感知机

第一章.感知机 1.感知机的简介 1).简介 感知机接收多个输入信号,输出一个信号。感知机的信号只有"流/不流"(1/0)两种取值[0:对应不传递信号,1:对应传递信号] 2).感知机图像描述的两种方式 ①.第一种方式: …

css3 transform(变形) 实战示例

1--利用transform实现居中效果 <div class"center">.... </div> .center{text-align: center;background-color: #fff;border-radius: 20px;width: 300px;height: 350px;position: absolute;left: 50%;top: 50%;transform: translate(-50%,-50%); } 让…

第一章 隐私计算科普解读

前言 提醒&#xff1a;全文10千字&#xff0c;预计阅读时长15分钟&#xff1b;读者&#xff1a;对隐私计算感兴趣的小伙伴&#xff1b;目的&#xff1a;读者利用15~30 分钟对本文沉浸式阅读理解&#xff0c;能够掌握隐私计算 80% 的概念&#xff1b;关键词 &#xff1a;隐私计算…

全网最细------爬取4k付费高清大图(免费下载再也不是梦)

本次案例将教大家免费爬取4k高清付费大图&#xff0c;即使你是爬虫新手&#xff0c;也可以食用本次文章实现你的免费下载梦,话不多说&#xff0c;先看效果 网站视图: 看到这些图片你是否怦然心动&#xff0c;跟着我一起看下去. 下图是图片下载后保存的目录 一.思路分析 首…

QEMU安装Windows 10的完整过程

零、环境介绍 宿主机&#xff1a; Ubuntu 22.04.1 LTS Windows 10镜像&#xff1a; Windows10_20H2.iso QEMU版本&#xff1a; qemu-img version 7.1.0 Copyright (c) 2003-2022 Fabrice Bellard and the QEMU Project developers 一、安装过程 1. 创建镜像文件 使用qe…

7、标识重复个案

目录 一、导入或打开数据 二、选择“数据”菜单下的“标识重复个案”&#xff0c;弹出相应对话框 三、在上个步骤的基础上&#xff0c;将左边的所有变量都移至右边“定义匹配个案的依据”中&#xff0c;其他的选项没有特殊要求的可保持默认&#xff0c;单击“确定”即完成。…

Cookie 和 Session 详解 及实现用户登陆功能

Cookie是啥? 浏览器提供的在客户端存储数据的一种机制。(由于浏览器禁止了网页中的代码直接访问磁盘的文件因此要想再网页中实现数据的持久化存储、就可以使用Cookie这样的机制 Cookie 里面存什么? 键值对结构.键和值都是程序猿自定义的~Cookie从哪里来? 服务器返回响应…

【Java|golang】2325. 解密消息

给你字符串 key 和 message &#xff0c;分别表示一个加密密钥和一段加密消息。解密 message 的步骤如下&#xff1a; 使用 key 中 26 个英文小写字母第一次出现的顺序作为替换表中的字母 顺序 。 将替换表与普通英文字母表对齐&#xff0c;形成对照表。 按照对照表 替换 mess…

【23 Java后端】小米

一、JavaSE JaveEE —— Java 数据结构 —— 集合类 1. HashMap 底层&#xff0c;链表与红黑树转换原因 JDK 1.7 HashMap 底层使用 “数组链表” 实现&#xff0c;数组为主体&#xff0c;链表为了解决 哈希冲突JDK 1.8 HashMap 底层使用 “数组链表红黑树” 实现 当链表长度…

bootstrap是什么,bootstrap如何使用

bootstrap是什么 Bootstrap 是最受欢迎的 HTML、CSS 和 JS 框架&#xff0c;用于开发响应式布局、移动设备优先的 WEB 项目。 使用bootstrap 下载地址

Power BI散点图

散点图可以让一大堆令人困惑的散乱数据变得通俗易懂&#xff0c;并能让你从这些庞杂数据中发现一些表面上看不到的关系&#xff0c;数据量越大&#xff0c;从散点图的分布中越能看出来一些规律。 什么是散点图 在直角坐标系中&#xff0c;用两组数据构成多个坐标点&#xff0…

【无标题】质量管理10题

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

使用 WSL2 进行 Go 开发

文章目录1. 安装 WSL22. 配置 Ubuntu 环境配置 root 用户密码设置默认 root3. 配置 Go 环境下载 SDK配置环境变量配置 GOPROXY4. 使用 GoLand 进行开发由于 kitex 目前对 Windows 下自动生成代码适配不完善&#xff0c;因此使用 WSL2 进行 Go 的开发&#xff0c;在配置 WSL2 环…

IEEE参考文献格式生成 之 谢谢你Zotero!

谢谢你Zotero&#xff01;心酸的开始方法1&#xff08;有文献pdf&#xff09;方法2&#xff08;无文献pdf&#xff09;方法3&#xff08;自己写&#xff09;怎么找到bib文件呢&#xff1f;期刊论文会议论文书籍&#xff08;专著&#xff09;心酸的开始 一开始在看到论文模板的…

20230202英语学习

How James Webb Space Telescope Changed Astronomy in Its First Year 你最爱的这些绝美图像&#xff0c;正在改变宇宙学 The most pressing aim of JWST is one of the most ambitious projects in the recent history of astronomy: to look back at some of the first ga…

力扣刷题记录——1078. Bigram 分词、1207. 独一无二的出现次数 、1089. 复写零

本专栏主要记录力扣的刷题记录&#xff0c;备战蓝桥杯&#xff0c;供复盘和优化算法使用&#xff0c;也希望给大家带来帮助&#xff0c;博主是算法小白&#xff0c;希望各位大佬不要见笑&#xff0c;今天要分享的是——《力扣刷题记录——1078. Bigram 分词、1207. 独一无二的出…