Retinexformer论文精读笔记

Retinexformer论文精读笔记

论文为2023年ICCV的Retinexformer: One-stage Retinex-based Transformer for Low-light Image Enhancement。论文链接:browse.arxiv.org/pdf/2303.06705.pdf,代码链接:caiyuanhao1998/Retinexformer: “Retinexformer: One-stage Retinex-based Transformer for Low-light Image Enhancement” (ICCV 2023) (github.com)

这篇论文在不少数据集上刷了SOTA。

文章目录

  • Retinexformer论文精读笔记
    • 出发点
    • 模型
    • 创新点
    • 总结

出发点

In addition, these CNN-based methods show limitations in capturing long-range dependencies and non-local self- similarity, which are critical for image restoration.

出发点1:低光增强领域很多深度学习方法都应用CNN,因此缺少图片的长程依赖关系,作者于是想要在低光处理中运用Transformer以解决这个问题,实现效果的提升。这其实也并不稀罕,也已经出现过许多基于Transformer的模型,或者hybrid版本的模型。

These CNNs are first trained independently and then connected together to be finetuned end-to-end. The training process is tedious and time-consuming.

出发点2:作者看到很多基于Retinex的深度学习方法依赖于多个pipeline,无法实施真正的一步处理,于是作者想要通过一步处理以实现低光增强。

The computational complexity is quadratic to the in- put spatial size. This computational cost may be unaffordable. Due to this limitation, some CNN-Transformer hybrid algorithms like SNR-Net only employ a single global Transformer layer at the lowest spatial resolution of a U-shaped CNN. Thus, the potential of Transformer for low- light image enhancement still remains under-explored.

出发点3:最近的基于注意力的低光增强方法,并不纯粹地应用Transformer,而是CNN与Transformer的混合体,这主要源于Transformer的计算复杂度是序列的平方。这就是为什么SNR-Net只在最低分辨率应用一次全局Transformer,这就限制了Transformer的威力,作者想要解决这个问题。这个是我认为的最核心的一个出发点,作者应该就是得到SNR-Net的启发并进行思考而做的研究。

模型

在这里插入图片描述

​ 下面是冗杂的流程详述及论文许多没提到的实现细节。

​ 先说整体。整个模型框架分为两个部分,一部分是ORF,一部分是IGT。ORF对应于(a)图左侧(i)部分,用于光照估计illumination Estimator。IGT对应于(a)图右侧(ii)部分,用于去噪Corruption Restorer。上图还有两个部分,即(b)与©。©是IG-MSA,是光照引导的多头注意力。©含在(b)当中,(b)是IGAB,是一个TransformerEncoder架构。

​ 首先一张低光图片输入ORF,同时计算其光照先验Lp,两者做一个concatenation送入一个1×1卷积层,一个9×9的卷积层。9×9的卷积层输出提亮后的图片特征Light-up Feature,然后一方面将这个Light-up Feature做保存以后面使用,另一方面继续经过一个1×1的卷积层处理,变换通道数为3,输出为用于提亮的Lit-up Map,即论文中的 L ‾ \overline{L} L。然后输入I L ‾ \overline{L} L元素乘积,得到提亮后的图片 I l u I_{lu} Ilu

​ IGT类似于U-Net。下采样阶段的第一步, I l u I_{lu} Ilu经过卷积层 F 0 F_0 F0(Embedding)处理为可供Transformer处理的图片序列(详见ViT论文)。第二步,经过一个IGAB处理。在代码中,IGAB接收两个参数,一个是图片序列,一个是光照特征引导Light-up Feature,这两个参数的形状需要保持一致,除此之外,用了一个列表存储不同形状图片序列对应的Light-up Feature,在这一步,直接存储Light-up Feature,同时还用了一个列表存储不同形状的图片序列,这都是为了满足后面IG-MSA的处理。第三步,经过卷积层 F 1 F_1 F1,图片序列特征由C变成2C,在代码中,作者也将Light-up Feature喂给 F 1 F_1 F1,使得Light-up Feature形状与图片序列保持一致,特征也为2C,然后存储到前面提到的列表中,作者在论文中没有提到,我也是看代码才进一步认识的。后面是类似的,经过两个IGAB,一个卷积层最后得到特征数为4C的图片序列。

​ IGT的底层是两个IGAB,输入的图片序列特征数是4C,经过处理图片序列特征数不变。

