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

超分辨率重建——BSRN网络训练自己数据集并推理测试(详细图文教程)

在这里插入图片描述

目录

  • 一、BSRN网络总结
  • 二、源码包准备
  • 三、环境准备
    • 3.1 报错KeyError: "No object named 'BSRN' found in 'arch' registry!"
    • 3.2 安装basicsr源码包
    • 3.3 参考环境
  • 四、数据集准备
  • 五、训练
    • 5.1 配置文件参数修改
    • 5.2 启动训练
      • 5.2.1 命令方式训练
      • 5.2.2 配置Configuration方式训练
    • 5.3 模型保存
  • 六、测试
    • 6.1 配置文件参数修改
    • 6.2 启动测试
      • 6.2.1 命令方式测试
      • 6.2.2 配置Configuration方式测试
    • 6.3 测试结果
  • 七、推理速度
  • 八、效果展示
  • 九、总结

一、BSRN网络总结

BSRN(Blueprint Separable Residual Network)是一种轻量级的单图像超分辨率网络。它的设计灵感来自于残差特征蒸馏网络 (RFDN)和蓝图可分离卷积 (BSConv)。BSRN采用了与RFDN类似的架构,同时引入了一种更高效的蓝图浅残差块 (blueprint shallow residual block, BSRB),即在RFDN的浅层残差块 (shallow residual block, SRB)中使用BSConv替换标准卷积。

BSRN的特点:

高效性:BSRN-S的一个较小的变体在NTIRE 2022 Efficient SR Challenge的模型复杂度赛道中获得了第一名。

轻量级:BSRN的设计目标是在保持高性能的同时,降低模型的复杂性和计算成本。

注意力机制:BSRN引入了两个注意力模块,即增强空间注意力 (ESA)和对比通道注意力 (CCA),从空间和通道的角度增强模型的能力。

二、源码包准备

本教程配套源码包获取方法文章末扫码到公众号「视觉研坊」中回复关键字:超分辨率重建BSRN。获取下载链接。

官网源码包链接为:BSRN

论文地址:论文

我提供的配套源码包下载解压后的样子如下:

在这里插入图片描述

源码包中提供了100张训练集,还有部分测试集,位于跟目录下的datasets文件夹中,见下:

在这里插入图片描述

三、环境准备

3.1 报错KeyError: “No object named ‘BSRN’ found in ‘arch’ registry!”

如果下载官网源码包后,直接运行测试,可能会报错:
在这里插入图片描述
该问题是由于之前使用pip install basicsr命令安装了basicsr包,对于该网络,必须安装basicsr源码包,具体安装方法见3.2。

3.2 安装basicsr源码包

源码包中根目录下有setup.py文件。

在终端使用安装命令,版本为1.3.4.9:

python setup.py develop

在这里插入图片描述

安装成功的样子如下:

在这里插入图片描述

3.3 参考环境

下面是我自己的训练和测试环境,仅供参考,其它版本也可以:

在这里插入图片描述

四、数据集准备

该网络要求为lmdb格式的数据集,关于lmdb格式数据集的制作,参考我的另外一篇博文:lmdb文件制作

在我提供的源码包中,make_lmdb.py脚本就是制作lmdb数据集的,修改路径后可直接使用。

制作好后的lmdb文件内容如下:

在这里插入图片描述

五、训练

5.1 配置文件参数修改

训练前,需要在train_BSRN_x4.yml配置文件中修改一些参数,常用修改参数见下:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5.2 启动训练

下面有两中启动训练方式,任选一种都可以。

5.2.1 命令方式训练

在终端输入命令:

python basicsr/train.py -opt options/train/train_BSRN_x4.yml

在这里插入图片描述

5.2.2 配置Configuration方式训练

先打开Configuration,在其中添加参数。

在这里插入图片描述

在这里插入图片描述

配置好后,直接run就行。

在这里插入图片描述

正常训练过程如下:

在这里插入图片描述

5.3 模型保存

训练的最终结果保存在路径下:BSRN\experiments\

在这里插入图片描述

六、测试

6.1 配置文件参数修改

在benchmark_BSRN_x4.yml配置文件中修改相关测试参数。

修改超分倍数:

在这里插入图片描述

修改测试集路径:

在这里插入图片描述

修改模型路径:

在这里插入图片描述

6.2 启动测试

