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的启发并进行思考而做的研究。

模型

Retinexformer论文精读笔记_第1张图片

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

​ 先说整体。整个模型框架分为两个部分,一部分是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在低光增强的应用效率。

你可能感兴趣的:(低光增强,笔记)