openmmlab实现图像超分辨率重构

news2024/10/10 7:49:41

文章目录

  • 前言
  • 一、图像超分辨率重构简介
  • 二、mmmagic实现图像超分


前言

超分辨率重构技术,作为计算机视觉领域的一项重要研究课题,近年来受到了广泛关注。随着科技的飞速发展,人们对图像质量的要求越来越高,尤其是在智能手机、监控、医疗影像等领域。然而,受限于硬件设备的限制,我们往往无法直接获取高分辨率的图像。此时,超分辨率重构技术应运而生,它能够在保证图像质量的前提下,将低分辨率图像转换为高分辨率图像,为我们带来更为清晰、细腻的视觉体验。在这篇博客中,我们将使用mmmagic,探讨超分辨率重构技术,为大家揭示其背后的原理、方法及最新研究进展。


一、图像超分辨率重构简介

图像分辨率是一组用于评估图像中蕴含细节信息丰富程度的性能参数,包括时间分辨率、空间分辨率及色阶分辨率等,体现了成像系统实际所能反映物体细节信息的能力。相较于低分辨率图像,高分辨率图像通常包含更大的像素密度、更丰富的纹理细节及更高的可信赖度。但在实际上情况中,受采集设备与环境、网络传输介质与带宽、图像退化模型本身等诸多因素的约束,我们通常并不能直接得到具有边缘锐化、无成块模糊的理想高分辨率图像。提升图像分辨率的最直接的做法是对采集系统中的光学硬件进行改进,但是由于制造工艺难以大幅改进并且制造成本十分高昂,因此物理上解决图像低分辨率问题往往代价太大。由此,从软件和算法的角度着手,实现图像超分辨率重建的技术成为了图像处理和计算机视觉等多个领域的热点研究课题。
图像的超分辨率重建技术指的是将给定的低分辨率图像通过特定的算法恢复成相应的高分辨率图像。具体来说,图像超分辨率重建技术指的是利用数字图像处理、计算机视觉等领域的相关知识,借由特定的算法和处理流程,从给定的低分辨率图像中重建出高分辨率图像的过程。其旨在克服或补偿由于图像采集系统或采集环境本身的限制,导致的成像图像模糊、质量低下、感兴趣区域不显著等问题。
简单来理解超分辨率重建就是将小尺寸图像变为大尺寸图像,使图像更加“清晰”。具体效果如下图所示:
在这里插入图片描述
可以看到,通过特定的超分辨率重建算法,使得原本模糊的图像变得清晰了。读者可能会疑惑,直接对低分辨率图像进行“拉伸”不就可以了吗?答案是可以的,但是效果并不好。传统的“拉伸”型算法主要采用近邻搜索等方式,即对低分辨率图像中的每个像素采用近邻查找或近邻插值的方式进行重建,这种手工设定的方式只考虑了局部并不能满足每个像素的特殊情况,难以恢复出低分辨率图像原本的细节信息。因此,一系列有效的超分辨率重建算法开始陆续被研究学者提出,重建能力不断加强,直至今日,依托深度学习技术,图像的超分辨率重建已经取得了非凡的成绩,在效果上愈发真实和清晰。

二、mmmagic实现图像超分

在mmmagic中提供了十种常用的深度学习图像超分的方法,如下图所示:
在这里插入图片描述
本次我们以其中最新的Real-ESRGAN举例,讲述如何实现图像超分任务,Real-ESRGAN是一种先进的图像超分辨率算法,它是基于ESRGAN(Enhanced Super-Resolution Generative Adversarial Networks)的改进版本。ESRGAN本身是在SRGAN(Super-Resolution Generative Adversarial Networks)的基础上进行改进的,而Real-ESRGAN进一步提升了算法的性能,尤其是在处理真实世界的低分辨率图像时。
Real-ESRGAN算法的核心特点在于其对于重建图像真实感的显著提升,它能够使生成的超分辨率图像看起来更加自然和逼真。此外,该算法在细节恢复方面表现卓越,即使在原始低分辨率图像中细节已经模糊或丢失,它也能有效地恢复图像的细节和纹理。Real-ESRGAN展现出了良好的鲁棒性,能够应对包括噪声、模糊和压缩伪影在内的多种图像退化问题。同时,它的通用性也很强,不仅能够处理自然图像,还能应用于动漫风格的图像超分辨率任务。
同时在技术层面上,Real-ESRGAN基于生成对抗网络(GAN)架构,包含一个生成器和一个判别器,分别负责生成高分辨率图像和区分图像真伪。算法内部采用了多个残差块来构建生成器,这些残差块有助于学习图像的内在结构,从而更好地恢复细节。除了传统的像素级损失,如均方误差(MSE),Real-ESRGAN还引入了感知损失,这是一种基于卷积神经网络的特征级损失,旨在生成更符合人类视觉感知的高分辨率图像。通过对抗性训练,生成器能够生成足以欺骗判别器的高分辨率图像,从而提升图像的真实感。此外,Real-ESRGAN还引入了通道注意力机制,这使得网络能够更加聚焦于重要的特征通道,进而提高重建图像的整体质量。

