【LUT技术专题】1D和3DLUT的高效组合-SepLUT
1D和3DLUT的高效组合-SepLUT:Separable Image-adaptive Lookup Tables for Real-time Image Enhancement(2022 ECCV)
- 专题介绍
- 一、研究背景
- 二、SepLUT方法
- 2.1 CNN backbone
- 2.2 颜色独立变换-1DLUT
- 2.3 颜色相关变换-3DLUT
- 2.4 量化以及训练损失
- 三、实验结果
- 四、总结
本文将围绕《SepLUT:Separable Image-adaptive Lookup Tables for Real-time Image Enhancement》展开完整解析。该研究受到ISP常见做法的影响,对以往完成复合功能的3DLUT方法进行了分解,分离为1DLUT和3DLUT的组合,1DLUT完成分量之间独立的变换,3DLUT完成不同颜色的混合,结合它们的优势从而达到更好的效果(可以发现该篇文章的作者跟前面讲到的AdaInt的作者是同一个人,博主认为两篇文章基本可以说完成的是同样的功能,最后会给出原因)。参考资料如下:
[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
一、研究背景
ISP成像系统中通常会利用到1D和3D两种形式的LUT,1DLUT适用于不需要3个颜色分量之间相互作用的分量独立变换,例如白平衡、gamma、亮度调整和对比度调整等;3DLUT则适用于不同颜色的混合以及更复杂的变换,例如色调和饱和度的调整。后续作者提到3D-LUT这篇文章是相当于用1个3DLUT来完成这些复合的功能,为了保证效果,每一维度采用33个采样点造成了资源的浪费,对比实际的ISP中可能只会使用到9个或17个采样点。
基于此,为了提升LUT的单元利用率以及表达能力,作者提出了一种新的框架SepLUT,将原来的3DLUT解耦为一个1DLUT和1个3DLUT,分别发挥它们的作用。
主要的贡献点如下:
- 提出了一种将单颜色变换分解为2个子变换的新思路。
- 提出了一个通用框架,利用1DLUT和3DLUT分别实例化这两个子变换,从而实现轻量高效的增强效果。
- 大量的实验表明,在多个广泛使用的图像增强基准测试中,提出的方法能有效。
二、SepLUT方法
整体流程如下所示:
首先采用一个轻量级的CNN来提取一个context向量,context向量生成3个1DLUT和1个3DLUT作为变换所使用的权重,最后通过高效查找和插值完成增强。整体流程是比较清晰的,后续分模块进行讲解。
2.1 CNN backbone
用于提取context向量,通过对降采样的输入进行处理得到的,整体网络结构如下所示:
这里的 m m m是一个超参数,用于控制backbone的参数量。
2.2 颜色独立变换-1DLUT
作者使用了3个不同的1DLUT来完成颜色独立变换,网络结构如下所示:
这里的 S o S_o So是一个超参数,用于控制1DLUT的采样点数目。自然当我们不是全选时,需要对其他没有取到的点做1D的线性插值,作者用公式表示了这个过程。
{ T 1 D r , T 1 D g , T 1 D b } = g 1 D ( E ) \left\{T_{1 D}^{r}, T_{1 D}^{g}, T_{1 D}^{b}\right\}=g_{1 D}(E) {T1Dr,T1Dg,T1Db}=g1D(E)
这里的 g 1 D g_{1 D} g1D是网络, E E E是我们前面提取的context, T 1 D r T_{1 D}^{r} T1Dr、 T 1 D g T_{1 D}^{g} T1Dg、 T 1 D b T_{1 D}^{b} T1Db分别是rgb3个通道对应的1DLUT,然后在实际使用时,因为我们的 S o S_o So不一定等于255,可能会存在采样不到的情况,需要用线性插值,找到实际点对应的结果,如下式:
M [ c , h , w ] = linear_interpolate ( T 1 D c , X [ c , h , w ] ) M[c, h, w]= \operatorname{linear\_interpolate} \left(T_{1 D}^{c}, X[c, h, w]\right) M[c,h,w]=linear_interpolate(T1Dc,X[c,h,w])
这里的 T 1 D c T_{1 D}^{c} T1Dc代表某个通道, X [ c , h , w ] X[c, h, w] X[c,h,w]是某个通道的输入,因为是1DLUT所以使用到的是 linear_interpolate \operatorname{linear\_interpolate} linear_interpolate。
2.3 颜色相关变换-3DLUT
网络结构如下所示:
这里的 S t S_t St是一个超参数,用于控制3DLUT的采样点数目。同样的,作者将这个过程进行了公式化的描述,如下式:
Y ^ [ c , h , w ] = trilinear_interpolate ( T 3 D c , M [ c , h , w ] ) \hat{Y}[c, h, w]= \operatorname{trilinear\_interpolate} \left(T_{3 D}^{c}, M[c, h, w]\right) Y^[c,h,w]=trilinear_interpolate(T3Dc,M[c,h,w])
这里的 T 3 D c T_{3 D}^{c} T3Dc是网络预测的, M [ c , h , w ] M[c, h, w] M[c,h,w]是1DLUT的输出结果,因为是3DLUT所以使用到的是 trilinear_interpolate \operatorname{trilinear\_interpolate} trilinear_interpolate。
2.4 量化以及训练损失
作者讲了下本方案可以使用量化来进一步减小资源的占用,尤其涉及到前面关于1DLUT和3DLUT的FC模块,接下来在实验中会看到其量化后带来的提升。
训练损失作者只采用了MSE损失,没有添加额外的约束,不想提供任何手工的先验信息。
三、实验结果
首先讲一下消融实验。
-
LUT表的大小:这里包含2个,一个是1DLUT,一个是3DLUT,结果如下所示。
这里的 m m m、 S t S_t St、 S o S_o So是我们刚才讲到的控制backbone参数量的超参数、3DLUT的采样点数目、以及1DLUT的采样点数目,作者对比了相同 m m m下,3DLUT的 S o S_o So 33和17的效果差异不大,作者认为存在冗余,选择17或9;1DLUT在各个设置下,都存在一个现象是 S o S_o So 点数超过 S t S_t St后就很难提升性能,作者认为是受限于3DLUT的精度。
-
CNN的大小:结果如下所示。
单纯去增大CNN的宽度不能有效提升效果,对于更大尺寸的LUT,可以用更大的CNN,但是考虑到性能和内存占用的权衡,作者在 S t S_t St=9和 S t S_t St=17时使用6和8的 m m m。 -
1DLUT的必要性:结果如下所示。
比较了几种不一样的方法去替换现在的方案,例如直方图均衡化(HE)以及1个共享的1DLUT,显然它们的效果不如3个1DLUT的效果。 -
量化:结果如下所示。
针对各种情况下的方法,量化均可以在轻微效果的损失下大幅减小资源的消耗。
接着是定量实验。作者对3个不同的数据集做了实验,结论更具有说服力。
对比3DLUT来说指标sota,不过改进的幅度不是太大,表中的GT指用于图像增强的专家,abc代表不同的专家。
耗时比较短,跟3DLUT不相上下。
接下来是定性实验,对比效果图如下:
表现最好。
作者后续进行了讨论环节,可视化了1DLUT和3DLUT的效果。
可以观察到,1DLUT倾向于自适应拉伸图像亮度和对比度,3DLUT则负责改变色调和饱和度,可以说端到端的学习分离的LUT完成了它们各自的功能。作者对这个过程进行了更深入的定量分析。
比较了不同尺寸的1DLUT变换后的图像的直方图均匀性(对比度的高低),可以看到1DLUT对于图像对比度有所提升,通道方差在减小,另外3DLUT的使用率在提高。
四、总结
本文提出了一个1D和3DLUT组合的图像增强方法,将3DLUT分离为颜色相关和颜色无关的变换,方法整体相比较原始的3DLUT是更高效的,资源消耗更少,性能还有一些提升,但本篇文章也没有解决3DLUT中提到的局限性。
最后讲一下为什么博主认为本篇文章跟前面讲过的AdaInt-LUT是非常相近的,AdaInt是预测3个维度的间隔作用于3DLUT上,首先预测的维度跟本文预测的3个1DLUT是一样的,AdaInt的所谓自适应间隔其实就是将原来线性的采样点进行一个非线性的变换来达成的,这个过程跟1DLUT的思想其实是不谋而合的。
代码部分将会单起一篇进行解读。(未完待续)
感谢阅读,欢迎留言或私信,一起探讨和交流,如果对你有帮助的话,也希望可以给博主点一个关注,谢谢。