BasicVSR++代码解读(分模块介绍-前向传播函数)

news2024/11/17 9:30:38

一、前向传播函数def forward(self, lqs):
输入:低质量序列L,shape为**(n, t, c, h, w)
输出HR序列,shape
(n, t, c, 4h, 4w)**。
在这里插入图片描述
(1)读取输入数据的维度大小
    这里的n,t,c,h,w分别表示:一个bitch的图片数量,镜像扩展序列的标签,通道数(RGB为3),竖直像素,水平像素。数据的大小是(1,30,3,64,64)这里的t=30是可以设置的。

train_dataloader = dict(
num_workers=6, batch_size=1, dataset=dict(num_input_frames=30))

    也就是一次读取的图片数量,这里设置为30,所以t=30。

n, t, c, h, w = lqs.size()

(2)是否使用CPU去缓存数据
    这里的核心参数是cpu_cache_length这里的意思是如果你的序列长度大于了你设定的长度,那么会将中间特征传给CPU计算,如果你的GPU够大,这里可以设定的大一点,让GPU尽可能去使用。

# whether to cache the features in CPU (no effect if using CPU)
        if t > self.cpu_cache_length and lqs.is_cuda:
            self.cpu_cache = True
        else:
            self.cpu_cache = False

(3)是否是低质量序列
    输入是不是低质量序列,是的话就克隆一份数据,不是的话就使用bicubic双三次差值制作一份低质量序列。

if self.is_low_res_input:
    lqs_downsample = lqs.clone()