​ 上采样阶段。首先经过卷积层 F 2 ′ F_2^{'} F2,输出特征不变为4C。第二步,将之前下采样阶段用列表存储的不同形状的图片序列拿出来,把与现在的图片序列A形状匹配的图片序列B,两者进行concatenation,得到特征为2C的图片序列。第三步,经过卷积层处理,输出特征数不变的图片序列,大小为2C。第四步,经过2个IGAB处理,处理细节是:将之前下采样阶段用列表存储的不同形状图片序列对应的Light-up Feature拿出来,把形状与现在图片序列相同的一个,共同作为IGAB的两个参数,输出特征数不变,为2C。后面是类似的。最后,经过Embedding层 F 0 ’ F_0^{’} F0映射为3维的图片,然后与经残差连接而来的原始提亮图片 I l u I_{lu} Ilu相加,得到最后处理完的去噪图片 I e n I_{en} Ien

​ IGAB类似Transformer的Encoder,由两个LayerNorm,一个前馈网络FFN和核心组件IG-MSA组成,输入与输出的形状一样,即IGAB同样地不改变图片序列的形状。IG-MSA接收两个参数,一个是输入的图片序列 F i n F_{in} Fin,一个是光照特征引导Light-up Feature。两者维度一致,假设为H×W×C。首先两者都reshape为HW×C。 F i n F_{in} Fin送入多头注意力,处理为querykeyvaluevalue单独拿出来与前面的Light-up Feature元素乘积为A,此即为光照引导的注意力。querykey进行矩阵乘法,得到C×C的矩阵B,然后与A做矩阵乘法,送入全连接层进行映射,转换为H×W×C形状的输出,最后加入一个位置信息Position Encoding即可。

创新点

We formulate a one-stage Retinex-based low-light enhancement framework, ORF, that enjoys an easy one- stage training process and models the corruptions well.

创新点1:从模型框架图可以知道,作者基于Retinex理论,但是并不在模型中直接将图片I分解为反射量R与光照L,这个是一方面。另一方面,从模型图可以看到,模型分为两部分,ORF(i)与IGT(ii),ORF的输出结果为light-up imagelight-up feature,这两个都将继续作为IGT的输入,ORF与IGT是一个整体,实现了end-to-endone-stage的效果。这跟我以往看到的双网络架构(一个用于R,一个用于L)确实不一样。

创新点2Retinex理论将图片分解为RL,即 I = R ⊙ L I = R \odot L I=RL。作者引入两个扰动项 R ^ \hat{R} R^ L ^ \hat{L} L^。分别代表着反射与照度两方面的噪音与伪影,而以往的方法只考虑一个,而没有同时考虑两个。
I = ( R + R ^ ) ⊙ ( L + L ^ ) = R ⊙ L + R ⊙ L ^ + R ^ ⊙ ( L + L ^ ) I = (R + \hat{R}) \odot (L + \hat{L})\\ = R \odot L + R \odot \hat{L} + \hat{R} \odot (L + \hat{L}) I=(R+R^)(L+L^)=RL+RL^+R^(L+L^)
这里 R ^ ∈ R H × W × 3 \hat{R} \in \mathbb{R}^{H \times W \times 3} R^RH×W×3而且 L ^ ∈ R H × W \hat{L} \in \mathbb{R}^{H \times W} L^RH×W。 R表示一个干净的图片。

​ 作者在模型中也没有直接分解图片为R与L,而是直接估计 L ‾ \overline{L} L,然后将低光图片I与 L ‾ \overline{L} L元素乘积,得到含伪影与噪音的提亮图片:

I ⊙ L ‾ = R + R ⊙ ( L ^ ⊙ L ‾ ) + ( R ^ ⊙ ( L + L ^ ) ) ⊙ L ‾ I \odot \overline{L} = R + R \odot (\hat{L} \odot \overline{L}) + (\hat{R} \odot (L + \hat{L})) \odot \overline{L} IL=R+R(L^L)+(R^(L+L^))L
这里是因为 L ‾ ⊙ L = 1 \overline{L} \odot L = 1 LL=1才有了上面的等式。然后提亮后的图片就成为了:
I l u = I ⊙ L ‾ = R + C I_{lu} = I \odot \overline{L} = R + C Ilu=IL=R+C
这里 I l u ∈ R H × W × 3 I_{lu} \in \mathbb{R}^{H \times W \times 3} IluRH×W×3代表提亮后的图片,即模型图的lit-up image,而且 C ∈ R H × W × 3 C \in \mathbb{R}^{H \times W \times 3} CRH×W×3则可以认为是全部的扰动项,也就是噪声。所以IGT对上面的C进行去除,得到干净图片R。

创新点3:提亮后图片的特征往往包含许多纹理信息,这可以应用到去噪中:

Regions with better lighting conditions can provide semantic contextual representations to help enhance the dark regions. Thus, we use the light-up feature Fluen- coding illumination information and interactions of regions with different lighting conditions to direct the computation of self-attention.

所以,作者将light-up feature作为TransformerEncoder的引导,就有了照度引导的Transformer。这感觉是有点低光增强色彩的Transformer。

创新点4:在IGT部分可以看到,作者将Transformer的Encoder应用到 U-Net的每一层中,U-Net不仅仅只有CNN。这对于目前的我来说应该算是比较新颖的。

创新点5:作者指出自己的模型计算复杂度是序列长度的线性倍,不是传统Transformer的平方倍,他说自己的计算复杂度主要源于注意力机制的两个矩阵乘法,即 K T × Q K^T \times Q KT×Q ( Y ⊙ V ) × s o f t m a x (Y \odot V) \times softmax (YV)×softmax:

A t t e n t i o n ( Q , K , V , Y ) = ( Y ⊙ V ) × s o f t m a x ( K T Q α ) ) Attention(Q, K, V, Y) = (Y \odot V) \times softmax(\frac{K^TQ}{\alpha})) Attention(Q,K,V,Y)=(YV)×softmax(αKTQ))
​ 按照他的说法以及矩阵乘法计算复杂度的公式,确实是序列长度的线性倍。但我也疑惑为什么计算复杂度主要源于这两个矩阵乘法而不是其他,而且Transformer的计算复杂度是序列长度平方倍又是如何而来,我应该将来进一步研究,也十分欢迎大佬补充。

