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在低光增强的应用效率。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

初次认识和学习SEO

初探 SEO 初探 SEO SEO 的基本概念 搜索引擎优化(英语:search engine optimization,缩写为 SEO),是一种透过了解搜索引擎的运作规则来调整网站,以及提高目的网站在有关搜索引擎内排名的方式 一般的可以理…

k8s 网络策略揭秘:CKA认证必备的网络知识全解析

网络策略(NetworkPolicy)是Kubernetes中的一种资源对象,用于定义和控制Pod之间的网络通信规则。它允许您在Kubernetes集群中定义详细的网络规则,以控制哪些Pod可以相互通信,以及允许或禁止的流量。网络策略提供了一种实…

【MATLAB源码-第137期】基于matlab的NOMA系统和OFDMA系统对比仿真。

操作环境: MATLAB 2022a 1、算法描述 NOMA(非正交多址)和OFDMA(正交频分多址)是两种流行的无线通信技术,广泛应用于现代移动通信系统中,如4G、5G和未来的6G网络。它们的设计目标是提高频谱效…

泛型、Trait 和生命周期(上)

目录 1、提取函数来减少重复 2、在函数定义中使用泛型 3、结构体定义中的泛型 4、枚举定义中的泛型 5、方法定义中的泛型 6、泛型代码的性能 每一门编程语言都有高效处理重复概念的工具。在 Rust 中其工具之一就是 泛型(generics)。泛型是具体类型…

Verilog刷题笔记18

题目:An if statement usually creates a 2-to-1 multiplexer, selecting one input if the condition is true, and the other input if the condition is false. 解题: module top_module(input a,input b,input sel_b1,input sel_b2,output wire ou…

【excel密码】Excel加密的三种方式

Excel中保存着重要的数据,想要保护数据源,我们会想到给Excel文件进行加密,方法有很多,今天分享三种Excel加密方法给大家。 打开密码 设置了打开密码的excel文件,打开文件就会提示输入密码才能打开excel文件&#xff…

数据库中间件介绍

数据库中间件是连接数据库和应用程序之间的软件层,用于简化数据库管理、提高性能和可伸缩性,同时提供额外的功能和服务。在分布式系统和大规模应用中,数据库中间件发挥着重要的作用。 什么是数据库中间件? 数据库中间件是一种介…

Unity类银河恶魔城学习记录2-1.2.3.4.5 背景和摄像机相关设置 P42-p45

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili ParallaxBackground.cs using System.Collections; using System.Collect…

maven依赖报错处理(或者maven怎么刷新都下载不了依赖)

maven依赖报错,或者不报错,但是怎么刷新maven都没反应,可以试一下以下操作 当下载jar的时候,如果断网,或者连接超时的时候,会自动在文件夹中创建一个名为*lastupdate的文件,当有了这个文件之后…

李沐《动手学深度学习》注意力机制

系列文章 李沐《动手学深度学习》预备知识 张量操作及数据处理 李沐《动手学深度学习》预备知识 线性代数及微积分 李沐《动手学深度学习》线性神经网络 线性回归 李沐《动手学深度学习》线性神经网络 softmax回归 李沐《动手学深度学习》多层感知机 模型概念和代码实现 李沐《…

Redis学习及总结

Redis 快速入门 Redis属于非关系型数据库 SQL应用场景 数据结构固定相关业务对数据安全性一致性要求高 NoSQL应用场景 数据结构不固定对一致性,安全性要求不高性能要求高 🎯需要使用Xftp 传输压缩包到虚拟机上 安装好Redis后, 执行命令…

VMware虚拟机清理瘦身

用了一段时间VMware虚拟机之后,发现内存越来越小,也没装什么软件。。。 1.查询磁盘空间分布 虚拟机中磁盘空间查询 先看一下哪些地方占用的空间大,进行排查。 2.排查VMware复制文件产生的缓存路径 VMware复制文件有一个特点,以…

护眼灯的色温标准是什么?护眼灯参数标准介绍

选择合适的护眼台灯不仅能提升家居的品质,还能为我们的生活增添一份温馨与舒适。不过有些色温调节不当不仅不能达到很好的学习效率,还容易打瞌睡,甚至伤眼睛的情况也有可能出现,那么什么色温有什么标准呢? 一、合适的…

推动海外云手机发展的几个因素

随着科技的不断发展,海外云手机作为一种新兴技术,在未来呈现出令人瞩目的发展趋势。本文将在用户需求、技术创新和全球市场前景等方面,探讨海外云手机在未来的发展。 1. 用户需求的引领: 随着人们对移动性和便捷性的需求不断增长&…

备战蓝桥杯---搜索(进阶2)

话不多说&#xff0c;直接看题&#xff1a; 相当于找一个点使它到3个国家的距离和min,显然&#xff0c;我们不可以枚举点&#xff0c;但是&#xff0c;我们可以对这3个国家分别bfs&#xff0c;然后枚举相加即可。 下面是AC代码&#xff1a; #include<bits/stdc.h> usin…

《【python】staticmethod与classmethod深度机制解析——要知其所以然》学习笔记

《【python】staticmethod与classmethod深度机制解析——要知其所以然》 1 Python中classmethod的实现机制 1.1 type_getattro(PyObject *type, PyObject *name)解析

Verilog刷题笔记19

题目&#xff1a; A common source of errors: How to avoid making latches When designing circuits, you must think first in terms of circuits: I want this logic gate I want a combinational blob of logic that has these inputs and produces these outputs I want…

KtConnect 本地连接连接K8S工具

KT Connect简介 Kt Connect &#xff08;Kubernetes Developer Tool&#xff09;是一个阿里开源、轻量级的面向 Kubernetes 用户的开发测试环境治理辅助工具。其核心是通过建立本地到集群以及集群到本地的双向通道。 1.阿里开源&#xff0c;轻量级, 2. 安装快捷简单&#xf…

年假作业day2

1.打印字母图形 #include<stdio.h> #include<string.h> int main(int argc, const char *argv[]) { int i,j; char k; for(i1;i<7;i) { for(j1;j<i;j) { printf("%c",_); } for(j0,…

Redis中的缓存穿透、雪崩、击穿的原因以及解决方案(详解)

一、概述 ① 缓存穿透&#xff1a;大量请求根本不存在的key&#xff08;下文详解&#xff09; ② 缓存雪崩&#xff1a;redis中大量key集体过期&#xff08;下文详解&#xff09; ③ 缓存击穿&#xff1a;redis中一个热点key过期&#xff08;大量用户访问该热点key&#xff0c;…