超分辨率重建——冠军队EDVR视频超分网络训练自己数据集与推理测试(详细图文教程)

news2024/11/25 0:56:48

在这里插入图片描述

💪 专业从事且热爱图像处理,图像处理专栏更新如下👇:
📝《图像去噪》
📝《超分辨率重建》
📝《语义分割》
📝《风格迁移》
📝《目标检测》
📝《暗光增强》
📝《模型优化》
📝《模型实战部署》


在这里插入图片描述

EDVR模型在NTIRE19视频恢复和增强挑战赛的四个赛道中都赢得了冠军,并以巨大的优势超过了第二名。

目录

  • 一、EDVR
    • 1.1 核心思想
    • 1.2 网络架构
      • 1.2.1 PCD模块
      • 1.2.2 TSA模块
  • 二、源码包准备
  • 三、数据准备
    • 3.1 开源数据集
    • 3.2 自己制作数据集
      • 3.2.1 倔驴必看
      • 3.2.2 简易制作数据集
  • 四、训练
    • 4.1 模型选择
    • 4.2 第一阶段训练
      • 4.2.1 训练配置文件修改
      • 4.2.2 启动训练
        • 4.2.2.1 命令启动
        • 4.2.2.2 Configutation配置启动
      • 4.2.3 模型权重保存
    • 4.3 第一阶段测试
      • 4.3.1 测试配置文件修改
      • 4.3.2 启动测试
        • 4.3.2.1 命令启动
        • 4.3.2.2 Configutation配置启动
      • 4.3.3 一阶测试结果
    • 4.4 第二阶段训练
      • 4.4.1 训练配置文件修改
      • 4.4.2 启动训练
        • 4.4.2.1 命令启动
        • 4.4.2.2 Configutation配置启动
      • 4.4.3 模型权重保存
    • 4.5 第二阶段测试
      • 4.5.1 测试配置文件修改
      • 4.5.2 启动测试
        • 4.5.2.1 命令启动
        • 4.5.2.2 Configutation配置启动
      • 4.5.3 二阶段测试结果
  • 五、中断后接着训练
  • 六、可能报错
    • 6.1 报错
    • 6.2 问题分析
    • 6.3 解决办法
  • 七、效果展示
  • 八、总结

一、EDVR

EDVR(Enhanced Deep Video Restoration)是一种用于视频超分辨率重建的深度学习方法,专注于提高视频质量和分辨率。EDVR 旨在解决视频超分辨率中的关键挑战,如复杂的运动估计、多帧信息融合、以及高效地恢复细节等。EDVR 被广泛应用于视频增强、去噪、去模糊、视频超分辨率等任务中。它在保持视频流畅性的同时,能够显著提高视频的清晰度和视觉质量。

1.1 核心思想

时空特征提取:利用多个连续帧的信息,通过时空卷积神经网络提取丰富的特征。这帮助模型更好地捕捉时间动态和空间细节。
可变形卷积:EDVR 使用了可变形卷积来处理视频中的复杂运动,提供了灵活的感受野以更好地对齐不同帧之间的特征。
多帧融合:通过一个融合模块,将多个帧的特征信息整合起来,以增强重建的细节和一致性。

1.2 网络架构

EDVR 的设计充分考虑了视频处理中的时空复杂性,使其在处理具有运动模糊和多样化场景的视频时具有明显的优势。EDVR整体网络结构见下:
在这里插入图片描述

1.2.1 PCD模块

Pyramid, Cascading, and Deformable (PCD) Alignment:用于对齐不同时间步长的帧,以捕捉帧间的运动信息。

Pyramid Alignment在不同分辨率下对齐视频帧,以捕捉不同尺度的运动信息。实现:使用图像金字塔,将每个输入帧降采样到不同的分辨率层次,从高分辨率到低分辨率逐层对齐。

Cascading Alignment在不同层次中逐步细化对齐过程。实现:每一层的对齐结果作为下一层的输入,从粗到细逐层改善对齐精度。

Deformable Convolution处理复杂的、非线性的运动。实现:通过引入可变形卷积,允许卷积核在不规则位置采样特征,以增强网络的灵活性和对不同运动的适应能力。

PCD模块见下:
在这里插入图片描述

1.2.2 TSA模块

Temporal and Spatial Attention (TSA) Fusion:该模块负责将时间和空间的信息有效融合,以生成高质量的超分辨率图像。