在mmmagic中使用Real-ESRGAN方法如下所示:
首先下载模型:将下载好的模型放到根目录下,并通过如下代码进行推理。

测试代码:

from mmagic.apis import MMagicInferencer
config = 'configs/real_esrgan/realesrnet_c64b23g32_4xb12-lr2e-4-1000k_df2k-ost.py'
checkpoint = 'realesrnet_c64b23g32_12x4_lr2e-4_1000k_df2k_ost_20210816-4ae3b5a4.pth'
img_path = 'tests/data/image/lq/baboon_x4.png'
editor = MMagicInferencer('real_esrgan', model_config=config, model_ckpt=checkpoint)
output = editor.infer(img=img_path,result_out_dir='output.png')

原图:
在这里插入图片描述
结果图:
在这里插入图片描述

模型训练也很简单,按照官方数据集df2k_ost的格式进行更改,并修改路径,数据集制作好之后直接执行下面的代码:

# cpu train
CUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/real_esrgan/realesrgan_c64b23g32_4xb12-lr1e-4-400k_df2k-ost.py

# single-gpu train
python tools/train.py configs/real_esrgan/realesrgan_c64b23g32_4xb12-lr1e-4-400k_df2k-ost.py

# multi-gpu train
./tools/dist_train.sh configs/real_esrgan/realesrgan_c64b23g32_4xb12-lr1e-4-400k_df2k-ost.py 8

即可进行训练。

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

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

相关文章

使用idea和vecode创建vue项目并启动(超详细)

一、idea创建vue项目 创建项目之前先下载好插件 新建项目找到vue生成器 写好名称,找到自己需要存放的地址,node解释器安装方式可以看我上一个博客,vueCLI是选择vue的版本,我们可以使用idea自带的vue版本默认是vue3,创…

【LeetCode】修炼之路-0004-Median of Two Sorted Arrays【python】

题目 Given two sorted arrays nums1 and nums2 of size m and n respectively, return the median of the two sorted arrays. The overall run time complexity should be O(log (mn)). Example 1: Input: nums1 [1,3], nums2 [2] Output: 2.00000 Explanation: merged…

java.lang.NoClassDefFoundError: kotlin/Result解决方案

