开源图像超分ECBSR项目源码分析

news2024/12/28 21:25:57

在这里插入图片描述

相关介绍

  1. 项目GitHub地址:https://github.com/xindongzhang/ECBSR
  2. 项目相关论文:https://www4.comp.polyu.edu.hk/~cslzhang/paper/MM21_ECBSR.pdf(也可以点这里下载)
  3. 论文解读:Edge-oriented Convolution Block for Real-time Super Resolution on Mobile Devices
  4. Windows环境训练搭建:Windows 环境下训练开源图像超分项目 ECBSR 教程

ECBSR项目源码

源码说明

  1. 目录结构:
.
├── LICENSE
├── README.md
├── configs
│   ├── ecbsr_x2_m4c16_prelu.yml
│   ├── ecbsr_x2_m4c8_prelu.yml
│   ├── ecbsr_x4_m4c16_prelu.yml
│   └── ecbsr_x4_m4c8_prelu.yml
├── convert.py
├── datas
│   ├── __init__.py
│   ├── benchmark.py
│   └── div2k.py
├── deploy
│   ├── README.md
│   ├── ai-benchmark
│   │   └── README.md
│   ├── mininet
│   │   ├── Makefile
│   │   ├── README.md
│   │   ├── activation.cpp
│   │   ├── activation.h
│   │   ├── config.h
│   │   ├── convolution.cpp
│   │   ├── convolution.h
│   │   ├── elementwise.cpp
│   │   ├── elementwise.h
│   │   ├── main
│   │   ├── main.cpp
│   │   ├── padding.cpp
│   │   ├── padding.h
│   │   ├── pixelshuffle.cpp
│   │   ├── pixelshuffle.h
│   │   ├── tensor.cpp
│   │   ├── tensor.h
│   │   └── test.h
│   ├── mnn
│   │   └── README.md
│   └── rknn
│       └── README.MD
├── experiments
├── legacy
│   ├── README.md
│   └── src
│       ├── model
│       │   ├── ecb.py
│       │   └── ecbsr.py
│       └── option.py
├── models
│   ├── __init__.py
│   ├── ecb.py
│   ├── ecbsr.py
│   ├── plainsr.py
│   └── tf
│       ├── __init__.py
│       └── plainsr.py
├── requirements.txt
├── scripts
│   └── README.md
├── train.py
└── utils.py
  1. 安装依赖包文件:requirments.txt
imageio==2.9.0 //用于读写图像数据的Python库
numpy==1.18.0 //是一个开源的Python科学计算库,它提供了一个强大的N维数组对象和相应的工具集,用于快速操作数组。
pytorch_msssim==0.2.1 //是一个用于计算多尺度结构相似性(MS-SSIM)和结构相似性(SSIM)指数的快速且可微分的工具,
                       它基于 PyTorch 框架实现,并提供了与 TensorFlow 和 scikit-image 相一致的结果。
tqdm==4.36.1 //是一个快速、可扩展的Python进度条库,它可以在长循环中添加一个进度条,以便用户实时查看迭代过程的进度。
torchvision==0.9.0 //是 PyTorch 的一个扩展库,专门用于处理图像和视频数据,广泛应用于计算机视觉领域。
                     它提供了数据集、预训练模型、图像转换工具等,极大地简化了图像数据的处理过程。
scikit_image==0.15.0 // 是一个基于 Python 的图像处理库,
                     它建立在 NumPy、SciPy 和其他图像处理库之上,提供了丰富的图像处理算法和工具。
torch==1.8.1 //是一个开源的机器学习库,广泛用于计算机视觉和自然语言处理等应用。
PyYAML==5.4.1 //是一个用于处理 YAML 文件的 Python 库,它允许你轻松地加载和转储 YAML 格式的数据。
skimage==0.0 //Scikit-image(简称 skimage)是一个基于Python的图像处理库,
               它建立在NumPy和SciPy的基础上,提供了丰富的图像处理功能,适合于快速开发和实验。
  1. 数据集:DIV2K、benchmark
    • DIV2K:https://cv.snu.ac.kr/research/EDSR/DIV2K.tar
    • benchmark:https://cv.snu.ac.kr/research/EDSR/benchmark.tar

源码分析

数据处理模块

  1. datas/div2k.py
    • 功能:定义一个 DIV2K 的类,继承自 PyTorch 的 data.Dataset。这个类用于加载和处理 DIV2K 数据集;
    • 逻辑图:
      在这里插入图片描述
  2. datas/benchmark.py
    • 功能:定义一个 Benchmark 的类,继承自 PyTorch 的 data.Dataset。这个类用于加载和处理 Benchmark 数据集;
    • 逻辑:

在这里插入图片描述