​ 于是这个模型能够在U-Net的每一层中使用,而非只在最低分辨率用。这就提高了计算速度。

总结

​ 这篇2023年低光增强的sota文,令TransformerU-Net有机结合,使得提亮后图片的伪影与噪声得到很好的去除。通过直接估计照度 L ‾ \overline{L} L而非直接分解低光图片为照度L与反射R,实现one-stage的增强。其为Transformer引入了光照引导,更是大大减少了计算复杂度,提高了Transformer在低光增强的应用效率。

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

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

相关文章

Mac 下载安装Java、maven并配置环境变量

下载Java8 下载地址:https://www.oracle.com/java/technologies/downloads/ 根据操作系统选择版本 没有oracle账号需要注册、激活登录 mac直接选择.dmg文件进行下载,下载后安装。 默认安装路径:/Library/Java/JavaVirtualMachines/jdk-1…

【C#】.net core 6.0 创建默认Web应用,以及默认结构讲解,适合初学者

欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。…

Redis面试题44

人工智能是否有可能取代人类工作岗位? 答:人工智能在某些领域可能会取代一些人类工作岗位,但同时也会创造新的工作岗位。以下是一些关于人工智能是否取代人类工作岗位的观点: 替代观点:人工智能的发展和应用可能导致一…

标注工具体积3D数据集

史上最全 | 计算机视觉2D/3D标注工具汇总! 3D点云标注有哪些好用的开源工具 https://www.appen.com.cn/blog/3d-annotation-tool/ 3D LABELING TOOLBOX 超全的3D视觉数据集汇总 常用的图像标注工具汇总 OpenCV探索之路(二十五)&#xf…

SpringCloud-创建多模块项目

在微服务架构中,项目的组织结构对于代码的维护和团队的协作至关重要。Spring Cloud作为一个强大的微服务框架,提供了丰富的功能和组件,同时也支持多模块项目的创建,使得代码结构更加清晰、易于管理。本文将介绍如何使用 Spring Cl…

C语言-二分查找

引言 在1个升序的数组中查找指定的数字n,很容易想到的办法就是遍历数组,但是这种方法效率较低。此时可以使用二分查找,二分查找适合有序或排序过的数组 目录 引言 什么是二分查找? 引言题目代码 为什么两个公式等价 二分查…

用easyx做的消除字母游戏《字母消除大师》,快来看看吧

