BasicVSR++代码解读(总体介绍)

news2024/12/28 18:42:21

    本文代码主要来自于OpenMMLab提供的MMEditing开源工具箱中的BasicVSR++代码。第一部分的解读主要是针对每一个部分是在做什么提供一个解释,便于后续细读每一个块的细节代码。
(1)导入库
    basicvsr_plusplus_net中主要继承了torch,mmcv,mmengine,mmedit这几个三方的库,还继承了上一作模型basicvsr,主要是继承了其中的特征提取光流这两个部分的内容。
(2)初始化
    使用def __init__super().__init__(调用父类方法)去进行了初始化,主要是对一些训练参数,是否采用预训练光流和对后面各个模块进行了一定的初始化。
(3)镜像扩展序列检测模块def check_if_mirror_extended(self, lqs)
    这一块主要是检测输入的数据lqs(low quality sequence)低质量序列是否是镜像扩展的。我们知道对于一个图片,把他变成张量主要有4个参数(n,c,h,w)主要就是一个bitch的图片数,通道数,长,宽。但是在该模型中输入的数据是(n,t,c,h,w)多了一个t维的数据,在检测中也是依据这个维度进行检测的(check if the sequence is augmented by flipping,检查序列是否通过翻转增广)。
    关于检测输入是否为镜像扩展,最主要的作用就是为后续计算光流做准备,因为图像是从前往后,还是从后往前的输入,它的下一帧的光流是不一样的,而在basicvsr++中既要从前往后,也要从后往前,所以这一步是必要的,
(4)光流计算模块def compute_flow(self, lqs):
    这里会根据预训练光流模型,根据视频帧流是正向还是反向决定返回的光流是正向光流还是反向光流。
(5)传播模块def propagate(self, feats, flows, module_name):
    根据Basicvsr++模型,主要将步骤分为了传播、对齐、聚合、上采样这4步。而在代码中传播、对齐、聚合这三步被放在了一个模块中(该模块)进行训练。根据Basicvsr++模型
在这里插入图片描述
在这里插入图片描述

    我们可以直观的看到他有蓝色,绿色,它们分别是指的跨一帧,跨两帧的前向或后向特征信息,所以我们在写代码的时候要区分好每一步的名字。故在输入参数里面就包含了特征,光流,模型名字这三个参数。另外这个模块的返回值也是feats也就是新的特征,他是计算完成一步后,传送到下一步的特征,也就是此前所有步骤融合后的特征。此模块中包含二阶可变形对齐光流引导可变形卷积这两个非常重要的创新点。最后也是进行了聚合这个步骤。
(6)上采样模块def upsample(self, lqs, feats):
    这里就是根据模型论文写的一样,进行了上采样,输入的低质量序列的shape为(n, t, c, h, w),最后输出的HR序列的shape为(n, t, c, 4h, 4w)。
(7)前向传播模块def forward(self, lqs):
    这里就是传统神经网络所做的前向传播模块。
(8)两阶段对齐模块class SecondOrderDeformableAlignment(ModulatedDeformConv2d):
    传播模块中会调用某个参数,那个参数在初始化的时候是根据这个模块产生的,总之可以理解为这个模块定义了什么是两阶段对齐,并在传播模块中被使用到了。

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

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

相关文章

信号的产生——线性调频函数

信号的产生——线性调频函数 产生线性调频扫频信号函数chirp的调用格式如下: (1)y chirp(t,f0, t1,f1) 功能:产生一个线性(频率随时间线性变化)信号,其时间轴设置由数组t定义。时刻0的瞬间频…

SpringBoot的配置文件、日志文件

一、配置文件( .properties、.yml) 1、.properties 配置文件 1.1、格式 1.2、基本语法 1.2.1、如:一般配置(以键值的形式配置的,key 和 value 之间是以“”连接的。) 1.2.2、如:自定义配置&a…

tcc-transaction 源码分析

tcc介绍 tcc介绍查看我之前的文章: https://caicongyang.blog.csdn.net/article/details/119721282?spm1001.2014.3001.5502 tcc-transaction 介绍: http://mengyun.org/zh-cn/index.html 本文基于2.x 最新版本:https://github.com/changmingxie/tcc…

以京东为例,分析优惠价格叠加规则

一、平行优惠计算原则 1、什么是“平行式门槛计算规则”? 平行式门槛计算规则,即每一层级优惠都直接根据商品的单品基准价来计算是否符合门槛,店铺/平台促销、优惠券类优惠之间是并列关系,只要单品基准价或单品基准价总和&#x…

c++(类和对象中)

【本节目标】 1. 类的6个默认成员函数 2. 构造函数 3. 析构函数 4. 拷贝构造函数 5. 赋值运算符重载 6. const成员函数 7. 取地址及const取地址操作符重载 目录 1、类的6个默认成员函数 2、构造函数 2.1概念 2.2特性 3.析构函数 3.1概念 3.2特性 4.拷贝构造函数…

Kafka生产者

