SPFLUT: Look-Up Table Compression for Efficient Image Restoration(2024 CVPR)
本文将从头开始对SPFLUT: Look-Up Table Compression for Efficient Image Restoration,这篇轻量超分算法进行讲解。参考资料如下:
[1]. SPFLUT论文地址
[2]. SPFLUT代码地址
专题介绍
Look-Up Table(查找表,LUT)是一种数据结构(也可以理解为字典),通过输入的key来查找到对应的value。其优势在于无需计算过程,不依赖于GPU、NPU等特殊硬件,本质就是一种内存换算力的思想。LUT在图像处理中是比较常见的操作,如Gamma映射,3D CLUT等。
近些年,LUT技术已被用于深度学习领域,由SR-LUT启发性地提出了模型训练+LUT推理的新范式。
本专题旨在跟进和解读LUT技术的发展趋势,为读者分享最全最新的LUT方法,欢迎一起探讨交流。
系列文章如下:
【1】SR-LUT
【2】Mu-LUT
【3】SP-LUT
【4】RC-LUT
【5】EC-LUT
一、研究背景
以往的LUT系列文章,基本上都在讨论用何种方式来提升空间的RF感受野,使用串并联LUT的MuLUT、使用聚合模块的SPLUT、使用重构卷积的RCLUT、使用扩展卷积的ECLUT,他们存在一个问题,特征只在空间维度进行交互,通道层面的特征没有进行交互,导致继续扩展后的LUT网络效果收益不大,另外还有一个问题是扩展后的LUT网络会大大增大尺寸,不便于使用,SPFLUT针对这两个问题,提出了一个带有通道特征融合的复杂串并联LUT网络,同时利用其提出的Diagonal-First Compression(DFC)对角线优先压缩方法大大减小了LUT尺寸,在提升性能的同时减小了LUT尺寸。
SPFLUT考虑的问题是目前空间LUT的方法存在大量冗余,作者基于自然图像低频的先验和对LUT查询次数统计的实验,发现空间LUT的对角线使用频率会远远大于非对角线的区域。因此提出了一个对角线优先的LUT压缩策略来减少LUT表的冗余,从而极大的降低了LUT的尺寸,主要的贡献点可以总结为以下3点:
- 提出了一个对角线优先的LUT压缩策略,将LUT压缩为两个更小的LUT,对角线全部保留,非对角线采用一个更大的采样比来减小冗余。
- 设计了一个更强大的多LUT网络结构提升了性能,搭配LUT压缩策略,可以保持多LUT的RF优势,又可以大大减小多LUT的内存占用,充分发挥LUT推理的优势。
- 定量和定性的实验表明本文的方法达到了效果和存储的trade-off 方面的sota。
下图是论文中核心策略的性能优化展示,给到任何的LUT方法都有大小的减小,且基本不影响效果。
值得注意的是,SRLUT和MULUT在使用本文的DFC压缩策略后,所需的size小于L2 cache size,这大大加快了查表速度。
论文的研究动机可以总结为以下3点:
- scaling law在LUT方法上的一个趋势是越大RF的LUT网络可以达到更好的PSNR效果,但同时也引入了更大的存储容量。
- MuLUT上的scaling law提升已经出现了边际效应,作者认为是LUT提取的特征没有做通道之间的交互,只有空间之间的交互,因此效果提升有限。
- 作者提出了一个网络结构来加入通道之间的交互,但是这样带来了更大的LUT存储容量,17.284MB是MULUT的4倍,是SRLUT的14倍。
文中给出了一个图来配合讲解,比如(d)中我们可以看到SDY X4的MuLUT相比较X2效果提升有限,但整体满足越大RF效果越好,而SPFLUT提升明显,但带来了过大的存储量。
二、SPFLUT方法
SPFLUT方法重点在于压缩策略,接下来将分为研究发现,对角线压缩、非对角线压缩以及分析来进行讲解,该方法总体流程与MuLUT是一致的。老读者应该是相当熟悉了,LUT方案的关键4步骤,训练、转换、微调、测试。
2.1 研究发现
下图是作者将一个4D LUT的前2个维度的使用频率在测试集上拉出来进行了分析,发现对角线上的使用频率会远远大于非对角线区域。
作者对这种情况给出了自己的理解,因为空间LUT的坐标索引是由LQ PATCH中的相邻像素组成的,大多数局部patch中相邻像素的值非常接近,这与自然图像数据的分布一致。
聪明的你们都知道,图像本身就具有稀疏性。编码压缩就是利用了稀疏特性。这样就比较好理解作者所谓的发现了。
自然而然的,作者根据这个发现,对LUT表进行压缩,对高频的对角线位置全部保留,非对角线采用更小的采样,可以大幅减小冗余。这个DFC策略作者如下图所示:
作者以压缩前两维的对角线为例进行讲解,可以看到分为两部分,蓝色的对角线部分,通过重新索引,减少索引维度和数量,橘色的非对角线部分通过减少采样比来减少索引数量,通过这种方式减小了原有黄色LUT的冗余。
2.2 对角线压缩策略
整体流程如下图所示,通过Index Mapper,对原有的索引进行Re-indexing,得到新的 L U T D R LUT_{DR} LUTDR,此时的维度是 ( K , L , L ) (K,L,L) (K,L,L)。
对角线的定义如下式所示,这里 I 0 I_0 I0和 I 1 I_1 I1分别是前两位的索引, λ \lambda λ是距离参数:
∣ I 0 − I 1 ∣ < = λ |I_0 - I_1| <=\lambda ∣I0−I1∣<=λ
下面继续细化这个情况下的细节,图中维度
L
L
L等于8,
λ
\lambda
λ等于2,我们可以了解下面2个点:
- 对角线维度的总个数:公式如下所示:
K = 2 L λ − λ 2 + L − λ K=2L\lambda-\lambda^{2}+L-\lambda K=2Lλ−λ2+L−λ
带入此时的情况可以得到此时
K
=
2
∗
16
−
4
+
8
−
2
=
32
−
6
+
8
=
34
K=2*16-4+8-2=32-6+8=34
K=2∗16−4+8−2=32−6+8=34
得到公式的方法,可以用减法,用总的数目减去两个递增数列,公式描述如下:
K = L ∗ L − ( 1 + ( L − λ − 1 ) ) ∗ ( L − λ − 1 ) = 2 L λ − λ 2 + L − λ K=L*L-(1+(L-\lambda-1))*(L-\lambda-1)=2L\lambda-\lambda^{2}+L-\lambda K=L∗L−(1+(L−λ−1))∗(L−λ−1)=2Lλ−λ2+L−λ
- 原位置与新位置的索引关系:即 ( k , L , L ) (k,L,L) (k,L,L)与原有位置 ( I 0 , I 1 , L , L ) (I_0,I_1,L,L) (I0,I1,L,L)的对应关系,通过分析,具体位置对应的个数,根据所在行的位置,可以得到每一行的对角线的个数(这里默认原有位置在预设定的对角线):
k ’ = { λ + I 0 + 1 , I 0 ∈ [ 0 , λ − 1 ] 2 λ + 1 , I 0 ∈ [ λ , L − λ − 1 ] L − I 0 + λ , I 0 ∈ [ L − λ , L − 1 ] \mathrm{k’}=\left\{\begin{array}{c} \lambda+I_{0}+1, \quad I_{0} \in[0, \lambda-1] \\ 2 \lambda+1, \quad I_{0} \in[\lambda,L-\lambda-1] \\ L-I_{0}+\lambda, \quad I_{0} \in[L-\lambda, L-1] \end{array}\right. k’=⎩ ⎨ ⎧λ+I0+1,I0∈[0,λ−1]2λ+1,I0∈[λ,L−λ−1]L−I0+λ,I0∈[L−λ,L−1]
这里我们可以同时计算下所有行 k ′ k' k′的和,与前面给出的总数 K K K进行验证,可以发现结果是一样的。有了这个之后我们计算索引 k k k就简单很多,根据 I 0 I_0 I0所在位置,可以计算到所在行前面所有的和,在得到当前行的索引,就可以得到 k k k。
2.3 非对角线压缩策略
这个非常简单,即用更大的采样间隔,如下图所示,采样后的LUT为 L U T N S LUT_{NS} LUTNS。
即可以想象成原有LUT用了更大的采样间隔保存。假设 L U T N S LUT_{NS} LUTNS的维度为 ( D , D , D , D ) (D,D,D,D) (D,D,D,D), D D D定义为:
D = 2 8 − σ + 1 D=2^{8-\sigma }+1 D=28−σ+1
自然,这里的 σ \sigma σ控制着非对角线区域的采样比例。
2.4 压缩策略分析
作者在这里对压缩比例进行了理论的分析。
1)首先针对对角线区域:
S D R = K ∗ L n − p ∗ m B = K ∗ ( 2 8 − q + 1 ) n − p ∗ m B S_{DR}=K*L^{n-p}*mB=K*(2^{8-q}+1)^{n-p}*mB SDR=K∗Ln−p∗mB=K∗(28−q+1)n−p∗mB
这里 p p p是压缩的dimension个数,前面举的例子是2,自然它不能大于总的dimension个数 n n n, q q q是采样比例,前面讲到的大多数论文都选用了4,即16的采样间隔, m m m是输出的个数,一般是1,当使用到pixelshuffle是根据放大比例变化。
2)非对角线区域:
S N S = D n ∗ m B = ( 2 8 − σ ) n ∗ m B S_{NS}=D^{n}*mB=(2^{8-\sigma})^{n}*mB SNS=Dn∗mB=(28−σ)n∗mB
这里的 σ \sigma σ前面讲到了是非对角线区域的采样比例,自然它不能比原始采用的 q q q还小,否则是反向压缩,自然也不能大于8。
3)压缩比例:
一个完整的空间LUT的尺寸为:
S = ( 2 8 − q + 1 ) n ∗ m B S=(2^{8-q}+1)^{n}*mB S=(28−q+1)n∗mB
那么压缩比就是:
C R = ( S D R + S N S ) / S ∗ 100 % CR=(S_{DR}+S_{NS})/S * 100\% CR=(SDR+SNS)/S∗100%
我们可以分析得到, λ \lambda λ对角线宽度是跟压缩比成反比,而 p p p压缩维度和 σ \sigma σ采样比是成正比,越大压缩率越大。
三、实验结果
定量的实验结果显示:SPFLUT效果是最好的,搭配DFC可以大幅减小LUT的存储量,且效果基本不受影响。其他方法也是同理。
定性的实验结果显示,SPF方法是最好的,在多个任务上进行了比较,超分、降噪和去JPEG压缩,即DFC可以近乎无损的减小存储量,且可以扩展。
接下来作者进行了消融实验:
1)关于
λ
\lambda
λ:
大小在1-5之间非常重要,后面就逐渐饱和,说明对角线非常重要,保存了LUT大部分信息。
2)关于 p p p值:
p p p值在对角线宽度大时,比如表中11时,值得大小影响不大,当 λ \lambda λ小时,此时 p p p会影响性能。
3)关于 σ \sigma σ值:还是上面的表,看最后一行,具有一定对角线宽度的对角线LUT可以包含几乎所有的信息,因此当我们 σ \sigma σ扩大至7时,效果基本不受影响。
四、总结
- SPFLUT提出了一种对角线压缩LUT方法的策略,可以大幅减小空间LUT表的冗余,进一步提升了LUT方法的可用性。
- SPFLUT提出了一种网络结构,大幅提升感受野至21x21,引入了通道LUT来进行特征提取,不过通道LUT可能不一定满足先验去完成压缩,这个可能是后续改进的点。
- SPFLUT的效果没有输入通道的关联,这意味着它不能处理色噪声,感受野对比DNN还存在提升的点,仍然不够大。
代码部分后续会单起一篇来进行解读。(未完待续)
感谢阅读,欢迎留言或私信,一起探讨和交流。
喜欢的可以关注、点赞、收藏,再次感谢!