else:
    lqs_downsample = F.interpolate(
        lqs.view(-1, c, h, w), scale_factor=0.25,
        mode='bicubic').view(n, t, c, h // 4, w // 4)

(4)检测是否是镜像扩展序列
    检查输入是不是镜像扩展序列,调用self.check_if_mirror_extended()函数,返回值是self.is_mirror_extended值为True或者False。默认不是镜像扩展序列(false)。

(5)计算空间特征
    从这里开始就要设计到对原数据的处理了,主要是计算空间特征,计算光流,传播这三块内容。
feats={}去保存特征,这是一个字典,其中用'spatial'关键词去保存特征。cpu_cache表示是否使用了cpu缓存,该值决定了特征计算的过程,默认是false。这里以没有使用为例子。首先self.feat_extract(lqs.view(-1, c, h, w)),因为已经是低质量图像了,所以是用在Basicvsr里面有的一个残差模块来提取特征ResidualBlocksWithInputConv(3, mid_channels, 5)
    ResidualBlocksWithInputConv(3, mid_channels, 5)的三个参数分别为输入通道,输出通道,残差块数量。下图是残差模块的网络结果示意图,残差块一共是5个。之后再分析这个网络。输出特征的大小应该是(1,30,64,64,64)。
在这里插入图片描述
(6)光流计算模块
    使用flows_forward, flows_backward = self.compute_flow(lqs_downsample)去计算光流,输入是低分辨率图像张量的拷贝,输出前向和后向光流。因为要前向和后向起点分别为第一帧图和最后一帧图,所以要分别去保存。使用self.spynet(lqs_1, lqs_2).view(n, t - 1, 2, h, w)self.spynet(lqs_2, lqs_1).view(n, t - 1, 2, h, w)分别计算前向和后向(因为不是镜像扩展序列)。这里就不具体讲了,后续会单独讲。输出是(1,29,2,64,64)的大小。

(7)特征传播模块
    在模型传播图里面可以看到有两次前向传播和两次后向传播,所以我们也要区分一下,主要就是按照backward_1,backward_2,forward_1,forward_2这四个,要分别计算帧数间的特征,可以先在特征字典里保存这4个关键字。然后根据是前向还是后向,确定光流是哪一个。然后将特征,模型(就是前面那四个之一),和特征字典传到self.propagate里面最后返回该次计算的特征,最后一步是进行上采样。
在这里插入图片描述

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

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

相关文章

数据结构之双向链表,实现双向链表的增删改查

目录 一、双向链表的定义 1.双向链表节点的定义 2.双向链表的初始化 二、双向链表的函数接口实现 1.双链表的尾插 2.双向链表的尾删 3.双向链表的头插 4.双向链表的头删 6.双向链表在pos前面插入 7.双向链表删除pos位置的节点 8.双向链表的销毁 总结 一、双向链表的定义 双向链…

PyQt5桌面应用开发(11):摸鱼也要讲基本法,两个字,16

本文目录 PyQt5桌面应用系列鼠标不要钱,手腕还不要钱吗?PyQt5源程序python文件资源定义界面定义文件 技术要素资源文件StyleSheetsQMainWindow设置窗体几何 结论 PyQt5桌面应用系列 PyQt5桌面应用开发(1):需求分析 PyQ…

EC6110-Hi3798MV310-当贝纯净桌面-卡刷强刷固件包

EC6110-Hi3798MV310-当贝纯净桌面-卡刷强刷固件包-内有教程及短接点 特点: 1、适用于对应型号的电视盒子刷机; 2、开放原厂固件屏蔽的市场安装和u盘安装apk; 3、修改dns,三网通用; 4、大量精简内置的没用的软件&a…

【信息安全案例】——网络攻击分析(学习笔记)

📖 前言:随着信息技术的发展,网络空间的斗争可谓是兵家必争之地,网络攻击的事件层出不穷。道高一尺魔高一丈,了解常见的网络攻击类型有利于我们日后工作生活的安全稳定。 目录 🕒 1. 网络攻击威胁&#x1f…

CM211-2-YS-Hi3798MV300/MV310-当贝纯净桌面线刷固件包(可救砖)

CM211-2-YS-Hi3798MV300/MV310-当贝纯净桌面线刷固件包(可救砖)-内有教程 特点: 1、适用于对应型号的电视盒子刷机; 2、开放原厂固件屏蔽的市场安装和u盘安装apk; 3、修改dns,三网通用&…

05- 算法解读 R-CNN (目标检测)

要点: R-CNN可以说是利用深度学习进行目标检测的开山之作。 一 R-CNN算法 R-CNN可以说是利用深度学习进行目标检测的开山之作。作者Ross Girshick多次 在PASCAL VOC的目标检测竞赛中折桂,曾在2010年带领团队获得终身成就奖。 RCNN算法流程可分为4个步…

ACM输入输出

写在前面 主要记录一下ACM输入输出的写法&#xff1b; 一、输入数值 1. 给定N的定长多行输入 题目&#xff1a;https://ac.nowcoder.com/acm/contest/5657/B&#xff1b; 代码&#xff1a; #include <iostream> #include <stdio.h> using namespace std;int m…

JavaWeb《后端内容:1. Tomcat - Servlet - Thymeleaf》

目录 1. 基础概念 1.1 BS架构和CS架构 1.2 Tomcat图解 2.TomCat 2.1 IDEA配置web项目和tomcat 2.2 idea启动TomCat因为端口号失败的问题 3.Servlet使用流程 3.1 Servlet简单图解 3.2 Servlet导入依赖 3.3 编写Servlet和add.html 3.4 试着使用Jdbc和Dao层连接水果库存…

如何是Jetpack Compose构建漂亮的应用程序

如何是Jetpack Compose构建漂亮的应用程序 Jetpack compose 是在 Android 上构建 UI 的未来。 如果您完全不熟悉 android 并且不知道 Jetpack Compose 是什么——它基本上是一种构建本机用户界面的新方法。 Jetpack compose官方站点 https://developer.android.com/jetpack/co…

MySQL执行顺序

MySQL执行顺序 MySQL语句的执行顺序也是在面试过程中经常问到的问题&#xff0c;并且熟悉执行顺序也有助于SQL语句的编写。 SELECT FROM JOIN ON WHERE GROUP BY HAVING ORDER BY LIMIT执行顺序如下&#xff1a; FROM ON JOIN WHERE GROUP BY # (开始使用别名) SUM # SUM等…

4.4——多重继承

在前面学习了一个派生类只有一个基类&#xff0c;这种派生方法称为单继承或单基派生。当一个派生类具有两个或多个基类时&#xff0c;这种派生方法称为多重继承或多基派生。 多重继承派生类的声明 在C中&#xff0c;声明具有两个以上基类的派生类与声明单基派生类的形式相似&a…

K8S:二进制安装K8S(单台master)

目录 一、安装K8S 1、拓扑图​编辑 2、系统初始化配置 3、部署docker引擎 4、部署etcd集群 ①etcd简介 ②准备签发证书环境 ③etcd部署 5、master部署组件 6、 部署 Worker Node 组件 7、 node节点部署flannel网络插件 一、安装K8S 1、拓扑图​​​​​​​ 2、系…

C++好难(4):类和对象(下)

okk我们终于来到了C类和对象的最后一节&#xff0c;大多都是对之前学习的内容做的补充 所以加油继续冲啦&#xff01; ∧_∧::   (&#xff65;ω&#xff65;):: /⌒  ⌒):: /へ_&#xff3f; / /:: (&#xff3f;&#xff3c;&#xff3c; &#xff90;)/::   &am…

一种轻松且客观介绍大模型方式,避免过度解读:一

这是我关于《一种轻松且客观介绍大模型方式&#xff0c;避免过度解读》第一篇 一、前言 这篇文章旨在为没有计算机科学背景的读者提供一些关于ChatGPT及其类似的人工智能系统&#xff08;如GPT-3、GPT-4、Bing Chat、Bard等&#xff09;如何工作的原理。ChatGPT是一种聊天机器…

【网络安全】mysql数据库提权

数据库提权 数据库提权适用场景前提条件提权步骤如何探查数据库服务是否启动 mysql提权mysql 获取数据库最高权限账号密码方法1.读取网站配置文件2. 读取数据库存储或备份文件3. 脚本暴力破解 利用udf提权udf定义udf提权原理udf常用函数1. 获取mysql版本号2.udf.dll放置到被攻击…

华为P60 Pro灵犀双Wi-Fi流畅通信,让你体验超凡网速

家里装有宽带的朋友&#xff0c;用手机进行无线网络连接时&#xff0c;经常会发现有2.4G和5G两个Wi-Fi信号网络。Wi-Fi信号是通过无线电波传输的&#xff0c;2.4G和5G是两个不同的频段&#xff0c;Wi-Fi信号就在这样的频段内进行传输。 2.4G信号频率低&#xff0c;在空气或障碍…

【机器学习】集成学习(理论)

集成学习&#xff08;理论&#xff09; 目录 一、何为集成学习二、集成学习最简单的模型&#xff1a;投票策略三、弱学习器的组合算法&#xff1a;自助聚合&#xff08;Bagging模型&#xff09;1、数据划分方法&#xff1a;自助法&#xff08;Bootstrap Method&#xff09;2、B…

决策树的介绍

一、介绍 决策树 (decision tree) 是一类常见的机器学习方法。它是一种树形结构&#xff0c;其中每个内部节点表示一个属性上的判断&#xff0c;每个分支代表一个判断结果的输出&#xff0c;最后每个叶节点代表一种分类结果。 例如&#xff0c;我们要对"这是好瓜吗?&qu…

3.docker—应用部署MySQL

文章目录 1、mysql部署2、使用Navicat客户端来连接 docker应用部署 docker出现后&#xff0c;这些软件的安装会变得比较简单 1、mysql部署 四步走&#xff1a; 1️⃣搜索mysql镜像 2️⃣拉取mysql镜像 3️⃣创建容器 4️⃣操作 遇到问题&#xff1a; 容器内的网络服务和…