
全LUT图像增强-ICELUT:Taming Lookup Tables for Efficient Image Retouching(2024 ECCV)
本文将围绕《ICELUT:Taming Lookup Tables for Efficient Image Retouching》展开完整解析。本文提出了一种基于全LUT实现的轻量化图像增强方案。与现有方法采用CNN网络提取图像特征不同,该方案使用LUT替代传统特征提取过程,显著降低了计算复杂度和参数量,最终实现了超轻量级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
【13】CLUT
一、研究背景
以往的工作分为两种不同的形式,如下图所示:

- CNN直接应用于图像增强时,由于需要对整个图像进行处理,计算开销较大,如图(a)所示。
- 3D-LUT提出采用CNN处理下采样图像,通过预测权重系数生成加权3DLUT,进而对原始图像进行增强。如图(b)所示,这种方案显著降低了计算复杂度。
考虑到边缘设备普遍存在计算能力和功耗限制,作者提出了更彻底的轻量化方案:使用完全基于LUT的网络结构。如图©所示,该方案在原有结构(图b)的基础上,用LUT完全替代了CNN网络,进一步降低了资源消耗。
主要的贡献点如下:
- 研究发现,通道间的关联性对图像增强效果更为关键,为此作者设计了一个全点卷积网络架构,有效实现了前期特征提取,同时优化了LUT转换过程。
- 实验证实,采用小感受野结构对低分辨率输入具有更强的鲁棒性。因此网络采用了极低分辨率(32×32)的输入设置,既保证了训练稳定性,又实现了高效的图像增强效果。
- 测试结果表明,该方案在GPU和CPU平台均实现了超快速的推理速度,同时保持优异性能表现。相较于传统CNN方法,其功耗降低至可忽略不计的水平。
二、ICELUT方法
作者观察了前面我们讲过的CLUT方法,在CLUT中,预测权重的CNN部分消耗是最大的。

一个众所周知的事情是,为了提升LUT的感受野,我们会付出巨大的代价,如下图。

通过分析感受野和输入通道的尺寸,能够轻松计算出LUT的大小。显然,试图直接使用同时具备感受野和通道特性的LUT来替代CNN是行不通的。
基于以上观察,作者做了下面的实验,实验是改变RF和通道,来看哪个变量对PSNR的影响最大。

实验结果表明,通道数量对模型性能的影响更为显著。即便采用1×1的感受野,其效果仍优于2×2感受野但仅使用单通道的情况。 作者针对这个现象做了一些解释,一些天空或者沙滩这种平滑区域很明显空间RF的提升对其效果上的影响是很小的,但是通道上就不一样了。
整体流程如下所示:

在这个方案中,可以看到很多轻量化LUT设计的影子。输入会被分为MSB和LSB,使用两个不同的特征提取器处理后使用加法融合,后续通过一个分组的FC层获取到基础LUT的权重,加权的LUT对原图处理便可以得到最终结果。
2.1 CNN backbone
CNN的作用是提取全局上下文信息,以便于输出与图像内容相关的权重,网络结构如下:

可以看到作者设计的网络没有大于1的kernel,只在通道上进行处理,这样设计的原因在于下面的实验和观察。

实验对比了3DLUT、CLUT和本文方法在CNN分辨率方面的表现。结果显示3DLUT和CLUT方法对输入分辨率变化较为敏感,因为它们在256分辨率下训练时采用了较大感受野,导致测试分辨率不一致时性能下降。类似现象也出现在本文方法中:感受野增大后性能同样下降,而小感受野版本则表现出最佳鲁棒性。
这种现象主要源于两个因素:首先,3DLUT和CLUT都由3x3卷积层构成,继承了卷积的固有偏置;其次,大感受野会产生空间像素依赖,分辨率不匹配时就会影响性能。相比之下,本文方法采用的1x1卷积核规避了这些问题,从而保持了对输入分辨率的适应性。
通过实验还发现,虽然图像缩小会丢失部分信息,但高分辨率图像的颜色特征仍能得到保留,使得权重预测保持准确,结果如下所示,不同分辨率下颜色特征基本一致。