一、生产者发送流程 在消息发送的过程中,涉及到了两个线程——main 线程和 Sender 线程。在 main 线程中创建了一个双端队列 RecordAccumulator。main 线程将消息发送给 RecordAccumulator,Sender 线程不断从 RecordAccumulator 中拉取消息发送到 Kafka …

网络应用基础 ——(2023新星计划文章二)

一,TCP/UDP报头 1.1TCP报文头部详解 Source port:源端口号与Destination port目标端口号: 在TCP(传输控制协议)协议中,源端口和目标端口字段用于标识通信会话的端点。 (1)源端口是一个16位字段…

LeetCode 1206. 实现跳表

不使用任何库函数,设计一个跳表。 跳表是在 O(log(n)) 时间内完成增加、删除、搜索操作的数据结构。跳表相比于树堆与红黑树,其功能与性能相当,并且跳表的代码长度相较下更短,其设计思想与链表相似。 例如,一个跳表包…

3.数据查询(实验报告)

目录 一﹑实验目的 二﹑实验平台 三﹑实验内容和步骤 四﹑命令(代码)清单 五﹑调试和测试清单 一﹑实验目的 掌握使用Transact-SQL的SELECT语句进行基本查询的方法;掌握使用SELECT语句进行条件查询的方法;掌握SELECT语句的GROUP BY、ORDER BY以及UN…

MX6U根文件系统配置

编译 BusyBox 构建根文件系统 /home/ /linux/nfs mkdir rootfs tar -vxjf busybox-1.29.0.tar.bz2 依照自己的交叉编译 不然会出错 配置好 busybox 以后就可以编译了,我们可以指定编译结果的存放目录,我们肯定要将编 译结果存放到前面创建的 rootfs 目录…

(leetcode)66. 加一 67. 二进制求和(详解)

目录 66. 加一 思路 代码 67. 二进制求和 思路 代码 66. 加一 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这…

7个最好的WordPress LMS在线学习管理系统比较

您是否正在为您的 WordPress 网站寻找最好的 LMS 在线学习管理系统插件? 学习管理系统 (LMS) 插件允许您创建和运行类似 Udemy 和 LearnDesk 等在线课程。一个完美的 WordPress LMS 插件拥有您管理在线课程、运行和评分测验、接受付款等所需的一切。 在本文中&…

【MySql】数据库 select 进阶

数据库 数据库表的设计ER 关系图三大范式 聚合函数与分组查询聚合函数 (count、sum、avg、max、min)分组查询 group by fields....having....(条件) 多表联查内连接外连接(左连接,右连接)自连接子查询合并查询 UNION 数据库表的设计 ER 关系…

在Centos中metabase安装与配置(bi工具)

1 metabase介绍 metabase是一款开源的BI分析工具,开发语言clojureReact为主、也有高阶的收费版。 官网:https://www.metabase.com/ 可以利用Metabase进行数据分析,数据可视化,报表生成等。开源地址:https://github.co…

(五)【平衡小车制作】位置式PID、直立环与速度环概念

声明:本博客是B站视频【天下行走的平衡小车视频】的笔记 一、PID控制算法概念 PID控制,即为对偏差进行比例、积分和微分控制。由三个元素构成:比例(P),积分(I),微分(D&…

Linux系统应用编程(六)Linux网络编程(下篇)

本篇主要内容: 一、Linux的文件描述符二、多路IO转接(上)1.基础版多路IO转接select▶ 关于select( )函数▶ select( )改写上篇案例 2.加强版多路IO转接poll3.顶配版多路IO转接epoll▶ epoll相关函数(1)创建监听红黑树&…

重装系统后,MySQL install错误,找不到dll文件,或者应用程序错误

文章目录 1.找不到某某dll文件2.mysqld.exe - 应用程序错误使用DX工具直接修复 1.找不到某某dll文件 由于找不到VCRUNTIME140_1.dll或者MSVCP120.dll,无法继续执行代码,重新安装程序可能会解决此问题。 在使用一台重装系统过的电脑,再次重新…

Yolov8实战:交通roadsign识别,通过加入CVPR203 DCNV3和BiLevelRoutingAttention,暴力涨点

1.roadsign数据集介绍 数据集大小:877张 类别:speedlimit、crosswalk、trafficlight、stop 2.基于YOLOV8的roadsign识别 2.1 原始yolov8性能分析 原始map为0.841 2.1 加入DCNV3 博客地址: https://cv2023.blog.csdn.net/article/detai…

手写 EventBus:从零到一实现自己的事件总线库

简介:在本文中,我们将详细介绍如何从头开始实现一个轻量级的 EventBus 库。我们将以 XEventBus 为例,阐述整个实现过程,以及在实现过程中遇到的关键问题和解决方法。 一 引言 什么是 EventBus? EventBus 是一个基于…

C++ 多线程编程(三) 获取线程的返回值——future

C11标准库增加了获取线程返回值的方法&#xff0c;头文件为<future>&#xff0c;主要包括future、promise、packaged_task、async四个类。 那么&#xff0c;了解一下各个类的构成以及功能。 1 future future是一个模板类&#xff0c;它是传输线程返回值&#xff08;也…