当前位置: 首页 > news >正文

【LUT技术专题】基于扩展卷积的极快速LUT算法

在这里插入图片描述

ECLUT:Efficient Look-Up Table from Expanded Convolutional Network for Accelerating Image Super-resolution(2024 AAAI)

  • 专题介绍
  • 一、研究背景
  • 二、ECLUT方法
    • 2.1 EC模块
    • 2.2 ECConv感受野的分析
    • 2.3 放缩系数α
  • 三、实验结果
  • 四、总结

本文将从头开始对ECLUT: Efficient Look-Up Table from Expanded Convolutional Network for Accelerating Image Super-resolution,这篇基于扩展卷积的极快速LUT算法进行讲解。参考资料如下,本篇文章未开放源码:
[1]. ECLUT论文地址


专题介绍

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


一、研究背景

ECLUT提出的原因是因为作者认为LUT推理的耗时主要来源于内存的访问,当前基于串并联的方法在削弱了访问LUT相比较计算的优势(cache有限),另一个问题是旋转累加的过程引入了更多的量化误差。因此提出了:
1)扩展卷积(expand Conv),跟RCLUT一样,是一个用于低成本提升RF大小的模块。
2)一个简单有效的scaling方法来减小旋转累计的量化误差,该方法的计算成本基本可以忽略不计。

作者给了一个图来表明自己方法的优势。

在这里插入图片描述

图中的方法都是老面孔了,可以看到ECLUT在LUT方法中是最快的,并且效果高于基线SRLUT,因此可知ECLUT是一个专门针对于速度优化的LUT方法。

二、ECLUT方法

ECLUT总体流程如下图所示,也是三步骤,训练、转换、测试。

在这里插入图片描述

从图(a)可以看到ECLUT的网络示意图跟SRLUT还是比较相像的,整体就一个LUT,也需要旋转推理,跟SRLUT不同的点在于:

  1. 第一层的kernel_size,这里是只有1x2,相比较SRLUT来说是减少了2个点。
  2. Expand Conv,扩展卷积,扩展卷积前面的Sub-pixel卷积其实就是pixel_shuffle模块,这部分是跟SRLUT一致的。
  3. α加权系数,所有的输出需要经过一个alpha系数。

处理后的绿色框是ECLUT的感受野,整体比SRLUT的3x3来说大了不少。

2.1 EC模块

下图是EC模块的示意图。
在这里插入图片描述
首先输入经过Hidden layers将通道数变大,然后经过Sub-pixel Conv layer,即pixelshuffle,将通道数变成分辨率,完成超分,图中显示的是2倍的超分,然后经过Expanded Conv layer,即扩展卷积,扩展卷积实际上就是将k个不同的channels(这里可以理解为9个),往不同的方向去做偏移,比如说这里的红色是向左和向上偏移了2格,黄色是向上2格,其他同理,有9个方向,这样再相加这9个结果就可以将RF增大,当然偏移了的原位置需要进行padding,这样才可以使得feature map大小是不变的,作者也提到这个操作跟我们前面讲到的SPLUT中的聚合模块是有点相似的,只不过本文的方法方向是更多样的,SPLUT是只有横向和纵向。

2.2 ECConv感受野的分析

如下图所示。
在这里插入图片描述

一个1x2的感受野feature,在某一个旋转分支经过EC模块处理之后,感受野可以变成3*4=12个,再将他们相加就可以得到21了。为什么能够从RF=2转变到RF=12,大家可以将某一种旋转的情况进行9个方向的偏移,就可以得到12个感受野大小了。

2.3 放缩系数α

简单来说就是每一个旋转的结果缩小个4倍,即α=0.25,用以下公式表示。

I S R ( i , j ) = clamp ⁡ ( round ⁡ ( α ⋅ ∑ x ∈ χ x ( i , j ) ) ) \mathbf{I}^{S R}(i, j)=\operatorname{clamp}\left(\operatorname{round}\left(\alpha \cdot \sum_{x \in \chi} x(i, j)\right)\right) ISR(i,j)=clamp(round(αxχx(i,j)))

其中α是放缩系数,round是四舍五入,clamp是clip的同义词,进行范围的限制到[0,255]。这里需要指出的是,这个跟以往LUT文章的方式存在本质区别,以往文章采用自集成策略进行训练和测试,因此也会使用到除以4(即乘以放缩系数α=0.25),区别在于以往的文章不会将这个过程中的量化误差考虑进去(以往的方法对8bit数据除以4,当然会损失精度),本文是考虑到了这个点,也给出了这个操作在8bit上的替代,这样可以进行量化训练,从而减小误差,即:

