【LUT技术专题】RCLUT: Reconstructed Convolution Module Based Look-Up Tables for Efficient Image SR

专题介绍

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



本文将从头开始对RCLUT: Reconstructed Convolution Module Based Look-Up Tables for Efficient Image
Super-Resolution,这篇轻量超分算法进行讲解。参考资料如下:
[1]. RCLUT论文地址
[2]. RCLUT代码地址

一、研究背景

RCLUT提出的原因在于:LUT方法按照串并联LUT的思路在scaling law上的效率比较低,需要大量的存储量或计算量才可以增大一点感受野RF,为了更高效率的提升感受野,作者提出了一个RC模块,中文名为重构卷积,重构卷积可以使用极小的代价来大幅提升RF,作者利用这个RC模块集成到前面讲到的SRLUTMuLUT上均有PSNR和主观效果的提升。

二、RCLUT方法

RCLUT也是一个带串并联的LUT结构,如下图所示。
在这里插入图片描述
第一个stage会使用3x3、5x5、7x7的RC模块处理,后续使用各种类型的Conv Block处理后相加并平均,第二个stage是stack了一个相同的结构,得到最终结果。

2.1 RC模块

下图是RC模块的示意图。
在这里插入图片描述
可以看到一个(N,N)的窗口中,使用一个FC将通道进行升维,处理后变成了(N,N,C)的tensor,之后再使用一个FC通道进行降维,变成1通道回到原始NXN的一个窗口,最终使用一个avg_pool,得到RC module的结果,可以看到通过一个avg_pool和N*N个1D LUT得到了NxN的感受野。作者将这个过程用公式表示:
z ( m + i , m + j ) = W i j ′ T ( W i j T x ( m + i , n + j ) + b i j ) + b i j ′ y m n = 1 N 2 ∑ i = 0 N − 1 ∑ j = 0 N − 1 z ( m + i , m + j ) . \begin{aligned} z_{(m+i, m+j)} & =W_{i j}^{\prime T}\left(W_{i j}^{T} x_{(m+i, n+j)}+b_{i j}\right)+b_{i j}^{\prime} \\ y_{m n} & =\frac{1}{N^{2}} \sum_{i=0}^{N-1} \sum_{j=0}^{N-1} z_{(m+i, m+j)} . \end{aligned} z(m+i,m+j)ymn=WijT(WijTx(m+i,n+j)+bij)+bij=N21i=0N1j=0N1z(m+i,m+j).
第一个公式中 m m m n n n是当前该计算特征图的坐标, i i i, j j j是大小为NxN窗口内的索引, W i j T W_{i j}^{T} WijT b i j b_{i j} bij是第一个FC的权重, W i j ′ T W_{i j}^{\prime T} WijT b i j ′ b_{i j}^{\prime} bij是第二个FC的权重,第二个公式则是一个avg_pooling,将上面求的各个结果进行一个平均,这里有一个疑问是 z ( m + i , m + j ) z_{(m+i, m+j)} z(m+i,m+j)的下标,均是 m m m,不确定是不是公式错误,看代码之后,博主本人认为是写错了,应该是 z ( m + i , n + j ) z_{(m+i, n+j)} z(m+i,n+j),有不同理解的朋友可以讨论
当然,这两个FC计算的过程可以用LUT表来进行替换,因此替换后的计算公式可以用下式表示。
V ′ = 1 N 2 ∑ i = 0 N 2 − 1 ( L U T i [ I i ] ) \mathbf{V}^{\prime}=\frac{1}{N^{2}} \sum_{i=0}^{N^{2}-1}\left(L U T_{i}\left[I_{i}\right]\right) V=N21i=0N21(LUTi[Ii])
这里的N与上面一样,代表窗口大小, L U T i LUT_i LUTi则是这NxN个中其中一个,通过查询当前的输入可以得到结果,因此这里作者用的是一个1D LUT,总的1D LUT尺寸是 2 8 ∗ N 2 2^{8}*N^{2} 28N2

2.2 Conv模块

在RCLUT的总结构中,我们还可以看到有Conv Block4-1、Conv Block4-4以及Conv Block1-4,如下图所示。在这里插入图片描述
可以看到Conv Block4-1其实就是一个2x2,输出为1个,Conv Block 4-4则是2x2的kernel_size,搭配输出为4个,Conv Block1-4是输入为1个,输出为4个。

