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