图像超分辨率模型:Real-ESRGAN | 论文阅读+实战记录

news2024/11/23 8:39:00

前言

最近需要一个超分的模型,经过调研准备用 Real-ESRGAN。特此记录论文阅读和实战过程。

论文阅读

论文地址:Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data
Github:https://github.com/xinntao/Real-ESRGAN
参考视频:https://www.bilibili.com/video/BV14541117y6

主要贡献:

  • 提出一种高阶退化过程(high-order degradation process)来模拟实际退化,并利用 sinc 滤波器给训练图片添加 Ringing artifacts(振铃伪影,周围震荡波的感觉)和 Overshoot artifacts(过冲伪影,如白边)构造训练集
  • 用 U-net 而不是 VGG 作为 GAN 的 Discriminator,提高鉴别器能力并稳定训练动态
  • Real-ESRGAN 性能更优,效果更好

效果对比:
在这里插入图片描述

数据集构建:
在这里插入图片描述
二阶退化。两阶段分别经过虚化、下采样、加噪声、JPEG压缩。其中 sinc filter 用来添加伪影。

伪影类型实例
振铃伪影在这里插入图片描述
过冲伪影在这里插入图片描述

Real-ESRGAN 模型结构:

  • Generator:结构和 ESRGAN 一样,不过他做了个 Pixel Unshuffle,减少图像长宽,增加 channel size。送到一个 RRDB 的残差网络最后上采样得到输出。
    在这里插入图片描述
  • Discriminator:用的 U-Net(下采样和上采样的feature之间有连接,能学习局部纹理信息),不像最初的 GAN 判别器输出 0/1(即全局是否合格),他这个输出是和原图size一致,其中每个像素点的值衡量真实性的 feedback(即各局部是否合格)。此外,用了 spectral norm(谱归一化),能提升训练稳定性,减少伪影。
    在这里插入图片描述

两阶段模型训练:
首先,用 L1 loss 训练一个小网络(PSNR-oriented model)Real-ESRNet;然后,用其初始化 Generator 的权重,并用 L1 loss、perceptual loss、GAN loss 的结合训练最终的模型。

此外,还对 ground-truth 加了锐化再训了个 Real-ESRGAN+,能提升图像生成的锐度,但不会增加伪影。

实战记录

git clone https://github.com/xinntao/Real-ESRGAN.git
cd Real-ESRGAN
# Install basicsr - https://github.com/xinntao/BasicSR
# We use BasicSR for both training and inference
pip install basicsr
# facexlib and gfpgan are for face enhancement
pip install facexlib
pip install gfpgan
pip install -r requirements.txt
python setup.py develop

需要用到 realesrgan 模块的 RealESRGANer 类。以4倍超分为例:

import os
import cv2
import torch
import numpy as np
from PIL import Image
from basicsr.archs.rrdbnet_arch import RRDBNet
from realesrgan import RealESRGANer

ckpt_path = "./checkpoints/real-esrgan"
model_path = os.path.join(ckpt_path, "RealESRGAN_x4plus.pth")
model = RRDBNet(num_in_ch=3, num_out_ch=3, num_feat=64, num_block=23, num_grow_ch=32, scale=4)
netscale = 4

upsampler = RealESRGANer(
	scale=netscale,
	model_path=self.model_path,
	dni_weight=self.dni_weight,
	model=self.model,
	tile=0,                     # Tile size, 0 for no tile during testing
	tile_pad=10,                # Tile padding
	pre_pad=0,                  # Pre padding size at each border
	half=not fp16,
	device=device)

def enhance(image, width, height):
    """
        image: PIL Image Obj
        输出: PIL Image Obj
    """
    try:
        image_cv2 = cv2.cvtColor(np.asarray(image), cv2.COLOR_RGB2BGR)
        output, _ = upsampler.enhance(image_cv2, outscale=self.outscale)  # _ is RGB/RGBA
        image_pil = Image.fromarray(cv2.cvtColor(output, cv2.COLOR_BGR2RGB)).resize((width, height)).convert('RGB')
        # print(output, _, image_pil)
        return image_pil
    except Exception as e:
        print("enhance Exception: ", e)
    finally:
        torch.cuda.empty_cache()

测试(超分前):
在这里插入图片描述

超分后:
在这里插入图片描述

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

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

相关文章

[附源码]java毕业设计学生宿舍设备报修

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【教学类-16-01】20221122《世界杯七巧板A4-随机参考图》(大班)

效果展示: 单页效果 多页效果 背景需求: 2022年11月20日 2022年卡塔尔世界杯足球赛在卡塔尔首都多哈举行。借此契机,我设计一份七巧板让幼儿拼”踢足球“的造型。 图片准备: 从网上拉了18张各种”踢球七巧板造型图“ 新建一个…

几种常用关系型数据库架构和实现原理

【摘要】本文介绍几种常用(闭源、开源)关系型数据库的架构和实现原理,包括Oracle、MySQL、PostgreSQL、GaussDB T,涉及产品最新参数指标等请以各官网为准。 一、 Oracle (一) Oracle 架构 Oracle Server包括数据库(Database)和实例(Instance)两大部分,两者相互独立…

SSO单点登录流程详解

概念 单点登录(Single Sign On),简称为 SSO,是比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 背景 企业发展初期,系统设计不…

关于pbootcms中被挂马以后的处理

最近一段时间很多使用pbootcms建设的网站都遭遇到了首页挂马的问题,表现形式便是首页页面增加了很多?id123,?/?id37087875.csv,?id26993492.shtml等等形态.当我们查看后台系统日志中的蜘蛛访问或者首页上多了这些链接的时候,基本上就是被挂马了,这个时候我们需要及时作出处…