Temporal Attention选择性地利用时间序列信息,增强重要帧的贡献。实现:通过学习不同帧的重要性权重,动态调整帧的贡献,增强时间信息的有效融合。

Spatial Attention增强空间信息的关键细节。实现:利用空间注意力机制来突出图像中的重要区域和特征,忽略背景和不重要的细节。

Reconstruction Module将融合后的特征重建为高分辨率图像。实现:通过一系列卷积层,将提取和融合后的特征逐步还原成超分辨率图像。这部分结构通常简单但有效,确保生成的图像具有高质量和清晰度。

TSA模块见下:
在这里插入图片描述

二、源码包准备

EDVR官网源码链接:EDVR

论文地址:paper

PaddleGAN官网源码链接:PaddleGAN

训练和测试的代码我没用EDVR官网提供的,我用了PaddleGAN集成代码,配套源码包获取方法文章末扫码到公众号「视觉研坊」中回复关键字:超分辨率重建EDVR。获取下载链接。

下载解压后的源码包见下:

在这里插入图片描述

三、数据准备

3.1 开源数据集

我用的视频数据集为REDS,此数据集是NTIRE19比赛最新提出的高质量(720p)视频数据集,其由240个训练片段、30个验证片段和30个测试片段组成(每个片段有100个连续帧)。

在我提供的源码包中有部分测试集,验证集和测试集,文件太大,完整的REDS数据集去官网下载。

REDS数据集里有针对锐化,去模糊,超分辨重建的数据集等,此数据集下载链接为:REDS数据集下载,打开后下载方法见下:

在这里插入图片描述

学者根据自己需求对应下载数据,用于视频超分的开源数据集还有:

Vimeo90K数据集是Tianfan Xue等人构建的一个用于视频超分、视频降噪、视频去伪影、视频插帧的数据集。Vimeo90K是大规模、高质量的视频数据集,包含从vimeo.com下载的 89,800 个视频剪辑,涵盖了大量场景和动作。Vimeo90K数据集下载

Vid4数据集是常用的视频超分验证数据集,包含4个视频段。Vid4数据集下载

UDM10数据集是常用的视频超分验证数据集,包含10个视频段。UDM10数据集下载

REDS数据集训练集较大,可将下载链接复制到迅雷中下载:

在这里插入图片描述

下载好的数据集,存放到根目录下的data文件夹中,见下:

在这里插入图片描述

上面各个文件夹中又包含多个子文件夹,子文件夹中有100张连续的视频帧,见下:

在这里插入图片描述
其中meta_info_REDS_GT.txt文件内容见下,meta_info_REDS_GT.txt文件内容的生成见另外一篇博文:meta_info_GT.txt文件制作,对应的脚本为源码包中make_meta_info.py。

在这里插入图片描述

3.2 自己制作数据集

3.2.1 倔驴必看

本小结可跳过不看。

制作自己数据集时,图片的名称格式有讲究,我之前犟过,修改源码为适合自己图片名称格式,我自己视频帧命名格式为frame_1.bmp,frame_2.bmp…frame_1096.bmp,见下:
在这里插入图片描述
PaddleGAN源码中仅支持.png格式图片,忍不了,在官网基础上,被我改了很多源码,我的低分辨率图片为90x120,代码中间有两次降采样,第一次降采样后分辨率为45x60,第二次降采样后分辨率为23x30,注意:45除以2后代码自动向上取整为23,这步就会导致和其它层的维度对应不上而报错,其它层处理后为22x30,见下:

在这里插入图片描述

下面是为了维度对齐,修改了模型结构代码:

在这里插入图片描述

Padding:原本 padding=1,卷积计算会在每个空间维度上保持大小。通过设置 padding=0,可以让输出的高度减少一个单位。
效果:这将会把输出的高度从 23 调整为 22,而宽度保持不变。

改后的输出维度见下:

在这里插入图片描述

上面维度对齐了,但是后续还有很多关于维度的报错,我又修改了很多代码,其中最多的是在跳跃连接进行paddle.aoncat张量拼接时的报错,修改代码见下:

在这里插入图片描述

在测试阶段还有报维度错误,也需要修改,修改地方太多,这里就不一 一列出,整体代码已经调试通,可以处理我自己的图片命名格式和处理120x90图像,改过代码的脚步后缀带INF,犟种学者想研究一下的可以仔细看看我提供的源码,改动过的脚本见下:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2.2 简易制作数据集

上面3.2.1是让网络模型适用自己的视频帧命名格式,现在介绍修改自己的视频帧命名格式和官网一样,此方法较简单,不用修改源码。