实用函数与类

  1. utils.py
    • 功能:定义了一些用于图像超分辨率任务的实用函数和类,包括计算峰值信噪比(PSNR)和结构相似性指数(SSIM),将HWC格式的NumPy数组转换为CHW格式的PyTorch张量,记录实验日志,以及跟踪和统计不同数据集的性能指标。
    • 逻辑:
      在这里插入图片描述

训练

  1. train.py
    • 功能:完成 ECBSR 算法的训练过程。需要导入数据处理类 Benchmark、DIV2K,以及超分网络模块类 ECBSR 类。
    • 逻辑:
      在这里插入图片描述

模型

  1. models/ecbsr.py
    • 功能:定义了一个 ECBSR 的类,核心是使用 ECB 的类作为主要得构建块
    • 逻辑:
      在这里插入图片描述
  2. models/ecb.py
    • 功能:实现 ECBSR 算法的核心神经网络模块。
    • 逻辑:
      在这里插入图片描述
  3. models/plainsr.py
    • 功能:是一个简单的超分辨率网络,它没有使用任何残差连接或复杂的结构,如残差块或密集块。
    • 逻辑:
      在这里插入图片描述

转换

  1. convert.py
    • 功能:将训练好的 model 从 pt 格式转换为 onnx 格式;需要导入ECBSR 类和 PlainSR 类
    • 逻辑:
      在这里插入图片描述

其他

  1. legacy 文件夹:旧的版本
  2. deploy 文件夹:部署相关介绍

注意

  1. 该项目没有推理,可以根据根据需求写个 inference 过程处理 图片或视频,比如在gitcode仓库里增加了相关代码。

总结

  1. ECBSR 算法针对图像 Y 通道进行训练和推理,因此输入图像转化为 YUV,对 Y 进行训练;推理时,需要将低分辨率图像上采样到高分辨率,然后将超分好的 Y 通道替换到上采样好的高分辨率图像,作为最后的输出超分图像。
  2. ECBSR训练网络专门为训练推理使用,核心网络 ECB 跟论文介绍一样,是由3x3、1x1-3x3、1x1-sobelx、1x1-sobely、1x1-laplacian卷积层构成;在重参数可以将其权重和偏置组合合并后赋值给常规 3x3 卷积层作为PlainSR 网络的权重和偏置。
  3. 推理验证也利用跟训练一样的网络结构ECBSR,不过要开启模型的 eval 属性。
  4. PlainSR 网络专门为移动端应用,核心网络跟论文中介绍一样,多个 3x3 卷积层构成,它没有使用任何残差连接或复杂的结构。
  5. 转换成 onnx 时,将 ECBSR 网络训练好的模型权重和偏置赋值给简单网络 Plainsr的权重和偏置,然后利用 torch.onnx.export导出 onnx 格式模型。

后续

  1. 后续进行更详细的分析原理和应用ECBSR。

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

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

相关文章

CLion远程开发Ubuntu,并显示helloworld文字框

1.CLion的介绍以及其在远程开发上的优点 1)CLion 是一个由 JetBrains 开发的跨平台 C/C 集成开发环境(IDE),功能强大。 2)CLion的优点: 远程工具链支持:CLion 支持通过 SSH 连接到远程 Ubuntu…

Unity--AssestBundles--热更新

使用Node.js搭建AssestBundle服务器并验证AB包热更新 一、服务器部分 使用NodeJs作为服务器, 使用Express为基础网页模版。 当然, 使用其他的FTP,http服务器也可以, 基础逻辑是存放资源的位置。 1.下载Node.js 下载地址:https…

【Python】NumPy(二):数组运算、数据统计及切片索引、广播机制

目录 Numpy数组 数组的基本运算 乘法 加法 数组的数据统计 平均值 中位数 最大值和最小值 求和 累积和 标准差 方差 切片和索引 索引 一维数组的索引 二维数组的索引 获取多个元素 布尔索引 切片 一维数组切片 二维数组切片 多维数组切片 广播机制 规则 …

本地生活便民信息服务小程序源码系统 PHP+MySQL组合开发 带完整的安装代码包以及搭建部署教程

系统概述 地方门户分类信息网站源码系统是一个基于PHP和MySQL开发的强大平台,旨在帮助用户轻松搭建地方性的分类信息网站。该系统集成了众多实用功能,支持用户自由发帖、浏览和搜索各类信息,如二手交易、求职招聘、房屋租售、生活服务、商家…

【java】抽象类和接口(了解,进阶,到全部掌握)

各位看官早安午安晚安呀 如果您觉得这篇文章对您有帮助的话 欢迎您一键三连,小编尽全力做到更好 欢迎您分享给更多人哦 大家好我们今天来学习Java面向对象的的抽象类和接口,我们大家庭已经来啦~ 一:抽象类 1.1:抽象类概念 在面向对象的概念中…

练习题(动态规划)