问题 在控制窗口上虽然报错是找不到对应的class,但是呢在我们导入kotlin的后,还是报相同的异常,在网上查找了各种资料,都没有解决方案。 问题分析 在idea2021之后,kotlin都使用远程仓库(kotlinx-coeouti…

选择 PDF 编辑器时要考虑什么?如何选择适用于 Windows 10 的 PDF 编辑器

选择 PDF 编辑器时要考虑什么? 随着技术的出现,您在网上浏览时肯定会遇到一些 PDF 软件。但是,选择PDF 编辑器时需要考虑什么?如果您是重度用户并将在您的工作场所使用它,建议您找到专业、使用方便且能够帮助您完成任…

记一次pyc逆向

.py文件   源代码文件。   这是开发者编写的 Python 源代码文件,包含了可执行的 Python 代码。 .pyc文件   字节码文件。   Python 源文件(.py)在执行时会被编译为字节码,并存储在 __pycache__ 目录下,文件名通…

Linux下编译Eclipse Paho库采用MQTT协议连接MQTT服务器

一、Eclipse Paho介绍 Eclipse Paho 是一个开源项目,由 Eclipse Foundation 主持,提供可靠的开源实现来处理 MQTT(Message Queuing Telemetry Transport)协议以及其他与物联网 (IoT) 相关的协议。MQTT 是一种轻量级的发布/订阅消…

SQL进阶技巧:Order by 中 NULLS LAST特性使用?

目录 1 需求描述 2 数据准备 3 问题分析 4 小结 如果觉得本文对你有帮助,想进一步学习SQL语言这门艺术的,那么不妨也可以选择去看看我的博客专栏 ,部分内容如下: 数字化建设通关指南 专栏 原价99,现在活动价59…

k8s的安装和部署

配置三台主机,分别禁用各个主机上的swap,并配置解析 systemctl mask swap.target swapoff -a vim /etc/fstab配置这三个主机上的主机以及harbor仓库的主机 所有主机设置docker的资源管理模式为system [rootk8s-master ~]# vim /etc/docker/daemon.json…

k8s、prometheus、grafana数据采集和展示的链路流程

k8s集群中,容器级别的数据采集是由cAdvisor程序实现 cAdvisor # Container Advisor 容器顾问 cAdvisor程序是kubelet组件的一部分。 每个节点,包括master节点,都有一个kubelet系统服务, kukelet负责管理pod和容…

PCB在导出gerber文件时过孔盖油设置方法

目前主要使用两个电路设计软件,一个是Altium Designer 15.0版本,一个是cadence17.2版本。在设计完PCB以后需要导出加工文件发给PCB加工厂进行制板打样,其中需要注意的一点是过孔盖油设置。有的制板厂在提交工艺要求时写上过孔盖油即可&#x…

学习Ultralytics(data)(1)

今天我们来学习一下data文件夹下面的代码 首先有个_init_文件,典型的 Python 包中的 __init__.py 文件,用于导出 Ultralytics YOLO 项目中的一些重要类和函数。它将 base.py, build.py, 和 dataset.py 文件中的内容导入并暴露给外部使用。 看看里面有什…

息肉检测数据集 yolov5 yolov8适用于目标检测训练已经调整为yolo格式可直接训练yolo网络

息肉检测数据集 yolov5 yolov8 适用于目标检测训练 已经调整为yolo格式 可直接训练yolo网络 息肉检测数据集介绍 数据集概述 名称:息肉检测数据集(基于某公开的分割数据集调整)用途:适用于目标检测任务,特别是内窥镜…

【C/C++】错题记录(七)

题目一 题目二 C在调用函数时,当实参和形参的数据类型不一致时,会发生数据类型转换!将低精度转换为高精度时,由编译器隐式完成;将高精度转换为低精度时,必须用强制类型转换运算符; static_cast…

Redis-缓存过期淘汰策略

缓存淘汰策略 生产上redis内存设置为多少 设置为最大内存的 3/4 redis 会占用物理机多少内存 默认大小是 0,64 位系统下表示不限制内存大小,32位系统表示 3G 如何设置修改redis内存大小 config get maxmemory 查看修改方式 配置文件 单位是字节 2.…

读数据工程之道:设计和构建健壮的数据系统04数据工程生命周期(下)

1. 获取 1.1. 在了解数据源、所用源系统的特征以及数据的存储方式之后,你需要收集数据 1.2. 数据工程生命周期的下一阶段是从源系统中获取数据 1.2.1. 源系统和获取代表了数据工程生命周期中最重要的瓶颈 1.2.2. 源系统通常不在你的直接控制范围内,可…

性能测试工具locust —— Python脚本参数化!

1.1.登录用户参数化 在测试过程中,经常会涉及到需要用不同的用户登录操作,可以采用队列的方式,对登录的用户进行参数化。如果数据要保证不重复,则取完不再放回;如可以重复,则取出后再返回队列。 def lo…

算法修炼之路之位运算

目录 一:位运算符及一些常用结论总结 1.给一个数n,确定它的二进制表示中的第x位是0还是1(位数从右向左0开始增加) 2.将一个数n的二进制表示形式的第x位修改成1 3.将一个数n的二进制表示的第x位修改为0 4.提取一个数n的二进制表示中最右侧的1 5.干掉一个数n的…

使用Android studio进行Unit Test中遇到的问题记录

1、模块本身代码运行不起来 提示: Cannot resolve method ‘getVolumes’ in ‘StorageManager’ Cannot resolve method ‘registerListener’ in ‘StorageManager’ Cannot resolve method ‘unregisterListener’ in ‘StorageManager’ 查看Android 源码&…

p20 docker自己commit一个镜像 p21 容器数据卷 p22mysql同步数据(国内镜像被封锁暂时往后放)p23具名挂载和匿名挂载

如何自己commit一个镜像 这里还是先引用一下老师的笔记 关于如何自己commit一个镜像这个问题目前因为从仓库中拉下来的Tomcat里面是没有项目的,所以把webapps.dist里面的拷贝到webapps里面去作为自己的镜像在commit一下 这里用Tomcat举例子首先把镜像拉取下来执…

C语言 | Leetcode C语言题解之第468题验证IP地址

题目&#xff1a; 题解&#xff1a; char * validIPAddress(char * queryIP) {int len strlen(queryIP);if (strchr(queryIP, .)) {// IPv4int last -1;for (int i 0; i < 4; i) {int cur -1;if (i 3) {cur len;} else {char * p strchr(queryIP last 1, .);if (p…