【LUT技术专题】LUT空间的极致压缩-SPFLUT

在这里插入图片描述



本文将从头开始对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点:

  1. 提出了一个对角线优先的LUT压缩策略,将LUT压缩为两个更小的LUT,对角线全部保留,非对角线采用一个更大的采样比来减小冗余。
  2. 设计了一个更强大的多LUT网络结构提升了性能,搭配LUT压缩策略,可以保持多LUT的RF优势,又可以大大减小多LUT的内存占用,充分发挥LUT推理的优势。
  3. 定量和定性的实验表明本文的方法达到了效果和存储的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 I0I1<=λ

下面继续细化这个情况下的细节,图中维度 L L L等于8, λ \lambda λ等于2,我们可以了解下面2个点:
在这里插入图片描述

  1. 对角线维度的总个数:公式如下所示:

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=2164+82=326+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=LL(1+(Lλ1))(Lλ1)=2Lλλ2+Lλ

  1. 原位置与新位置的索引关系:即 ( 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]LI0+λ,I0[Lλ,L1]

这里我们可以同时计算下所有行 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=KLnpmB=K(28q+1)npmB

这里 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=DnmB=(28σ)nmB

这里的 σ \sigma σ前面讲到了是非对角线区域的采样比例,自然它不能比原始采用的 q q q还小,否则是反向压缩,自然也不能大于8。

3)压缩比例:
一个完整的空间LUT的尺寸为:

S = ( 2 8 − q + 1 ) n ∗ m B S=(2^{8-q}+1)^{n}*mB S=(28q+1)nmB

那么压缩比就是:

C R = ( S D R + S N S ) / S ∗ 100 % CR=(S_{DR}+S_{NS})/S * 100\% CR=(SDR+SNS)/S100%

我们可以分析得到, λ \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时,效果基本不受影响。

四、总结

  1. SPFLUT提出了一种对角线压缩LUT方法的策略,可以大幅减小空间LUT表的冗余,进一步提升了LUT方法的可用性。
  2. SPFLUT提出了一种网络结构,大幅提升感受野至21x21,引入了通道LUT来进行特征提取,不过通道LUT可能不一定满足先验去完成压缩,这个可能是后续改进的点。
  3. SPFLUT的效果没有输入通道的关联,这意味着它不能处理色噪声,感受野对比DNN还存在提升的点,仍然不够大。

代码部分后续会单起一篇来进行解读。(未完待续)


感谢阅读,欢迎留言或私信,一起探讨和交流。
喜欢的可以关注、点赞、收藏,再次感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值