图像处理之《可逆重缩放网络及其扩展》论文精读

一、文章摘要

图像重缩放是一种常用的双向操作,它首先将高分辨率图像缩小以适应各种显示器或存储和带宽友好,然后将相应的低分辨率图像放大以恢复原始分辨率或放大图像中的细节。然而,非单射下采样映射丢弃了高频内容,导致逆恢复任务存在不适定问题。这可以抽象为具有信息损失的一般图像退化-恢复问题。在这项工作中,我们提出了一个新的可逆框架来处理这一普遍问题,该框架从一个新的角度来模拟双向退化和恢复,即可逆双射变换。该框架的可逆性使其能够以分布的形式对退化前的信息损失进行建模,从而缓解恢复后的不适定问题。具体来说,我们开发了可逆模型来生成有效的退化图像,同时在正向退化过程中将丢失内容的分布转化为潜变量的固定分布。然后,通过对生成的退化图像与随机绘制的潜在变量应用逆变换,使恢复变得易于处理。我们从图像的重缩放开始,实例化模型为可逆的重缩放网络,可以很容易地扩展到类似的脱色-着色任务。我们进一步建议将可逆框架与现有的退化方法(如图像压缩)结合起来,以获得更广泛的应用。实验结果表明,与现有方法相比,我们的模型在从缩小和脱色图像进行放大和彩色重建的定量和定性评估以及图像压缩的速率失真方面都有显著改进。
在这里插入图片描述

二、文章提出的方法

2.1 图像重缩放模型

对于具体的模型,我们在这一节从图像重缩放开始。我们开发了可逆重缩放网络(IRN)作为我们图像重缩放可逆建模框架的实例化模型,并描述了IRN的具体可逆结构和训练方法。我们还在算法1,2中给出了IRN模型中的下采样和升尺度算法作为示例,以更好地演示我们的可逆框架的输入、输出和过程。注意,在实践中,HR图像x和LR图像y将被量化为8位表示,如3.3.1节所述。我们在算法描述中省略了这个细节,并将定义域视为R。
在这里插入图片描述

2.1.1 可逆结构

图2说明了我们提出的IRN的架构,它基本上由一个Haar变换和几个InvBlock组成的堆叠降尺度模块组成。每个降尺度模块将空间分辨率降低2倍。如果每个组件都是可逆的,那么整个体系结构就是可逆的。
在这里插入图片描述
图2 将我们的可逆重缩放网络(IRN)作为可逆建模框架的实例化模型的说明。可逆体系结构由降尺度模块组成,其中InvBlock在Haar变换后堆叠。每个降尺度模块将空间分辨率降低2×。ρ的exp(·)被省略

Haar变换 在每个降尺度模块中,首先应用Haar变换,使模型具有一定的感应偏差,用于分割低频和高频内容,在图像下采样过程中,低频和高频内容分别被近似保留和丢失。Haar变换是一种可逆小波变换,它将输入分解为低通表示和三个方向的高频系数。具体来说,给定输入高H、宽W、通道C的原始图像或特征图,生成一个形状张量(1/2 H,1/2 W,4C),其中第一个C片是等价于双线性插值下采样的低通表示,其余三组C片分别对应于垂直、水平和对角线方向的高频残差。通过Haar变换,模型能有效分离低频和高频信息,有利于y的后续生成和xH到z的变换,Haar变换后的空间分辨率降低了2倍

InvBlock InvBlock是目标可逆转换的主要组件。考虑到输入已经被Haar变换分成低频和高频成分,我们引入了基于方程(1,2,3)中描述的耦合层架构的InvBlocks,其两个分支(即式(1)中hl1和hl2的分割)分别对应这两个分量。该转换将进一步优化输入表示,以生成合适的LR图像,以及针对丢失信息的独立且适当分布的潜在表示。对于详细的计算,考虑到图像缩放任务中快捷连接的重要性,我们对低频部分hl1采用加性变换(Eq.1),对高频部分hl2采用增强仿射变换(Eq.3)来增强模型容量。这也使模型具有一定的感应偏置,用于生成低频部分直接通过的LR图像,可以稳定IRN的训练。InvBlock架构的细节如图2所示,除了这里省略了函数ρ后的exp(·)操作。
我们使用一个密集连接的卷积块来参数化变换函数φ(·),η(·),ρ(·),该卷积块已在中证明了其对图像缩放任务的有效性。为了避免由于exp(·)函数引起的数值爆炸,我们在函数ρ(·)之后使用了居中的S形函数和标度项。

