【LUT技术专题】3DLUT压缩-CLUT
3DLUT压缩-CLUT-Net: Learning Adaptively Compressed Representations of 3DLUTs for Lightweight Image Enhancement(2022 ACMMM)
- 专题介绍
- 一、研究背景
- 二、CLUT方法
- 2.1 3DLUT压缩观察与方法总览
- 2.2 压缩自适应的变换矩阵
- 2.3 讨论分析
- 三、实验结果
- 四、总结
本文将围绕《CLUT-Net: Learning Adaptively Compressed Representations of 3DLUTs for Lightweight Image Enhancement》展开完整解析。该研究为了解决3DLUT性能和参数量的平衡问题,提出了一个3DLUT的压缩方法,能够在使用更多的基础3DLUT的情况下,大大减小整体方案的参数量,达到了更高效的图像增强效果。参考资料如下:
[1]. 论文地址
[2]. 代码地址
专题介绍
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
【6】SPF-LUT
【7】Dn-LUT
【8】Tiny-LUT
【9】3D-LUT
【10】4D-LUT
【11】AdaInt-LUT
【12】Sep-LUT
一、研究背景
基于3DLUT的图像增强方法在性能和耗时、内存方面取得了很好的平衡。回顾3DLUT的实现,我们可以发现当使用更多的基础3DLUT时,效果会更好,但同时会带来更多的参数量(原始论文中最终采用的条数是3),作者用了一个图来说明这个现象。
可以看到当LUT条数线性增大时,参数量大小也线性增大,PSNR会逐渐增大直至10后饱和,饱和的原因作者认为是较大的参数量反而增大了训练的难度,导致3DLUT性能更差。
为了解决这个问题,作者深入分析了3DLUT的特性,提出了CLUT方法,能够有效对3DLUT进行压缩,在保持3DLUT映射能力的前提下显著减小了参数量。
主要的贡献点如下:
- 在深入分析3DLUT的特征后,提出了一种3DLUT的压缩方法CLUT,与标准的3DLUT相比,CLUT保持了原始LUT的映射能力,参数减小了几个数量级。
- 基于CLUT压缩方法构建了一个轻量级的图像增强网络,CLUT-Net,端到端的学习CLUT。
- 大量的实验表明,在多个广泛使用的图像增强基准测试中,该方案是有效的。
二、CLUT方法
2.1 3DLUT压缩观察与方法总览
作者首先分析了3DLUT的作用以及它的大小。一个常见的3DLUT形式表示如下: ϕ c ∈ R D × D × D \phi ^{c} \in R^{D \times D \times D} ϕc∈RD×D×D其中 c c c代表 r , g , b r,g,b r,g,b任意一个通道,假设每个通道的bins数为 D D D,整个3DLUT的参数量是 D 3 D^3 D3,当我们存在多条3DLUT时,参数量就变成 N × D 3 N \times D^3 N×D3了。
自然而然的,根据常规的思路如果我们想要去减小这个参数量,只能从2个角度,要么减小 D D D,要么减小 N N N,假设我们去减小 D D D,相当于同时减小 r , g , b r,g,b r,g,b 3个通道的bins个数,这使得3DLUT的映射精度急速减小,从而影响性能;减小 N N N是同理,一样会带来有损的参数削减。
然后作者提出了他的发现,3DLUT映射结果的输出通道只跟1个输入通道强相关,而跟另外2个输入通道弱相关,因此从无损削减参数的角度,就应该不改变强相关的通道bins数,而减小弱相关的通道bins,因此对于3个通道要使用不同的 D D D,此时参数量变化为 N × D r D g D b N \times D_r D_gD_b N×DrDgDb。
作者对这个发现进行了实验来验证,分为强相关通道实验和弱相关通道实验。
强相关实验中, c i n c_{in} cin和 c o u t c_{out} cout分别是输入输出通道,总共有5条LUT,每条LUT有3个输出,可以看到 c o u t c_{out} cout是随着 c i n c_{in} cin的改变线性变化的,意味着强相关。
弱相关实验中, x i n x_{in} xin和 y i n y_{in} yin是弱相关的另外两个通道,可以看到在 c o u t c_{out} cout所在的某个具体的值平面上,存在着各种可能的 x i n x_{in} xin和 y i n y_{in} yin,可以说明弱相关。
基于此观察,作者提出了它的方法,下面是方法总览:
整体还是基于3D-LUT的框架,只不过添加了一个压缩自适应的变换矩阵。作者使用的损失函数在3DLUT的基础上额外添加了一个余弦相似度的损失。
2.2 压缩自适应的变换矩阵
前面观察提到了输出只与其中某一个通道强相关,而跟另外两个通道弱相关,基于此,作者提出可以使用两个矩阵,将原始的3DLUT参数变换成2个子矩阵,一个代表强相关,一个代表弱相关,这2个子矩阵通过矩阵变换得到原始的3DLUT参数,这样我们就只需要保存更小的子矩阵即可,公式表示如下: ϕ = f ( ψ , M ) = h ( [ M s ψ r M w , M s ψ g M w , M s ψ b M w ] ) , \boldsymbol{\phi}=f(\boldsymbol{\psi}, \boldsymbol{M})=h\left(\left[\boldsymbol{M}_{s} \boldsymbol{\psi}^{r} \boldsymbol{M}_{w}, \boldsymbol{M}_{s} \boldsymbol{\psi}^{g} \boldsymbol{M}_{w}, \boldsymbol{M}_{s} \boldsymbol{\psi}^{b} \boldsymbol{M}_{w}\right]\right), ϕ=f(ψ,M)=h([MsψrMw,MsψgMw,MsψbMw]),其中, M s \boldsymbol{M}_{s} Ms与 M w \boldsymbol{M}_{w} Mw是两个变换矩阵,分别代表它们的维度表示为: M = { M s ∈ R D × S , M w ∈ R W × D 2 } \boldsymbol{M}=\left\{\boldsymbol{M}_{s} \in \mathbb{R}^{D \times S}, \boldsymbol{M}_{w} \in \mathbb{R}^{W \times D^{2}}\right\} M={Ms∈RD×S,Mw∈RW×D2}原公式中 h h h代表reshape操作将 ( 3 , D , D 2 ) (3,D,D^2) (3,D,D2)的结果转换为 ( 3 , D , D , D ) (3,D,D,D) (3,D,D,D)的3DLUT。
2.3 讨论分析
-
压缩前后的时空复杂度对比:空间复杂度,现在的是 O ( N S W + D S + W D 2 ) O(NSW+DS+WD^2) O(NSW+DS+WD2),原始的3DLUT是 O ( N D 3 ) O(ND^3) O(ND3),那因为 S S S和 W W W都比较小,所以说这个改动会使得空间复杂度减小较多,作者举了一个例子,当 D D D=33和 N N N=20时,CLUT-Net的参数量跟3DLUT的参数量分别是28k和2156k,前者比后者少了99%。
时间复杂度分别是 O ( N S W + S D 3 + S W D 2 ) O(NSW+SD^3+SWD^2) O(NSW+SD3+SWD2)和 O ( N D 3 ) O(ND^3) O(ND3)也是减小的,作者同样举了一个例子,同样的设置下,乘加数分别是872K和2156K,这部分减小了60%。
-
压缩方法的选择:作者对比了另外3种不同的压缩方法,结果如下图所示。
其中BL-A是标准压缩使用更小的 D D D,BL-B是基于标准的3DLUT使用PCA方法离线压缩,BL-C是使用不可学习的CLUT压缩矩阵,效果表现很明显,肯定是本文的方案是最优的。
三、实验结果
定量实验如下。
LUT-3和LUT-20是原始的3DLUT方法,后面的数字是LUT条数,sLUT是另外一个LUT方法,作者的方法就是可以在维持效果的前提下极低的参数量。
另外一个数据集也是这样,SOTA效果保持极低的参数量。
接下来是定性实验,对比效果图如下:
上述对比数据中,CLUT与GT在视觉上最为相近。
四、总结
本文通过对3DLUT的固有压缩性进行分析,提出了一种基本无损的缩减策略,并在此基础上构建了一个高效的图像增强网络,在多个数据集上也进行了验证,确实可以在维持SOTA效果的前提下,极大的减小了LUT的尺寸。类似的压缩文章是SPF-LUT,其针对的是空间LUT的压缩,感兴趣的读者可以阅读。
代码部分将会单起一篇进行解读。(未完待续)
感谢阅读,欢迎留言或私信,一起探讨和交流,如果对你有帮助的话,也希望可以给博主点一个关注,谢谢。