以上两个模块的排列组合就可以构成最后的RCLUT了。

2.3 感受野大小的讨论

这里假设RCLUT在2个stage上的RC模块感受野分别是 N 1 / N 2 N_1/N_2 N1/N2,Conv Block分别是 M 1 / M 2 M_1/M_2 M1/M2,带有旋转的情况下,RCLUT的感受野可以得到:
R F 1 = 2 ( M 1 + N 1 − 1 ) RF_1=2(M_1+N_1 - 1) RF1=2(M1+N11)
R F 2 = 2 ( ( R F 1 − 1 ) / 2 + M 2 + N 2 − 1 ) − 1 = 2 M 1 + 2 M 2 + 2 N 1 + 2 N 2 − 7 RF_2=2((RF_1-1)/2+M_2 + N_2 - 1)-1=2M_1+2M_2+2N_1+2N_2-7 RF2=2((RF11)/2+M2+N21)1=2M1+2M2+2N1+2N27
对于MuLUT来说,则是:
R F 2 ′ = 2 ( ( ( 2 M 1 − 1 ) − 1 ) / 2 + M 2 − 1 ) − 1 = 2 M 1 + 2 M 2 − 3 RF_2'=2(((2M_1-1)-1)/2+M_2 - 1)-1=2M_1+2M_2-3 RF2=2(((2M11)1)/2+M21)1=2M1+2M23
对于RCLUT来说 N 1 / N 2 N_1/N_2 N1/N2以及 M 1 / M 2 M_1/M_2 M1/M2分别是7,7,2,1,因此可以计算出感受野分别是27x27,对于MuLUT来说 M 1 / M 2 M_1/M_2 M1/M2分别是2,2,因此可以计算出感受野分别是9x9。

三、实验结果

在这里插入图片描述
定量的实验结果显示:RCLUT以极低的LUT Size和高的RF,超过了当时最先进MuLUT的效果。

在这里插入图片描述
定性的实验结果显示,该方法还是比传统插值要更好,比FSRCNN初期的DNN的方法要更好,比专栏前面讲到的各种LUT方法都要好。

接下来作者进行了消融实验
1)RC模块作为插件插入到MULUT中:
在这里插入图片描述
加入RC-5对于MuLUT来说提升是明显的,但是增加的存储量很小,1.245kB,这里的计算是通过以下的图。
在这里插入图片描述
前面我们讲过了一个RC模块的大小是 2 8 ∗ N 2 2^{8}*N^{2} 28N2,这是在量化系数为1时,如果我们选用间隔为16,则大小在RC5上可以进一步减小到 17 ∗ 5 2 = 0.415 k b 17*5^{2}=0.415kb 1752=0.415kb,则三个就是1.245kb。

2)RC模块中的实现,对于FC层的重要性检验:
在这里插入图片描述这里可以看到如果直接去做Avg池化,RF的理论大小也是OK的,但是效果上会存在一个骤降,因此RC模块是重要的,当然Conv Block的模块加了肯定也是效果会更好的,尤其是使用4-4的设置时。

3)RC模块加入到SRLUT中:
在这里插入图片描述
RC模块对于SRLUT时有明显效果提升的,同时对于存储量的增强很少,但是RC模块增大的收益有限。

4)RCLUT分支的测试,RCLUT-3_5指,RC模块3紧跟着RC模块5,后面同理:
在这里插入图片描述
效果上是堆叠越多效果越好,最后一行是作者使用到的一个结构,对于第5行,可以看到深度对于宽度来说很重要。

5)耗时的测试:
在这里插入图片描述
增加的不多,是一个非常有效,即插即用的模块。

四、总结

  1. RCLUT提出了一个RC模块来提升网络的感受野,用了极小的代价提升了原始MULUT和SRLUT的一个效果。
  2. RCLUT的理论感受野已经提升至27x27,比MULUT、和SPLUT提升不少,但实际效果的提升有限,毕竟用于提升感受野的算子还是avg池化。

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

感谢阅读,欢迎留言或私信,一起探讨和交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值