量化 我们的模型的输出是浮点值,而常见的图像格式(如RGB)则被量化为8位表示。为了实现存储兼容性,我们在生成的LR图像上采用舍入操作作为量化模块。量化后的LR图像保存为PNG格式,用于缩放。然而,量化的不可微特性给反向传播训练带来了挑战。为了克服障碍,我们应用直通估计器来计算量化模块的梯度。为了简单起见,下面省略了量化的符号。

2.1.2 规模灵活高效的实施

还可以进一步改进架构,使IRN适应更大的规模或更高的计算效率。具体来说,我们将引入可学习的下采样模块和计算效率的改进,以实现规模灵活和高效的实现。

可学习的下采样 虽然Haar小波变换能够很好地进行高频和低频内容的下采样和分割,但叠加多次变换只能以2的幂来重缩放图像。这在很大程度上限制了我们模型的缩放范围。为了实现更多的尺度,例如3×,我们建议利用一个可学习的下采样层来取代架构中的Haar变换。它由一个压缩运算和一个1 × 1可逆卷积组成。

如图3所示,压缩操作通过将空间元素压缩到通道中,降低了特定尺度N的空间分辨率。然后,利用1 × 1可逆卷积对压缩后的N × N个元素进行InvBlocks前的变换。1 × 1可逆卷积首次在GLOW (Kingma & Dhariwal,2018)中提出用于信道排列。不同于它们的目的,我们希望它能学会在任意尺度下分割低频和高频内容,并更好地适应以下InvBlocks。Haar变换可以被视为2倍尺度下这个降尺度模块的一个特例,因为它提供了一个固定的而不是可学习的先验。对于该模块,我们通过设置1 × 1可逆卷积的参数,使变换后的第一个通道为N × N个元素的平均值,而其他通道为恒等变换,使其具有可逆性,从而提供初始化时提取低频的先验。
在这里插入图片描述
图3 可学习的下采样模块的说明(2×示例)。它包括将空间分辨率降尺度N倍的压缩操作和对压缩后的N × N个元素进行1× 1可逆卷积变换

我们将具有可学习下采样的IRN模型表示为IRNLD。

分数缩放因子 在实际应用中,会有分数缩放因子。我们可以将IRN与传统插值方法结合起来进行处理。具体而言,对于缩放因子s1,我们选择缩放因子s2 = [s1]的IRN,并在将HR图像传递给IRN之前和之后分别通过缩放s2/s1和s1/s2进行插值(例如双三次)重缩放HR图像。最近的工作也证明了这一点(Xing等,2022)。

提高计算效率 我们注意到,堆叠多个降尺度模块(包含一个下采样模块和多个InvBlocks)的架构在计算过程中遭受了大量增加的FLOP。这是因为除了上一个降尺度模块之外,之前的降尺度模块中的InvBlocks都会对空间分辨率更大的张量进行卷积运算,这大大增加了计算成本。为了进一步提高计算效率,我们建议修改架构,首先应用下采样模块(例如多个Haar变换或可学习的下采样),然后通过多个InvBlocks。这使得卷积运算可以应用在更小的分辨率上,这可以在相似数量的参数下大大降低FLOP和运行时间。

我们将这种架构下的IRN模型表示为IRNE。它与IRN的区别仅在于IRN堆叠了多个降尺度模块。

2.2 图像脱色-着色模型

图像脱色-着色是一种常见的任务,是双向退化-恢复问题的另一个实例,其中通道维度上的颜色信息丢失。我们的问题公式的核心思想与图1相同,它将特定于图像的丢失信息的分布转换为图像不可知的高斯分布。下面说明了为适应这项任务而对特定模型进行的一些调整

2.2.1 架构

其基本架构如图2所示。不同于图像重缩放时对低频和高频内容进行分割,我们需要对灰度信息和颜色信息进行分割,在这里获取颜色信息分布的同时生成灰度图像。因此,我们需要将下采样模块替换为灰化模块。我们直接利用图像的YCbCr颜色空间表示来分割通道中的信息。然后这两个信息分支(即Y和CbCr)通过前面介绍的InvBlock。我们将这个模型表示为IRNcolor。

2.3 图像重缩放与压缩的结合

我们的可逆框架将退化和恢复联合建模为可逆双射变换。在实际应用中,退化操作的某些部分并不总是可以与恢复相适应,例如为了方便。例如,广泛使用的图像压缩遵循通用标准,PNG和JPEG等格式是最常用的格式,在大多数数字设备中都得到了完善的支持。因此,我们建议将我们的可逆框架与现有退化方法的恢复相结合,以获得更广泛的应用。