本教程配套提供的源码包中代码适用官网原本的命名格式。

将自己视频帧命名格式修改的方法见另外一篇博文:制作图片格式为00000001.png方法

四、训练

4.1 模型选择

EDVR模型根据中间通道数分为EDVR_L(128通道)和EDVR_M(64通道),对应模型配置文件选择见下:

在这里插入图片描述

我提供的源码包中在PaddleGAN框架上还有很多其它网络,训练和测试方法都差不多,学者结合自己情况选择。目前PaddleGAN框架支持的模型在ppgan/models路径下,见下:

在这里插入图片描述

4.2 第一阶段训练

本教程的主体为EDVR,就选择EDVR模型进行讲解。

EDVR模型训练分为两个阶段,第一阶段训练不带TSA模块,第二阶段训练在第一阶段模型基础上带TSA模块训练。

4.2.1 训练配置文件修改

下面是第一阶段训练的配置文件常用修改地方,见下:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4.2.2 启动训练

下面两种启动方式二选一都可以。

4.2.2.1 命令启动

配置文件修改好后,在终端输入下面命令启动训练:

python -u tools/main.py --config-file configs/edvr_m_wo_tsa.yaml
4.2.2.2 Configutation配置启动

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2.3 模型权重保存

训练过程中的模型权重文件保存到根目录下的output_dir文件夹中,见下:

在这里插入图片描述

4.3 第一阶段测试

上面一阶模型训练好后进行测试。

4.3.1 测试配置文件修改

测试的配置文件和训练的配置文件是一个,有几个参数是针对测试的需要修改,见下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.3.2 启动测试

下面启动方式二选一都可以。

4.3.2.1 命令启动

在终端输入下面命令:

   python tools/main.py --config-file configs/edvr_m_wo_tsa.yaml --evaluate-only --load output_dir/edvr_m_wo_tsa-2024-07-29-17-14/iter_1_checkpoint.pdparams

上面命令中–load后面参数为第一阶段训练好的模型权重文件路径。

4.3.2.2 Configutation配置启动

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.3.3 一阶测试结果

测试结果保存在output_dir文件件下:

在这里插入图片描述

4.4 第二阶段训练

4.4.1 训练配置文件修改

二阶段训练的配置文件修改参数和第一阶段差不多,参考4.2.1,二阶段的配置文件见下:

在这里插入图片描述

4.4.2 启动训练

4.4.2.1 命令启动

在终端输入下面命令:

 python -u tools/main.py --config-file configs/edvr_m_w_tsa.yaml --load output_dir/edvr_m_wo_tsa-2024-07-31-09-13/iter_600000_weight.pdparams

上面命令中–load后面参数为第一阶段训练好的模型权重路径。

4.4.2.2 Configutation配置启动

在这里插入图片描述

4.4.3 模型权重保存

第二阶段训练好的模型权重文件也是保存到根目录output_dir文件夹中,见下:

在这里插入图片描述

4.5 第二阶段测试

4.5.1 测试配置文件修改

测试的配置文件需要修改地方见下:

在这里插入图片描述

在这里插入图片描述

4.5.2 启动测试

4.5.2.1 命令启动

在终端输入下面命令:

   python tools/main.py --config-file configs/edvr_m_w_tsa.yaml --evaluate-only --load output_dir/edvr_m_w_tsa-2024-08-05-09-05/iter_600000_weight.pdparams

上面命令中–load中后面参数为第二阶段训练好的模型权重文件路径。

4.5.2.2 Configutation配置启动

在这里插入图片描述

4.5.3 二阶段测试结果

测试结果保存在根目录output_dir文件夹中,见下:

在这里插入图片描述

五、中断后接着训练

在训练过程可能会出现训练中断的问题,恢复接着训练的参数为–resume,见下:

在这里插入图片描述

举例我的训练中断位置为31500,见下:

在这里插入图片描述

继续之前的训练命令为:

python -u tools/main.py --config-file configs/edvr_m_wo_tsa.yaml --resume output_dir/edvr_m_wo_tsa-2024-07-30-11-41/iter_315000_checkpoint.pdparams

运行后继续接着训练,见下:

在这里插入图片描述

不管是第一阶段训练还是二阶段训练,恢复训练方法都一样。

六、可能报错

当配置文件中将save_img设置为true时报错:

在这里插入图片描述

6.1 报错

