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,是一个Transformer
的Encoder
架构。
首先一张低光图片输入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送入多头注意力,处理为query
,key
,value
。value
单独拿出来与前面的Light-up Feature
元素乘积为A,此即为光照引导的注意力。query
与key
进行矩阵乘法,得到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 image
与light-up feature
,这两个都将继续作为IGT的输入,ORF与IGT是一个整体,实现了end-to-end
,one-stage
的效果。这跟我以往看到的双网络架构(一个用于R,一个用于L)确实不一样。
创新点2:Retinex
理论将图片分解为R
与L
,即 I = R ⊙ L I = R \odot L I=R⊙L。作者引入两个扰动项 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^)=R⊙L+R⊙L^+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} I⊙L=R+R⊙(L^⊙L)+(R^⊙(L+L^))⊙L
这里是因为 L ‾ ⊙ L = 1 \overline{L} \odot L = 1 L⊙L=1才有了上面的等式。然后提亮后的图片就成为了:
I l u = I ⊙ L ‾ = R + C I_{lu} = I \odot \overline{L} = R + C Ilu=I⊙L=R+C
这里 I l u ∈ R H × W × 3 I_{lu} \in \mathbb{R}^{H \times W \times 3} Ilu∈RH×W×3代表提亮后的图片,即模型图的lit-up image
,而且 C ∈ R H × W × 3 C \in \mathbb{R}^{H \times W \times 3} C∈RH×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
作为Transformer
中Encoder
的引导,就有了照度引导的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 (Y⊙V)×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)=(Y⊙V)×softmax(αKTQ))
按照他的说法以及矩阵乘法计算复杂度的公式,确实是序列长度的线性倍。但我也疑惑为什么计算复杂度主要源于这两个矩阵乘法而不是其他,而且Transformer
的计算复杂度是序列长度平方倍又是如何而来,我应该将来进一步研究,也十分欢迎大佬补充。
于是这个模型能够在U-Net
的每一层中使用,而非只在最低分辨率用。这就提高了计算速度。
总结
这篇2023年低光增强的sota文,令Transformer
与U-Net
有机结合,使得提亮后图片的伪影与噪声得到很好的去除。通过直接估计照度 L ‾ \overline{L} L而非直接分解低光图片为照度L与反射R,实现one-stage
的增强。其为Transformer
引入了光照引导,更是大大减少了计算复杂度,提高了Transformer
在低光增强的应用效率。