# 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。

# 出发点

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

# 模型

image

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

​ 先说整体。整个模型框架分为两个部分,一部分是 ORF,一部分是 IGT。ORF 对应于 (a) 图左侧 (i) 部分,用于光照估计 illumination Estimator 。IGT 对应于 (a) 图右侧 (ii) 部分,用于去噪 Corruption Restorer 。上图还有两个部分,即 (b) 与 (c)。(c) 是 IG-MSA,是光照引导的多头注意力。(c) 含在 (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}。然后输入 IL\overline{L} 元素乘积,得到提亮后的图片IluI_{lu}

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

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

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

​ IGAB 类似 Transformer 的 Encoder,由两个 LayerNorm,一个前馈网络 FFN 和核心组件 IG-MSA 组成,输入与输出的形状一样,即 IGAB 同样地不改变图片序列的形状。IG-MSA 接收两个参数,一个是输入的图片序列FinF_{in},一个是光照特征引导 Light-up Feature 。两者维度一致,假设为 H×W×C。首先两者都 reshape 为 HW×C。FinF_{in} 送入多头注意力,处理为 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=RLI = R \odot L。作者引入两个扰动项R^\hat{R}L^\hat{L}。分别代表着反射与照度两方面的噪音与伪影,而以往的方法只考虑一个,而没有同时考虑两个。

I=(R+R^)(L+L^)=RL+RL^+R^(L+L^)I = (R + \hat{R}) \odot (L + \hat{L}) = R \odot L + R \odot \hat{L} + \hat{R} \odot (L + \hat{L})

这里R^RH×W×3\hat{R} \in \mathbb{R}^{H \times W \times 3} 而且L^RH×W\hat{L} \in \mathbb{R}^{H \times W}。 R 表示一个干净的图片。

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

IL=R+R(L^L)+(R^(L+L^))LI \odot \overline{L} = R + R \odot (\hat{L} \odot \overline{L}) + (\hat{R} \odot (L + \hat{L})) \odot \overline{L}

这里是因为LL=1\overline{L} \odot L = 1 才有了上面的等式。然后提亮后的图片就成为了:

Ilu=IL=R+CI_{lu} = I \odot \overline{L} = R + C

这里IluRH×W×3I_{lu} \in \mathbb{R}^{H \times W \times 3} 代表提亮后的图片,即模型图的 lit-up image ,而且CRH×W×3C \in \mathbb{R}^{H \times W \times 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 的平方倍。

Attention(Q,K,V,Y)=(YV)×softmax(KTQα))Attention(Q, K, V, Y) = (Y \odot V) \times softmax(\frac{K^TQ}{\alpha}))

​ 按照他的说法以及矩阵乘法计算复杂度的公式,确实是序列长度的线性倍。这里用的注意力评分函数与缩放点积注意力评分函数不太一样。具体而言,缩放点积注意力是:

QKTα\frac{QK^T}{\alpha}

而作者使用的评分函数是:

KTQα\frac{K^TQ}{\alpha}

这个细微的差别,导致了所计算出来的时间复杂度是序列(HW)的线性倍,即:

O(n)=O(2HW×C2)O(n) = O(2HW × C^2)

而原始的缩放点积注意力下的 Transformer 时间复杂度是序列 HW 的平方。这就是他说计算复杂度是序列的线性倍的原因。

这个操作可以在 Restormer 中看到。

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

# 总结

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

​ 这篇文章,新颖度,有效性,问题大小满分都为 100 分的话,个人认为,新颖度:10 分,有效性:100 分,问题大小:10 分,所以价值可以认为是 10000 分,这在低光增强这样的 low-level 视觉已经是相当大的贡献。

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Runhua Deng 微信支付

微信支付

Runhua Deng alipay

alipay

Runhua Deng paypal

paypal