Traceback (most recent call last): File “F:/Code/Python/PaddleGAN/PaddleGAN/tools/main.py”, line 56, in main(args, cfg) File “F:/Code/Python/PaddleGAN/PaddleGAN/tools/main.py”, line 42, in main trainer.test() File “F:\Code\Python\PaddleGAN\PaddleGAN\ppgan\engine\trainer.py”, line 305, in test short_path = os.path.basename(current_paths[j]) # 如果当前索引 j 在 current_paths 的范围内,则获取对应的文件名,并去掉文件扩展名以获得 basename。 File “D:\APP\Anaconda\Path\envs\PaddlePaddle2.4_Py3.8\lib\ntpath.py”, line 216, in basename return split§[1] File “D:\APP\Anaconda\Path\envs\PaddlePaddle2.4_Py3.8\lib\ntpath.py”, line 185, in split p = os.fspath§ TypeError: expected str, bytes or os.PathLike object, not list

6.2 问题分析

问题出在 os.path.basename(current_paths[j]) 这一行。current_paths[j] 传递给 os.path.basename() 的参数是一个列表,而不是字符串(或字节序列、PathLike对象),这导致了 TypeError。

6.3 解决办法

修改代码见下:

在这里插入图片描述

七、效果展示

各个阶段的超分的效果图对比见下:

场景1见下:

在这里插入图片描述

场景2见下:

在这里插入图片描述

八、总结

以上就是EDVR超分模型训练自己数据集与推理测试的详细过程,供参考!从测试结果来看,效果不错,有一定优势。

感谢您阅读到最后!😊总结不易,多多支持呀🌹 点赞👍收藏⭐评论✍️,您的三连是我持续更新的动力💖

关注公众号「视觉研坊」,获取干货教程、实战案例、技术解答、行业资讯!

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

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

相关文章

LeetCode刷题笔记第17题:电话号码的字母组合

LeetCode刷题笔记第17题:电话号码的字母组合 题目: 想法: 先构建手机号码的字典,利用回溯的思想,组合数字对应的字母,代码如下: class Solution:def letterCombinations(self, digits: str) …

Animate软件基本概念:元件(影片剪辑、图形、按钮)

这一篇是说明Animate软件中常见的几种元件类型的定义。 FlashASer:AdobeAnimate2021软件零基础入门教程https://zhuanlan.zhihu.com/p/633230084 FlashASer:实用的各种Adobe Animate软件教程https://zhuanlan.zhihu.com/p/675680471 FlashASer&#x…

数据结构:栈与队列OJ题

目录 前言 一、用栈实现队列 二、用队列实现栈 三、括号匹配问题 前言 前面讲了栈和队列的基础知识,今天来巩固一下加深理解,这里说明一下,因为现在都是在用C语言写,这些OJ题里都要用到前面实现栈和队列的代码,每道题…

Java 自定义注解 笔记总结(油管)

Java系列文章目录 IDEA使用指南 Java泛型总结(快速上手详解) Java Lambda表达式总结(快速上手详解) Java Optional容器总结(快速上手图解) Java 自定义注解笔记总结(油管) Jav…

AI时代,我们还可以做什么?

最近看了本书,书名叫做《拐点:站在 AI 颠覆世界的前夜》,作者是万维钢。 本想着看完后,就能掌握一整套 AI 技巧,结果——竟然学了很多道理。 这本书讨论了以下话题: 我们该怎么理解这个 AI 大时代的哲学&am…

思迈特发布全新AI应用,Smartbi AIChat白泽来了

8月8日,Smartbi AIChat白泽新品发布会在云端与大家如期美好相约,共同见证思迈特软件基于AI Agent的新一代智能BI应用落地的全新里程碑时刻。 思迈特软件创始人吴华夫和产品总监杨礼显先后围绕商业智能行业发展趋势、产品demo show、技术原理及未来规划展…

Mysql,用户名重复,无法调用问题

问题描述: 我电脑的数据库用户名是,root。 因为经常需要帮别人封装程序,所以需要在我本机跑通别人的程序。有的程序里面也涉及到数据库,用户名也是,root,但是密码与我本机的不同。 之前我会修改我用户名…

【LVS】防火墙mark标记解决调度问题

实验环境是在之前部署DR模式集群的基础上做的,参考如下 部署DR模式集群 以http和https为例,当我们在webserver中同时开放80和443端口,那么默认控制是分开轮询的,就会出现了一个轮询错乱的问题: 当第一次访问80被轮询…

