当前位置: 首页 > news >正文

Faster RCNN网络数据流总结

前言

在学习Faster RCNN时,看了许多别人写的博客。看了以后,对Faster RCNN整理有了一个大概的了解,但是对训练时网络内部的数据流还不是很清楚,所以在结合这个版本的faster rcnn代码情况下,对网络数据流进行总结。以便自己更好地掌握Faster rcnn。

训练时的数据流

在这个版本的代码中,训练时的batch_size为1。原论文中的网络架构如下所示:
在这里插入图片描述

1 ◯ \textcircled{\scriptsize 1} 1 网络输入

第一部分是网络的输入。网络的输入是一个任意大小的图像,但是在被送入网络之前,会经过一个缩放操作,然后进行normalize。对图像进行缩放的同时,也要对gt_bbox(ground truth bounding box,真实边界框)进行同样的缩放。
具体是怎么缩放的呢?参考这里的代码。

def preprocess(img, min_size=600, max_size=1000):# img: 输入图像# min_size: 图像放缩的最小大小# max_size: 图像放缩的最大大小C, H, W = img.shapescale1 = min_size / min(H, W)scale2 = max_size / max(H, W)scale = min(scale1, scale2)img = img / 255.# resize缩放大小  长和宽等比例缩放img = sktsf.resize(img, (C, H * scale, W * scale), mode='reflect',anti_aliasing=False)

这样的等比例缩放方式,结果就是要么原图较长的边被放大为1000,要么原图较短的边被放大为600。整体上来看是设定了一个放大后的最大最小范围。因为batch_size为1,所以每一张图像缩放后的大小可以不一样,如果batch_size不为1,那么这一个batch内的所有图像缩放后的大小就必须一样。在接下来的讨论中我们忽略batch维度(因为batch是1)

2 ◯ \textcircled{\color{green}\scriptsize 2} 2 特征提取网络

第二部分是特征提取模块。这里的特征提取网络是VGG16,只不过去掉了最后的几层全连接。这里感觉唯一要注意的地方就是,输入图像经过VGG16,大小缩小了16倍(因为有4个池化层),维度增加到了512维度。
如果输入图像 I i n p u t I^{input} Iinput的大小是 [ 3 , x , y ] \left[3,x,y\right] [3,x,y],那么经过特征提取的特征图 I f e a t u r e I^{feature} Ifeature的大小是 [ 512 , x 16 , y 16 ] \left[512, \frac{x}{16},\frac{y}{16}\right] [512,16x,16y]

3 ◯ \textcircled{\color{purple}\scriptsize 3} 3 RPN网络

RPN网络的输入是特征图,先经过通道数为512的3x3卷积,输出仍为 [ 512 , x 16 , y 16 ] \left[512, \frac{x}{16},\frac{y}{16}\right] [512,16x,16y]
右边这个分支为通道数为36(36是因为每个点有9个anchor,每个anchor有4个坐标)的1x1卷积,输出为 [ 36 , x 16 , y 16 ] \left[36, \frac{x}{16},\frac{y}{16}\right] [36,16x,16y],然后对其进行reshap为 [ a n c h o r 的总数 , 4 ] \left[ anchor的总数,4\right] [anchor的总数,4]大小,记为rpn_loc。
左边这个分支为通道数为18(18是因为每个点有9个anchor,每个anchor要么是背景要么是前景,两种可能)的1x1卷积,输出为 [ 18 , x 16 , y 16 ] \left[18, \frac{x}{16},\frac{y}{16}\right] [18,16x,16y]。然后对其经过softmax处理,最终的输出大小为 [ a n c h o r 的总数 , 2 ] \left[anchor的总数,2\right] [anchor的总数,2],记为rpn_score。

在这里插入图片描述
上述这点清楚以后,我们接下来重点关注RPN网络是如何计算损失的,称之为 L o s s R P N Loss^{RPN} LossRPN。我们都知道,计算loss需要网络输出值和标签值,现在网络输出值已经有了,那么标签值从何而来呢?
从上图可以看到有一个AnchorTargeCreator模块,这个模块的输入是我们产生anchor和gt_bbox,计算出anchor与gt_bbox的真实偏差gt_rpn_loc和该anchor到底负责的是背景还是前景gt_rpn_label。我们就分别将gt_rpn_loc和gt_rpn_label作为标签值与rpn_score、rpn_score计算损失,两个损失之和即为 L o s s R P N Loss^{RPN} LossRPN。损失的具体计算公式这里我们不谈。