Go:微服务架构下的单元测试(基于 Ginkgo、gomock 、Gomega)

文章目录简介一、Ginkgo包的引入和简单介绍二、Dockertest 使用三、编写单元测试1. 编写 data 层的测试代码四、引入 gomock 包,mock 对象模拟依赖项1. 编写生成 mock 文件方法2. 编写 biz 层的测试方法3. 验证单元测试小结简介 本文主要使用 Ginkgo[2] 、gomock[3…

Vue之watch监听

计算属性不能用异步代码;有返回值的函数,用异步代码也不行;没有返回值的函数,可以用异步代码;watch监听也可以放异步代码;data、methods、computed、watch的区别: data:状态&#xf…

试题 算法提高 网格贪吃蛇(离散化 + DP)

资源限制 内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述   那个曾经风靡全球的贪吃蛇游戏又回来啦!这次贪吃蛇在m行n列的网格上沿格线爬行,从左下角坐标为(0,0)的格…

miui14即将闪亮登场 小米首批机型搭配名单 旧版系列机型可能无望更新

小米系列机型年底大动作。新版机型发布和miui14系统将会在一些机型中更新,而最新的miui14版本以简便 精简 轻巧为目的。希望miui14版本能为米粉带来意想不到的期待。以往较多米粉都反馈系统越更新越臃肿。系统资源占用太多。 小米 MIUI 14 的版本号以及适配支持机型…

柯桥俄语培训机构哪家好,能说出“как”的多少种用法呢?

学了这么久俄语的你,能说出“как”的多少种用法呢? 一起来看看这份“как”最强使用攻略吧~ 01 作为疑问副词在句中做状语,"如何""怎么样""多么" 例: Как твои дела? …

H3C 防火墙混合实验

H3C 防火墙混合实验一、项目拓扑二、项目需求三、配置步骤1. 配置IP地址2. FW默认路由,FW指向internet3. 绑定防火墙安全域端口4. 配置防火墙安全策略5. OSPF6. NAT7. PC 默认路由,PC 指向 R1链接: 拓扑下载 一、项目拓扑 二、项目需求 根据题目要求配…

6种常见三维曲面的Three.js实现

这篇文章详细介绍了三次曲线、贝塞尔曲线和 B 样条曲线和曲面背后的数学原理,并提供了使用 Three.js 库实现的代码。 1、简介 你可以在这里访问上图应用程序。此应用程序名为 CurSur,是 Curves and Surfaces 的简称。原始代码可以在这里获取。 在几何设…

算法训练Day27 | LeetCode39. 组合总和 (元素可重复,数组长度不限);40. 组合总和III(去重);131.分割回文串

目录 LeetCode39. 组合总和 1. 思路 2. 代码实现 3. 剪枝优化 4. 复杂度分析 5. 思考与收获 LeetCode40. 组合总和III 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考与收获 LeetCode131.分割回文串 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考与收获 LeetCode39…

通过DewarpNet解决图片扭曲问题

一、论文 DewarpNet:使用堆叠的三维和二维回归网络进行单幅图像文件纠正 论文地址: https://paperswithcode.com/paper/dewarpnet-single-image-document-unwarping 代码地址: https://github.com/cvlab-stonybrook/DewarpNet 二、效果展示 2.1 论文图片效果展示 从上往下…

Android Material Design之SwitchMaterial(三)

老规矩先上图 引入 implementation com.google.android.material:material:1.4.0说明 该控件就是Switch控件的增强版本,属性基本一致 属性 属性描述android:text文本android:textOn滑块打开时显示的文本android:textOff滑块关闭时显示的文本android:thumb滑块图片app:trac…

这款比奥维地图还方便的地图软件!轻便好用,功能很强大

写方案或报告的人往往会遇到需要在地图上标注的问题。最简单的方法莫过于在百度上截图,然后在ppt里标注。现场勘察需要定位,最基本的方法是利用手机读取和记录经纬度坐标。但使用百度底图标注给客户的感觉太普通,而勘察现场记录的经纬度数据事…

深度分页、唯一索引的坑、分库分表、查询分离、连接池、bufferpool优化等

文章目录表过大深度分页count(*) 与 count(列名)唯一索引分库分表只分库不分表不分库只分表分库也分表查询分离使用方法查询分离的适用场景冷热分离适用场景实现方案数据库连接池优化主键无序buffer pool 太小MySQL频繁抖动的性能优化原因解决表过大 历史数据进行归档 深度分页…

需求开发到一半需要改别的分支的bug该怎么办呢?(git stash 和 git commit)

在实际开发中,经常我们会遇到需求开发到一半,别的分支有bug急需解决的情况,这个时候我们改怎么办呢? 有的人会说可以先提交当前分支的代码再切换到别的分支改bug,当然这样是没问题的,但是呢,在项…

【计算机毕业设计】1.房屋租赁系统

一、系统截图(需要演示视频可以私聊) 摘要 当今社会房屋租赁、出售买卖是必不可少的,人们不管走到哪里都需要有一个温馨的家,有一个落脚之地,所以房屋租赁、出售市场也是非常火爆!不管是房屋租赁、出售、中…

基于conda的OpenCV库安装

基于conda的OpenCV库安装 OpenCV库的调用名是cv2 所以会看到这样的import语句 import cv2这句话就是对openCV库的调用 openCV库的下载安装 First 好像不需要像网上的教程那样, 首先去官网下载exe执行文件, 然后在VS中进行配置 直接在teminal中, 进入要指定的conda环境, …