一,最长上升子序列2 题目: 思路分析: 之前的最长上升子序列的时间度是O(n^2),同时集合划分是按以第 i - 1 个数是几来划分的,状态转移方程也很简单是 f[i] f[j] 1 ,最后取所有一个max 那怎么优化呢&am…

ST7789读取ID错误新思路(以STC32G为例)

1.前言 前两天刚把ST7789写入搞定,这两天想折腾一下读取。最开始是读ID,先是用厂家送的程序,程序里面用的是模拟I8080协议,一切正常。后来我用STC32G的内置LCM模块,发现读取不出来。更神奇的是ID读不出来,…

【AIGC】AI如何匹配RAG知识库: Embedding实践,语义搜索

引言 RAG作为减少模型幻觉和让模型分析、回答私域相关知识最简单高效的方式,我们除了使用之外可以尝试了解其是如何实现的。在实现RAG的过程中Embedding是非常重要的手段。本文将带你简单地了解AI工具都是如何通过Embedding去完成语义分析匹配的。 Embedding技术简…

HTB:Headless[WriteUP]

目录 连接至HTB服务器并启动靶机 1.Which is the highest open TCP port on the target machine? 2.What is the title of the page that comes up if the site detects an attack in the contact support form? 使用浏览器访问靶机5000端口 3.What is the name of the …

海量数据在有限资源上处理的方法

1. 使用哈希 适用场景:需要处理的数据中,相同的数据可以分配到同样的机器/文件进行处理。 技巧总结:相同的数会哈希到同一个位置上 这类题目一般面试官给的描述都不是很清晰,需要自己去问条件、然后给出方案。 回答思路是&#…

hdfs的客户端(big data tools插件)

1.下载hadoop的压缩包在Windows,后解压 2.下载hadoop.dll文件和winutil.exe文件(网上自行查找) 下载完把这两个文件放入hadoop的bin目录 3.设置环境变量: $HADOOP_HOME指向hadoop的文件夹 4.在jetbrains公司的软件里下载big data tools插件:(在此展示的idea的) 下载完重启ide…

AI金融攻防赛:YOLO模型的数据增强与性能优化(DataWhale组队学习)

引言 大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年10月学习赛的AI金融攻防赛学习总结文档。在前一篇文章中,我们详细介绍了如何在金融场景凭证篡改检测中应用YOLO算法。本文将在此基础…

深入了解Spring重试组件spring-retry

在我们的项目中,为了提高程序的健壮性,很多时候都需要有重试机制进行兜底,最多就场景就比如调用远程的服务,调用中间件服务等,因为网络是不稳定的,所以在进行远程调用的时候偶尔会产生超时的异常&#xff0…

渗透测试实战—教育攻防演练中突破网络隔离

免责声明:文章来源于真实渗透测试,已获得授权,且关键信息已经打码处理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本…

3.matplotlib基础及用法(全)

一.基础绘图 折线图plot散点图scatter柱状图bar饼图pie 二.图表设置 设置标题设置线条设置坐标轴添加图例添加注释设置画布大小与分辨率 三.高级功能 绘制子图保存图形 一.基础绘图 1.折线图plot import matplotlib.pyplot as plt x [1, 2, 3, 4, 5] y [2, 3, 5, 7, 11] pl…

如何选择合适的电感器来匹配感性负载?

在匹配感性负载时,选择合适的电感器是至关重要的。电感器的主要作用是抑制电流变化,从而维持电路的稳定性。为了确保电路的稳定运行,需要考虑以下因素: 1. 电流和电压:首先,需要确定电感器的额定电流和额定…

GJS-WCP

不懂的就问,但我也是二把手......哭死 web GJS-ezssti 很常规的ssti模板注入,只过滤了"/","flag"。 过滤了/,flag 可以利用bash的特性绕过,如字符串截取,环境变量等等。payload1: {{url_for.__globals__[…

【uniapp】微信小程序使用echarts图表记录

1、插件引入 在Dcloud插件市场下载echarts插件:插件地址 或去相关代码库下载js:gitee地址 将static文件夹下中的echarts.min.js和ecStat.min.js复制到自己项目的static文件夹内或到echarts官方定制自己需要的图表类型下载js文件并放入相关目录。echart…

让你的 IDEA 使用更流畅 | IDEA内存修改

随着idea使用越来越频繁,笔者最近发现使用过程中有时候会出现卡顿现象,例如,启动软件变慢,打开项目的速度变慢等: 因此如果各位朋友觉得最近也遇到了同样的困惑,不妨跟着笔者一起来设置IDEA的内存大小吧~ …

【C#】在 WinForms 中使用 MVVM(Model-View-ViewModel) 设计模式

结合当前的 DevExpress 项目,在 WinForms 中使用 MVVM(Model-View-ViewModel) 设计模式。这个例子将通过数据绑定、命令绑定来展示 MVVM 模式的运用。 1. 项目结构 假设我们要实现一个简单的应用程序,它有一个文本框和一个按钮&…