在bbuf大佬的解读里,“AnchorTargetCreator 就是将 20000 多个候选的 Anchor 选出 256 个 Anchor 进行分类和回归。”代码里也是采样出了256个样本,但是最后返回的真实标签值是所有的anchor大小,而不是256大小。

ProposalCreator模块的含义如下:
在这里插入图片描述
综上,rpn网络除了自身反向传播训练之外,还通过ProposalCreator模块输出2000个anchor。

4 ◯ \textcircled{\color{blue}\scriptsize 4} 4 ProposalTargetCreator模块

ProposalCreator模块输出2000个ROIS并不全部都使用,经过ProposalTargetCreator模块的筛选(通过与gt_bbox的IOU进行筛选)产生正负一共128个rois。同时输出这128个rois的gt_label和gt_loc。

5 ◯ \textcircled{\color{blue}\scriptsize 5} 5 ROI pooling

这里的ROI pooling和fast rcnn中的是一样的,它的输入是特征图128个rois。ROI Pooling将这些不同尺寸的区域全部pooling到同一个尺度(7x7)上。ROP pooling的输出输入给classifier。

6 ◯ \textcircled{\color{blue}\scriptsize 6} 6 classifier

这里的classifier如下图紫色框出的所示。
在这里插入图片描述
这块的全连接网络可以借用VGG16的全连接网络,代码中也是这么做的。
21代表总共有21类,每个anchor属于每个类的概率,输出为 [ 128 , 21 ] [128,21] [128,21];84 = 21 *4,对每个类别都会有一个坐标信息,输出为 [ 128 , 84 ] [128,84] [128,84],然后分别和gt_label、gt_loc计算损失后相加即为classifier的损失。
suppress为推理时的非极大值抑制,训练时用不到。

反向传播

综上所述,我们将rpn网络的损失和classifier的损失相加,然后进行反向传播即可更新参数。
最后放上BBuf大佬总结的faster rcnn的网络流程图。
在这里插入图片描述
本人才识浅薄,若博文中有不正确的地方,欢迎大家进行批评指正,谢谢。
参考连接:giantpandacv
simple-faster-rcnn-pytorch

相关文章:

Faster RCNN网络数据流总结

前言 在学习Faster RCNN时,看了许多别人写的博客。看了以后,对Faster RCNN整理有了一个大概的了解,但是对训练时网络内部的数据流还不是很清楚,所以在结合这个版本的faster rcnn代码情况下,对网络数据流进行总结。以便…...

拒绝摆烂!C语言练习打卡第五天

🔥博客主页:小王又困了 📚系列专栏:每日一练 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、选择题 📝1.第一题 📝2.第二题 &#x1f4d…...

关于LambdaQueryWrapper.or()导致错误

这个是原始的代码,到导致一个问题,后面所有的内容,都在这个or的右边,也就是整个查询语句就这一个or,而很明显( xxx or xxx)and()这才是我们要的,所以需要将这…...

Day17-Node后端身份认证-JWT

Day17-Node后端身份验证 一 密码加密 1 MD5加密 创建MD5.js//node提供了一个内置模块crypto用于密码加密 const crypto = require("crypto")module.exports.getMd5 = function(password){const md5...

onvif中imaging setting图像画质总结!