测试方式也是有两种,任选一种即可。

6.2.1 命令方式测试

在终端输入测试命令:

python basicsr/test.py -opt options/test/benchmark_BSRN_x4.yml

6.2.2 配置Configuration方式测试

配置文件中添加参数:

在这里插入图片描述

输出如下:

在这里插入图片描述

6.3 测试结果

测试结果最终会自动保存到根目录下的BSRN\results文件夹中:

在这里插入图片描述

七、推理速度

GPU测试环境:Nvidia GeForce RTX 3050。

CPU测试环境:12th Gen Intel® Core™ i7-12700H 2.30 GHz。

下面是不同分辨率在不同平台即不同超分倍数下推理耗时:

在这里插入图片描述

八、效果展示

下面展示图中,最左侧图为原图通过OpenCv直接上采样4倍图,中间为BSRN网络超分4倍结果,最右侧为高分辨率原图。

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

九、总结

以上就是超分辨率重建BSRN网络训练自己数据集并推理测试的详细图文教程,超分效果学者自行评价,对比其它网络效果参考我超分辨率重建专栏。

总结不易,多多支持,谢谢!

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

相关文章:

超分辨率重建——BSRN网络训练自己数据集并推理测试(详细图文教程)

目录 一、BSRN网络总结二、源码包准备三、环境准备3.1 报错KeyError: "No object named BSRN found in arch registry!"3.2 安装basicsr源码包3.3 参考环境 四、数据集准备五、训练5.1 配置文件参数修改5.2 启动训练5.2.1 命令方式训练5.2.2 配置Configuration方式训…...

C语言实现贪吃蛇

目录 前言一 . 游戏背景1. 背景介绍2. 项目目标3. 技术要点 二 . 效果演示三 . 游戏的设计与分析1. 核心逻辑2. 设计与分析游戏开始Gamestart()函数游戏运行Gamerun()函数游戏结束Gameend()函数 四 . 参考代码五 . 总结 前言 本文旨在使用C语言和基础数据结构链表来实现贪吃蛇…...

高可用系列四:loadbalancer 负载均衡

负载均衡可以单独使用,也常常与注册中心结合起来使用,其需要解决的问题是流量分发,这是就需要定义分发策略,当然也包括了故障切换的能力。 故障切换 故障切换是负载均衡的基本能力,和注册中心结合时比较简单&#xf…...

Ruby递归目录文件的又一种方法

经常派得上用场,记录一下。 递归文件做一些操作 #encoding:utf-8require pathnamedef recursive_enum_files(from_path)from_path Pathname.new(from_path)raise ArgumentError,must start at a directory. unless from_path.directory?from_path.enum_for(:fin…...

【爬虫】爬取A股数据写入数据库(一)

1. 对东方财富官网的分析 步骤: 通过刷新网页,点击等操作,我们发现https://datacenter-web.eastmoney.com/api/data/v1/get?请求后面带着一些参数即可以获取到相应数据。我们使用python来模拟这个请求即可。 我们以如下选择的页面为切入点…...

1-38 流资源类结构

一 简介 1. Java中所说的流资源--IO流 2.为什么学习留资源? --要操作文件中的数据 将数据写入指定的文件 将数据从指定的文件读取 3.分类 -- 四大基流 , 八大子流 (重点) 按照流向分 : 输入流 和输出流 按照操作数据资源的类型划分 字符流 (重点) Reader -- 字符…...

nginx的前世今生(二)

书接上回: 上回书说到,nginx的前世今生,这回我们继续说 3.缓冲秘籍,洪流控水 Nginx的缓冲区是其处理数据传输和提高性能的关键设计之一,主要用于暂存和管理进出的数据流,以应对不同组件间速度不匹配的问题…...

浏览器跨域详解

一、什么是跨域 浏览器跨域是指当一个Web应用程序试图访问另一个协议、主机或端口不同的资源时,所发生的情况。这主要是由于浏览器的同源策略造成的,它是为了网站的安全而设置的安全限制,防止一个网站恶意访问另一个网站的资源。当然这是比较…...

华为5700配置

恢复出厂设置,清空配置 1、更改名字 system-view sysname tp-10-50-01-04 2、配置管理接口 int vlan 1 ip add 10.50.1.4 255.255.254.0 quit 2、链路汇聚 interface eth-trunk 1 mode lacp quit 3、绑定端口 interface eth-trunk 1 trunkport gigabitethernet …...