具体来说,我们考虑图像重缩放和压缩结合的实例化,这也是高分辨率图像更高压缩率的常用方法,因为直接图像压缩方法在极大的压缩率下表现不佳。在这项工作中,我们演示了IRN和无损以及有损压缩方法之间的结合,以获得更好的有损压缩性能。

2.3.1 方法

在无损图像压缩方法中,LR图像可以在编码时不丢失信息,因此IRN可以直接与LR图像结合,即直接压缩IRN生成的下采样LR图像。

对于现有的有损图像压缩方法,在编码过程中不可避免地会有信息丢失,即有损压缩导致额外的退化。因此,直接将IRN与它们结合,例如先压缩IRN的LR图像,然后将压缩后的图像直接传递给IRN,可能违背了所提出的可逆框架中建模丢失信息的原则。为了获得良好的性能,需要对这种退化进行额外的恢复。

为了缓解这个问题,我们建议利用一个额外的模块,通过有损压缩方法部分恢复丢失的信息。具体来说,IRN的缩小图像将首先通过有损压缩方法(例如JPEG)进行压缩,压缩后的图像将通过压缩恢复模块(CRM)传递给IRN。采用CRM作为神经网络模型,输入是经过压缩后的退化LR图像,输出是经过有损压缩后退化恢复的LR图像。该模块被训练恢复给定压缩方法的丢失信息,这与考虑单向恢复任务的许多方法类似。我们将在下一节中详细阐述该架构并评估压缩性能。IRN和CRM的结合是我们提出的可逆框架和从现有退化方法恢复的结合的实例化模型。

三、实现细节

我们的实验包括三个部分:图像重缩放,图像的脱色-着色,以及图像缩放与压缩的结合。对于所有任务的训练,我们使用广泛使用的DIV2K图像恢复数据集来训练我们的模型。它包含800个高质量的2K分辨率的训练图像和100个验证图像。此外,对于前两项任务,我们在4个额外的标准数据集上评估我们的模型,即Set5,Set14,BSD100和Urban100 ;对于第三个任务,我们还在广泛使用的Kodak数据集上评估我们的模型。对于图像重缩放,按照(Lim等,2017)中的设置,我们定量评估了在YCbCr (Y,Cb,Cr)颜色空间中表示的图像Y通道上的峰值信噪比(PSNR)和SSIM。我们还将LPIPS、PI和FID作为感知评价的定量指标。对于另外两个任务,我们在RGB三通道颜色空间上评估PSNR和SSIM。

对于图像的重缩放,我们分别用1、2和3个降尺度模块在2×、4×和8×下采样下训练和比较我们的IRN模型。每个降尺度模块有8个InvBlocks,将原始图像下采样2倍。InvBlocks中的变换函数φ(·)、η(·)、ρ(·)由一个密集连接的卷积块进行参数化,Wang et al(2018)将其称为密集块。对于IRNLD模型在3×尺度下的实验,我们使用了一个降尺度模块和12个InvBlocks。对于IRNE模型在4×尺度下的实验,我们使用一个带16个Invblocks的降尺度模块(先下采样)。我们使用Adam优化器, β1 = 0.9, β2 = 0.999来训练我们的模型。mini-batch大小设置为16。输入的HR图像被随机裁剪为144 × 144,并通过应用随机的水平和垂直翻转来增强。在预训练阶段,迭代总次数为500K,学习率初始化为2 × 10−4,在[100k,200k,300k,400k]次小批量更新时减半。式(12)中的超参数设为λ1 = 1, λ2 = s2, λ3 = 1,其中s为标度。在预训练之后,我们对我们的模型进行微调,以进行另一个200K迭代,如3.3.3节所述。学习率初始化为1 × 10−4,并在[50k,100k]次迭代中减半。在式(13)中设置λ1 = 0.01, λ2 = s2, λ3 = 1, λ4 = 0.01,预训练鉴别器5000次迭代。鉴别器类似于Ledig等(2017),它包含8个具有3×3内核的卷积层,其数量每两层从64增加到512,增加2倍,以及两个具有100个隐藏单元的密集层。

对于图像的脱色-着色,灰色模块有8个InvBlocks。超参数设置为λ1 = 1, λ2 = 9, λ3 = 1。其他优化器和迭代设置与图像缩放相同。

为了与图像压缩相结合,我们利用在图像重缩放任务中训练的IRN2×模型,并通过在训练中缩放时对生成的LR图像添加随机噪声,进一步在缩放任务中对其进行100K迭代微调,以使模型对由于压缩和恢复而对LR图像可能的变化更具鲁棒性。Kodak的模型是额外微调的2.5K迭代Kodak。我们训练一个压缩恢复模块(CRM)为每个压缩比的JPEG。CRM包含中提出的残差密集块(RRDB)中的8个残差,并通过对重构LR图像和压缩前LR图像的L2损失进行训练。优化器和迭代设置与IRN相同。