前言: 大家好,今天给大家来分享一篇关于图像质量的内容,这个内容是我在做onvif中的imaging setting的时候,关注到里面有关于: brightness(亮度)color saturation(色彩饱和度)contrast(对比度)sharpness(锐度)white balance(白平衡…...

not in效率低(MYSQL的Not IN、not EXISTS如何优化)

【版权所有,文章允许转载,但须以链接方式注明源地址,否则追究法律责任】【创作不易,点个赞就是对我最大的支持】 前言 仅作为学习笔记,供大家参考 总结的不错的话,记得点赞收藏关注哦! 目录 …...

微信小程序拉起支付报: 调用支付JSAPI缺少参数: total_fee

1. 调用支付JSAPI缺少参数: total_fee 2. 检查返回给前端调起支付的参数是否正确 一开始是params.put("package", prepay_id); 回来改回params.put("package", "prepay_id"prepay_id);...

Thinkphp6 如何 生成二维码

最近需要用到使用到二维码,需要将对应的网址输出生成二维码,Thinkphp6实现还是比较简单的: 第一步:安装 think-qrcode composer require dh2y/think-qrcode第二步:在对应的控制器使用 use dh2y\qrcode\QRcode;第三步&a…...

01.机器学习引言

1.机器学习的步骤 1. 数据搜集 其中数据划分,是将数据集分为训练集、验证集和测试集(通常不考虑时间) 2. 数据清洗 3. 特征工程 提取对象:原始数据(特征提取一般在特征选择之前) 提取目的:…...

结构型(二) - 桥接模式

一、概念 桥接模式(Bridge Pattern):是用于把抽象化与实现化解耦,使得二者可以独立变化。它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 另一种理解方式:一个类存在两个(或多个…...

多维时序 | MATLAB实现WOA-CNN-GRU-Attention多变量时间序列预测

多维时序 | MATLAB实现WOA-CNN-GRU-Attention多变量时间序列预测 目录 多维时序 | MATLAB实现WOA-CNN-GRU-Attention多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现WOA-CNN-GRU-Attention多变量时间序列预测,WOA-CNN-GR…...

C#与西门子PLC1500的ModbusTcp服务器通信1--项目背景

最近在一个120万元的项目中,涉及到modbustcp通信,我作为软件总工负责项目的通信程序开发,modbus是一个在工业自动化领域中的通信协议,可以是modbusrtu,modbusascii,modbustcp三个形式,具体来说是…...

Socks5代理与IP代理:网络安全与爬虫之道

1. Socks5代理的多功能性 Socks5代理是一种支持TCP和UDP协议的代理技术,适用范围广泛。不同于传统HTTP代理,Socks5代理在传输数据时更为灵活,可以满足实时数据传输的需求,适用于在线游戏、视频流等场景。此外,Socks5代…...

苹果电脑怎么录屏?步骤详解,看到就是赚到

苹果电脑作为一款受欢迎的高性能设备,不仅在日常工作中发挥着重要作用,还可以用于创造内容,如录制屏幕内容。录屏功能能够帮助用户将屏幕上的活动记录成视频,方便分享、演示或存档。可是您知道苹果电脑怎么录屏吗?通过…...

vb毕业生管理系统设计与实现

【摘要】 本毕业生管理系统是使用VB和ACCESS数据库为开发工具开发的一个全新的管理系统(MIS)。开发出的软件可以在任何一个装有VB环境的机器上运行。本毕业生管理系统包括六个子模块:用户登陆模块、学籍管理模块、学生成绩模块、毕业设计选题模块、毕业设计成绩管理模块、系…...

WPF入门到精通:4.页面增删改查及调用接口(待完善)

在WPF中,页面的增删改查可以通过使用DataGrid等控件来实现。接口的调用可以使用HttpClient或RestSharp等网络库来完成。 1.页面增删改查 使用DataGrid控件来展示数据,并通过绑定数据源来实现数据的增删改查操作。示例代码如下: XAML代码&a…...

容器和云原生(三):kubernetes搭建与使用

目录 单机K8S docker containerd image依赖 kubeadm初始化 验证 crictl工具 K8S核心组件 上文安装单机docker是很简单docker,但是生产环境需要多个主机,主机上启动多个docker容器,相同容器会绑定形成1个服务service,微服务…...

spring boot集成jasypt 并 实现自定义加解密

一. 技术需求 由于项目中的配置文件 配置的地方过多,现将配置文件统一放到nacos上集中管理 且密码使用加密的方式放在配置文件中 项目中组件使用的版本环境如下 spring cloud 2021.0.5 spring cloud alibaba 2021.0.5.0 spring boot 2.6.13 二. 技术实现 配置文…...

Qt文件系统操作和文件的读写

一、文件操作类概述 QIODevice:所有输入输出设备的基础类 QFile:用于文件操作和文件数据读写的类QSaveFile:用于安全保存文件的类QTemporaryFile:用于创建临时文件的类QTcpSocket和QUdpSocket:分别实现了TCP和UDP的类…...

MME: A Comprehensive Evaluation Benchmark for Multimodal Large Language Models

本文也是LLM系列相关文章,针对《MME: A Comprehensive Evaluation Benchmark for Multimodal Large Language Models》的翻译。 MME:一个多模态大型语言模型的综合评估基准 摘要1 引言2 MME评估套件3 实验4 分析5 结论 摘要 多模态大语言模型(MLLM&…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...