《字母消除大师》游戏介绍 游戏简介: 《字母消除大师》是一款简单而富有挑战性的休闲游戏。游戏中,玩家需要快速准确地按下屏幕上随机出现的英文字母,以消除它们。随着游戏的进行,字母下落的速度会逐渐加快,考验玩家的反应速度和手眼协调能力。 游戏特色: 简洁直观的…

HTML5+CSS3+移动web——HTML 基础

目录 一、标签语法 HTML的基本框架 1. 标题标签 2. 段落标签 3. 换行和水平线 4. 文本格式化标签 5. 图像标签 6. 路径 相对路径 绝对路径 7. 超链接标签 8. 音频 9. 视频 10. 注释 二、标签结构 一、标签语法 HTML 超文本标记语言——HyperText Markup Langua…

powershell 接收一个端口udp数据复制转发到多个目的

在 PowerShell 中,复制并转发 UDP 数据到多个目的地需要一些额外的处理,因为 UDP 是无连接的协议,没有像 TCP 那样的持久连接。因此,你不能像 TCP 那样简单地“接受”一个连接,而是需要监听 UDP 数据包,然后…

在Python中的闭包是什么

目录 1. 闭包的定义 2. 如何形成闭包 3. 闭包的工作原理 4. 使用场景 5. 注意事项 代码示例 总结 闭包(Closure)在Python中是一个非常有趣且强大的概念,它允许数据隐藏和封装,同时提高了代码的模块性和重用性。本文将从以下…

Kubernetes基础(十四)-k8s网络通信

1 k8s网络类型 2 Pod网络 2.1 同一pod内不同容器通信 Pod是Kubernetes中最小的可部署单元,它是一个或多个紧密关联的容器的组合,这些容器共享同一个网络命名空间和存储卷,因此Pod中的所有容器都共享相同的网络命名空间和IP地址——PodIP&a…

成员对象与封闭类

1. 成员对象与封闭类 类里有其他对象则该对象叫成员对象;有成员对象的类叫 封闭类;上例中,如果CCar类不定义构造函数,则会使用默认的无参构造函数,那么下面的语句会编译出错: 因为编译器不明白CCar类中的tyre成员对象…

C语言:函数

创作不易,友友们给个三连吧!! 一、函数的概念 数学中我们见过函数的概念,例如ykxb,k和b都是常数,给任意一个x就可以得到y 而C语言也引入了函数(function)这个概念,C语…

LeetCodeLCR 114. 火星词典——拓扑排序

文章目录 一、题目二、题解 一、题目 现有一种使用英语字母的外星文语言,这门语言的字母顺序与英语顺序不同。 给定一个字符串列表 words ,作为这门语言的词典,words 中的字符串已经 按这门新语言的字母顺序进行了排序 。 请你根据该词典还…

生成式学习,特别是生成对抗网络(GANs),存在哪些优点和缺点,在使用时需要注意哪些注意事项?

生成对抗网络(GANs) 1. 生成对抗网络(GANs)的优点:2. 生成对抗网络(GANs)的缺点:3. 使用生成对抗网络(GANs)需要注意的问题 1. 生成对抗网络(GANs…

forecast-mae调试代码报错记录2个:

微调命令python3 train.py data_root/path/to/data_root modelmodel_forecast gpus4 batch_size32 monitorval_minFDE pretrained_weights"/path/to/pretrain_ckpt"中的两个错误。 问题1: pretrained_weights不需要加单引号,单引号 去掉。 问…

python实现k路归并排序

从归并排序中可以衍生出来一个新的问题,关于k路归并排序,给定k个已经排好序的数组,每个数组含有n各元素,要求将这k个数组合并成一个排好序的大数组。在对两路排好序的数组进行归并时候,会用两个指针指向两个数组首元素…

镜舟科技客户成功团队负责人孟庆欢:湖仓一体将成为数据架构的新范式

大数据产业创新服务媒体 ——聚焦数据 改变商业 随着数字化的概念逐步深入不同领域企业的运营中,业务形态和数字化路径也越来越丰富。这也为企业数据处理、储存的方式提出了更多要求。对于企业,尤其是数据驱动型企业来说,需要强大的解决方案…

RobotFramework写测试用例时的小技巧,代码自动生成+data自动获取

1、如何快速的定位对应的取值的值 在这里插入图片描述 2、快速对request的代码进行编写

1572.矩阵对角线元素的和(Java)

题目描述: 给你一个正方形矩阵 mat,请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 输入: mat [[1,2,3], [4,5,6], [7,8,9]] 输出: 25 解释:对角线的和为&…