四、代码运行

4.1 官方README文档

依赖关系和安装
(1)Python 3(推荐使用Anaconda)
(2)PyTorch >= 1.0
(3)NVIDIA GPU + CUDA
(4)Python包:pip install numpy opencv-python lmdb pyyaml
(5)TensorBoard:
PyTorch >= 1.1: pip install tb-nightly future
PyTorch == 1.0: pip install tensorboardX图像缩放训练
首先在options/train/中设置一个配置文件,然后按如下方式运行:
python train.py -opt options/train/train_IRN_x4.yml图像缩放测试
首先在options/test/中设置一个配置文件,然后按如下方式运行:
python test.py -opt options/test/test_IRN_x4.yml图像脱色-着色训练
首先在options/train/中设置一个配置文件,然后按如下方式运行:
python train_IRN-Color.py -opt options/train/train_IRN_color.yml图像脱色-着色测试
首先在options/test/中设置一个配置文件,然后按如下方式运行:
python test_IRN-Color.py -opt options/test/test_IRN_color.yml结合图像压缩训练
首先在options/train/中设置一个配置文件,然后按如下方式运行:
python train_IRN-Compression.py -opt options/train/train_IRN-Compression_x2_q90.yml结合图像压缩测试
首先在options/test/中设置一个配置文件,然后按如下方式运行:
python test_IRN-Compression.py -opt options/test/test_IRN-Compression_x2_q90.yml代码框架
代码框架遵循BasicSR。它主要由配置、数据、模型和网络四部分组成。
让我们使用train命令python train.py -opt options/train/train_IRN_x4为例。在此命令之后将执行一系列操作。
(1)train.py被调用。
(2)读取选项/train/train_IRN_x4.yml中的配置,包括数据加载器的配置,网络,丢失,培训策略等。配置文件由options/options.py处理。
(3)创建训练和验证数据加载器。数据加载器是根据不同的数据模式在data/__init__.py中构造的。
(4)创建模型(根据不同的模型类型在models/__init__.py中构造)。
(5)开始训练模型。其他操作如日志记录、保存中间模型、验证、更新学习率等也在训练过程中完成。

4.2 实际运行代码

4.2.1 配置过程

(1)将codes目录设置为源代码根目录(pycharm)
(2)安装lmdb包:conda install -c conda-forge python-lmdb
(3)安装opencv包:conda install -c https://conda.anaconda.org/menpoopencv
(4)安装yaml包:conda install pyyaml
(5)安装tensorboardX包:conda install tensorboardX(pycharm)
(6)安装seaborn包:conda install seaborn(pycharm)

4.2.2 运行过程

(1)切换目录:cd codes
(2)执行命令:python test.py -opt options/test/test_IRN_x4.yml(注意注释其余test)

五、汇报PPT

在这里插入图片描述

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

论文地址:Invertible Rescaling Network and Its Extensions

开源代码:IRN+

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

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

相关文章

LVGL部件6

一.圆弧部件 1.知识概览 2.函数接口 1.lv_obj_clear_flag 在 LVGL(LittlevGL)中,lv_obj_clear_flag 函数用于清除对象的特定标志位。该函数的原型如下: void lv_obj_clear_flag(lv_obj_t * obj, lv_obj_flag_t flag);obj 是指…

[力扣 Hot100]Day20 旋转图像

题目描述 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 出处 思路 旋转时每四个位置为一组进行swap操作,找好对…

计算视图里的projection和aggregation节点区别

Projection 和 Aggregation到底有什么区别? 看名字就能看出来的。 那么在什么场景下用呢? 1. Projection就是投影,也就是说你本来的源里有什么,就直接给你拿出来。 除了这个,它使用的场景就是: 只映射需…

帮管客CRM 文件上传漏洞

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

TCP/IP详细介绍以及TCP/IP寻址

目录 ​编辑 1. TCP/IP 介绍 2. 计算机通信协议(Computer Communication Protocol) 3. 什么是 TCP/IP? 4. 在 TCP/IP 内部 5. TCP 使用固定的连接 6. IP 是无连接的 7. IP 路由器 8. TCP/IP 9. TCP/IP 寻址 10. IP地址 …

谷歌产品大更新:Bard可生成图像;文生音乐平台等5大免费功能

2月2日,谷歌在官网对生成式AI产品进行了大更新,包括类ChatGPT聊天助手Bard可以通过文本提示生成图像; 全新的文生音乐平台MusicFX;新的文生图像平台ImageFX;新的文本扩写平台TextFX;在谷歌地图中增加生成式…