2.2 Split FC
这里对池化的特征进一步变化,但是如果单纯使用一些FC来进行处理,会导致极大的LUT尺寸,计算公式如下:
S
=
V
C
×
N
S=V^C \times N
S=VC×N其中
S
S
S、
V
V
V、
C
C
C、
N
N
N分别是LUT的尺寸,输入值的范围,backbone输入的通道数以及最终的LUT数量,这里作者做了一个简单的推理,当
C
>
4
,
V
=
64
,
N
=
20
C>4,V=64,N=20
C>4,V=64,N=20时,整体尺寸会大于1G,其中
V
=
64
V=64
V=64是因为4bit MSB和4bit LSB相加和数是5bit。
为了解决这个问题,作者提出了Split FC,相当于分组来进行处理,分为以下几步:
- 首先对输入进行分组,分为 K K K组,每个组包含 L L L个通道,显然 K × L = C K \times L=C K×L=C。
- 接着分别应用FC层每个组的特征进行处理,处理成 C C C个通道。
- 最后将这 K K K组的输出进行相加得到最终的权重。
同样的,计算Split Fc方法的大小,当设置 L = 2 , K = C / 2 L=2,K=C/2 L=2,K=C/2时,内存变成了 ( C / 2 ) × ( V ) 2 × N (C/2)\times(V)^2\times N (C/2)×(V)2×N,假设 C = 10 , V = 64 , N = 20 C=10,V=64,N=20 C=10,V=64,N=20时,大小仅为400kb,比原来的情况小了几个数量级。
2.3 LUT转换
- 针对backbone的部分,由于全部是RF1x1的卷积因此转换为是一堆3DLUT,作者没有对输出进行量化,因此输出的是一个fp32的结果。
- 针对SFC层,转换后是 K K K 组2DLUT,命名为Weight LUT。Weight LUT区别于backbone会进行量化,输出类型会转变为int8,用以下的公式来进行量化。 Q = Clamp ( ⌊ U × Δ s ⌋ Δ s , − R , R − ( 1 Δ s ) ) , Q=\operatorname{Clamp}\left(\frac{\lfloor U \times \Delta s\rfloor}{\Delta s},-R, R-\left(\frac{1}{\Delta s}\right)\right), Q=Clamp(Δs⌊U×Δs⌋,−R,R−(Δs1)),其中, Q Q Q是量化值, Δ s \Delta s Δs是量化间隔, R R R是偏移量, U U U为池化的输出(FP32), Clamp \operatorname{Clamp} Clamp是一个clip操作,做一个范围的约束,通过这种计算方法把所有LUT结果进行存储放入表内。实际情况中作者使用了2的量化间隔和16的偏移量。
三、实验结果
首先讲一下消融实验。
-
Split FC:结果如下所示。

SFC层的消融实验, C 、 K 、 L C、K、L C、K、L分别是输入通道、组数以及每一组的长度,有几个结论, K K K的增加会导致模型性能的提升,但是太大的 K K K带来更多的 C C C,负担会加重,最终作者选择 C = 18 C=18 C=18;与普通的FC相比,普通FC在效果上的提升不明显,但带来大量的存储量,得不偿失;对比直接用Pooling的效果也是非常有优势。 -
高低bit分离实验:结果如下所示。

结论显而易见了。 -
3DLUT的个数:结果如下所示。

20个足以。 -
量化:结果如下所示。

最终作者选择 I = 64 , C = 10 I=64,C=10 I=64,C=10。
接着是定量实验。性能不落下风。


耗时和资源占用均为SOTA。

接下来是定性实验,对比效果图如下:

表现还可以。
四、局限
作者提出本文的方法在一些具有高对比度的平滑区域表现不好,如下图所示。

可以看到在天空的部分,由于只有1x1的卷积加上池化的平均操作,导致这部分区域会受到全局色调的影响,处理后的对比度相较CLUT和Target来说不高,不过作者发现这部分数据较少只占1.5%,因此不影响整体的性能。
四、总结
本文提出了一个纯粹基于LUT的图像增强方法,相当于把前面专栏讲到的空间LUT和通道LUT进行一个组合实现了一个简洁有效的解决方案,这种方法具有很高的实用价值。
代码部分将会单起一篇进行解读。(未完待续)
感谢阅读,欢迎留言或私信,一起探讨和交流,如果对你有帮助的话,也希望可以给博主点一个关注,谢谢。
1735

被折叠的 条评论
为什么被折叠?