为什么要用数据库管理系统?5个你不得不知道的理由

你是否曾经想过,为什么几乎所有的企业和组织都在使用数据库管理系统(DBMS)?为什么不直接使用文件系统来存储和管理数据呢?如果你有这样的疑问,那么这篇文章正是为你而写。在接下来的内容中,我们将深入探讨使用数据库管理系统的5个关键原因,这些原因将彻底改变你对数据管理的认…

【Kubernetes】pod状态与故障排查

一、Pod启动阶段(相位 phase) pod创建完之后,一直到持久运行起来,中间有很多步骤,也就有很多出错的可能,因此会有很多不同的状态。 Pod的启动过程如下: 0)controller-manager管理的…

qt-06QStackeddialog堆栈窗体应用

QStackeddialog堆栈窗体应用 QStackeddialog.hQStackeddialog.cppmain.cpp运行图 QStackeddialog.h #ifndef QSTACKEDDIALOG_H #define QSTACKEDDIALOG_H#include <QDialog> #include <QListWidget> #include <QStackedWidget> #include <QLabel>clas…

2024年【上海市安全员B证】模拟考试及上海市安全员B证证考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 上海市安全员B证模拟考试参考答案及上海市安全员B证考试试题解析是安全生产模拟考试一点通题库老师及上海市安全员B证操作证已考过的学员汇总&#xff0c;相对有效帮助上海市安全员B证证考试学员顺利通过考试。 1、【…

PySide6||QPushButton的QSS样式

1、狗狗拜按钮 QQ202484-03338 (online-video-cutter.com) /* QPushButton的基本样式 */ QPushButton { background-image:url(:/xxx/第1帧.png); /* 设置背景图片 */ background-repeat: no-repeat; /* 不重复背景图片 */ background-position: center; /* 将背景图片居中…

PS网页版在线制作:云端设计让效率更上一层楼!

在当今的设计行业中&#xff0c;PS曾经被认为是不可替代的工具。然而&#xff0c;对于设计师&#xff0c;尤其是UI设计师来说&#xff0c;PS有点太复杂了。PS更新频率快&#xff0c;稳定性差&#xff0c;对计算机配置要求高。对于初学者来说&#xff0c;这显然是一个“负担”。…

简单Qt贪吃蛇项目

目录 先看效果 项目介绍 界面一&#xff1a;游戏大厅界面 界面二&#xff1a;关卡选择界面​编辑 界面三&#xff1a;游戏界面 游戏大厅页面 游戏关卡选择页面 游戏房间页面 封装贪吃蛇数据结构 初始化游戏房间界面 设置窗口大小、标题、图标等 蛇的移动 初始化贪…

TR3复现Tramsformer

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 Transformer模型是深度学习中的一个革命性架构&#xff0c;自从在NLP领域引入以来&#xff0c;就因其高效处理序列数据的能力而迅速成为主流。本文将通过…

谷粒商城实战笔记-nginx问题记录

记录在使用nginx中遇到的问题。 文章目录 1&#xff0c;网关路由匹配不生效2&#xff0c;网关路由配置前后顺序导致的问题(非nginx问题)3&#xff0c;nginx.conf upstream配置缺少端口4&#xff0c;配置结尾少分号5&#xff0c; proxy_pass 后跟的服务器 URL 是否以 / 结尾5.1 …

C语言学习:汉诺塔问题

汉诺塔_百度百科 (baidu.com)https://baike.baidu.com/item/%E6%B1%89%E8%AF%BA%E5%A1%94/3468295 // // Created by zzh on 2024/8/6. ////汉诺塔问题#include<stdio.h>void move(char x, char y) {printf("%c --> %c \n", x, y); }int hanoi(int count, i…

2024新版软件测试八股文及答案解析

前言 前面看到了一些面试题&#xff0c;总感觉会用得到&#xff0c;但是看一遍又记不住&#xff0c;所以我把面试题都整合在一起&#xff0c;都是来自各路大佬的分享&#xff0c;为了方便以后自己需要的时候刷一刷&#xff0c;不用再到处找题&#xff0c;今天把自己整理的这些…

WEB渗透未授权访问篇-Redis

测试 redis-cli redis-cli -h 127.0.0.1 flunshall 192.168.0.110:6379>ping PONG 存在未授权访问 JS打内网 var cmd new XMLHttpRequest(); cmd.open("POST", "http://127.0.0.1:6379"); cmd.send(flushall\r\n); var c…