MATLAB矩阵的操作(第二部分)

师从清风 矩阵的创建方法 在MATLAB中,矩阵的创建方法主要有三种,分别是:直接输入法、函数创建法和导入本地文件中的数据。 直接输入法 输入矩阵时要以中括号“[ ]”作为标识符号,矩阵的所有元素必须都在中括号内。 矩阵的同行元…

UnitySahder实现Phong/BlinnPhong模型

目录 Phong模型公式: BlinnPhong模型公式: 实现: Phong模型: BlinnPhong模型: Phong模型公式: 结果自发光+环境光漫反射高光反射 BlinnPhong模型公式: 对Phong模型的简单修改&…

Git―基本操作

Git ⛅认识 Git⛅安装 GitCentos(7.6)Ubuntu ⛅Git―基本操作创建本地仓库🍂配置本地仓库🍂工作区, 暂存区, 版本库🍂版本库工作区 添加文件🍂查看文件🍂修改文件🍂版本回退🍂☃️案例 撤销修改…

k8s中cert-manager管理https证书

前言 目前https是刚需,但证书又很贵,虽然阿里云有免费的,但没有泛域名证书,每有一个子域名就要申请一个证书,有效期1年,1年一到全都的更换,太麻烦了。经过搜索,发现了自动更新证书神器cert-manager;当然cert-manager是基于k8s的。 安装采用Helm方式 Chart地址: ht…

THREE.JS动态场景开发实战【赛博朋克】

在本教程中,我们将探索如何创建类似 Three.js 的赛博朋克场景,灵感来自 Pipe 网站上的背景动画。 我们将指导你完成使用 Three.js 编码动态场景的过程,包括后处理效果和动态光照,所有这些都不需要任何着色器专业知识。 我用这个场…

西瓜书学习笔记——k近邻学习(公式推导+举例应用)

文章目录 算法介绍实验分析 算法介绍 K最近邻(K-Nearest Neighbors,KNN)是一种常用的监督学习算法,用于分类和回归任务。该算法基于一个简单的思想:如果一个样本在特征空间中的 k k k个最近邻居中的大多数属于某个类别…

vue+element 换肤功能

1.首先建深色和浅色两个主题样式变量样式表,样式表名和按钮中传入的值一样,本例中起名为default.scss和dark.scss 2.在data中定义主题变量名 zTheme:‘defalut’,默认引用defalut.scss, 在点击按钮时切换引用的样式表,达到换肤效果…

结合实例谈谈SPSS多元线性回归分析结果解读与报告撰写

为研究某地区房地产市场的价格与相关影响因素之间的关系,现从该地区采集了 20 份样本,数据如下表,请给出销售价格与相关影响因素之间的函数表达式,并从统计学角度分析这些因素之间的关系,最后预测 X 小区的平均销售价格…

【洛谷学习自留】p1055 ISBN 号码

解题思路: 1.首先考虑怎么分解字符串的问题,把字符串内的数字拿出来,这里我使用了String的toCharArray方法,将字符串内的所有字符拿出来,然后针对性的把所有数字轮流用于计算,因为数组内的数字是以字符的形…

中小学电子编程内部集中培训第三课

蜂鸣器学习 可视化代码 见链接: 利用小车写蜂鸣器

北朝隋唐文物展亮相广西,文物预防性保护网关保驾护航

一、霸府名都——太原博物馆收藏北朝隋朝文物展 2月1日,广西民族博物馆与太原博物馆携手,盛大开启“霸府名都——太原博物馆北朝隋文物展”。此次新春展览精选了北朝隋唐时期150多件晋阳文物珍品。依据“巍巍雄镇”“惊世古冢”“锦绣名都”三个单元&am…

某赛通电子文档安全管理系统 UploadFileList 任意文件读取漏洞复现

0x01 产品简介 某赛通电子文档安全管理系统(简称:CDG)是一款电子文档安全加密软件,该系统利用驱动层透明加密技术,通过对电子文档的加密保护,防止内部员工泄密和外部人员非法窃取企业核心重要数据资产,对电子文档进行全生命周期防护,系统具有透明加密、主动加密、智能…

用VsCode写python

1.创建一个文件夹 2.创建.py文件 print("Hello World") print("*"*10) 4.运行 在终端版本fileName python3 app.py

线性代数:线性方程组

目录 一、线性方程组概念 二、消元法求线性方程组 三、系数阵的秩与线性方程组的解 无解 唯一解 无数解 相关定理 一、线性方程组概念 二、消元法求线性方程组 三、系数阵的秩与线性方程组的解 无解 唯一解 无数解 相关定理