I S R ( i , j ) = clamp ⁡ ( ∑ x ∈ χ x ( i , j ) + 2 ) > > 2 ) \mathbf{I}^{S R}(i, j)=\operatorname{clamp}\left(\sum_{x \in \chi} x(i, j)+2)>>2\right) ISR(i,j)=clamp(xχx(i,j)+2)>>2)

相当于将整型数加2,再右移2位可以基本复刻上面的乘以放缩系数再round的操作,这里大家可以编写一个简单的程序进行验证,两者是一样的,但是需要注意对半向上取整,即0.5需要为1。

import math
for x in range(0, 256):x1 = math.ceil(x * 0.25 - 0.49999999) #-0.5无法实现对半时向上取整,因此保留一个极小的小数x2 = (x + 2) >> 2if x1 != x2:print(x*0.25, x1, x2)  #实际无结果输出,证明全部一致

三、实验结果

在这里插入图片描述

定量的实验结果显示:ECLUT有最快的推理速度和较基线SRLUT更好的指标,不过因为它的输出维度较多且精度较高,因此它的size也会比较大,9MB=256 * 256 * 16 * 9 / 1024 / 1024,作者对于2个点的LUT查询是全精度查询,因此没有插值的过程,这也能解释了为何ECLUT推理速度会很快。

在这里插入图片描述

定性的实验结果显示,该方法还是比传统插值和SRLUT要更好,比MU和SP会差点,但差异也不太大。

接下来作者进行了消融实验
1)放缩的系数:

在这里插入图片描述

no quant是浮点的效果,0bit是没有放缩系数,2bit是本文提到的0.25的实现方式,可以看到2bit是基本无损的,其他的都有损失。

2)EC模块尺寸的变化:
在这里插入图片描述

跟SRLUT对标,V、F、S分别是第一层1x2、1x3以及2x2,当然越大意味着感受野越大,效果会更好,但是速度和存储量会更大,因此S肯定是不合理,V是本文的方法已经达到了9MB,再加尺寸的性价比就不太高了。(当然,如果内存较为富裕时,可以考虑堆内存,上更大RF的模型)

四、总结

  1. ECLUT提出了一个EC模块来提升网络的感受野,实现了更快的推理速度,性能上又比SRLUT更好。
  2. ECLUT提出了一个alpha放缩来减小量化误差,这个思路还是简单易用的。
  3. 效果上肯定就比较一般,只能对比基线的SRLUT,追求更好的效果不建议使用它。

代码部分因为没有开源实现,博主会根据自己的理解和结合SRLUT代码单起一篇来进行解读。(未完待续)


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

相关文章:

  • 如何快速获取旺店通奇门原始数据至本地
  • 嵌入式软件学习指南:从入门到进阶
  • STM32基础教程——软件SPI
  • Cadence 高速系统设计流程及工具使用二
  • 前端面经-VUE3篇(四)--pinia篇-基本使用、store、state、getter、action、插件
  • MDP相关内容
  • 贵州省棒球运动发展中长期规划(2024-2035)·棒球1号位
  • 第二天 网络与通信协议
  • 【c++】 我的世界
  • 汽车加气站操作工考试知识点总结
  • 手机端调试工具 eruda 使用方法
  • C++ 中的 `it->second` 和 `it.second`:迭代器与对象访问的微妙区别
  • 图片转文字-Tesseract-OCR,完成文字转换。
  • vtkSmartPointer<vtkPolyData> 常用的函数方法
  • 二项式反演及其代数证明
  • 生物化学笔记:神经生物学概论12 大脑全景图 知觉、行为和语言 注意力
  • LeetCode105_从先序与中序遍历序列构造二叉树
  • Napkin 简易教程
  • async/await的另一种食用方法
  • C 语言网络编程问题:E1696 无法打开 源 文件 “sys/socket.h“
  • 古龙逝世四十周年|中国武侠文学学会与多所高校联合发起学术纪念活动
  • 涉个人信息收集使用问题,15款App和16款SDK被通报
  • 秦洪看盘|涌现新逻辑,A股放量回升
  • 江西省文化和旅游厅厅长梅亦已任省委宣传部副部长
  • 美妙的下午
  • 巴菲特再谈投资日本:希望持有日本五大商社至少50年