使用Axios从前端上传文件并且下载后端返回的文件

前端代码: function uploadAndDownload(){showLoading();const fileInput document.querySelector(#uploadFile);const file fileInput.files[0];const formData new FormData()formData.append(file, file)return new Promise((resolve, reject) > {axios({…...

open 函数到底做了什么

使用设备之前我们通常都需要调用 open 函数,这个函数一般用于设备专有数据的初始化,申请相关资源及进行设备的初始化等工作,对于简单的设备而言,open 函数可以不做具体的工作,你在应用层通过系统调用 open 打开设备…...

ue引擎游戏开发笔记(32)——为游戏添加新武器装备

1.需求分析: 游戏中角色不会只有一种武器,不同武器需要不同模型,甚至可能需要角色持握武器的不同位置,因此需要添加专门的武器类,方便武器后续更新,建立一个武器类。 2.操作实现: 1.在ue5中新建…...

【个人博客搭建】(17)使用FluentValidation 参数校验

FluentValidation 是一个用于 .NET 的开源验证库,它提供了一种流畅的接口和强类型验证规则,使得验证逻辑表达得更加清晰和简洁。(Apache-2.0) FluentValidation 的主要作用包括: 提高代码可读性:通过使用 F…...

数据结构===散列表

文章目录 概要散列思想散列函数散列冲突开放寻址法装载因子 链表法 代码Java小结 概要 散列表是一种很有趣的数据结构。 散列表是一个很有用的数据结构。它是数组演练而来的,又是一个基于数组的扩展的数据结构。接下来看看。 散列思想 散列表用的是数组支持按照下…...

10G MAC层设计系列-(2)MAC RX模块

一、概述 MAC RX模块的需要进行解码、对齐、CRC校验。 因为在空闲的时候10G PCS/PMA会一直向外吐空闲符(x07)所以需要根据开始符、结束符将有效数据从码流中截取,也就是解码。 因为开始字符的所在位置有两种形式,而结束字符的位…...

解码Starknet Verifier:深入逆向工程之旅

1. 引言 Sandstorm为: 能提交独立proof给StarkWare的Ethereum Verifier,的首个开源的STARK prover。 开源代码见: https://github.com/andrewmilson/sandstorm(Rust) L2Beat 提供了以太坊上Starknet的合约架构图&…...

【C++语言】类和对象--默认成员函数 (中)

文章目录 前言类的六个默认成员函数:1. 构造函数概念特性做了什么?易错注意:显式定义和默认构造函数 2. 析构函数概念特征做了什么?注意事项: 3.拷贝构造函数概念特征做了什么?注意事项: 4.赋值运算符重载…...

前端递归常见应用

概览 在 JavaScript 中,递归是一种编程技术,指的是函数直接或间接调用自身的过程。 递归通常用于解决可以分解为相同子问题的问题。通过不断地将问题分解成更小的、相似的子问题,直到达到某种基本情况(不再需要进一步递归的简单情…...

AI工具如何改变我们的工作与生活

AI工具在当今社会中扮演着越来越重要的角色,它们已经开始改变着我们的工作方式和生活方式。在接下来的2000字篇幅中,我将详细探讨AI工具如何影响我们的工作和生活。 AI工具在工作中的影响: 自动化和智能化生产流程: AI工具可以通…...

深入了解C/C++的内存区域划分

🔥个人主页:北辰水墨 🔥专栏:C学习仓 本节我们来讲解C/C的内存区域划分,文末会附加一道题目来检验成果(有参考答案) 一、大体有哪些区域?分别存放什么变量开辟的空间? …...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏

一、引言 在深度学习中&#xff0c;我们训练出的神经网络往往非常庞大&#xff08;比如像 ResNet、YOLOv8、Vision Transformer&#xff09;&#xff0c;虽然精度很高&#xff0c;但“太重”了&#xff0c;运行起来很慢&#xff0c;占用内存大&#xff0c;不适合部署到手机、摄…...

书籍“之“字形打印矩阵(8)0609

题目 给定一个矩阵matrix&#xff0c;按照"之"字形的方式打印这个矩阵&#xff0c;例如&#xff1a; 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为&#xff1a;1&#xff0c;…...