【论文阅读笔记】Extremely Lightweight Quantization Robust Real-Time Single-Image Super Resolution for Mobile

论文地址:https://arxiv.org/abs/2105.10288
代码地址:https://github.com/cxzhou95/XLSR

论文小结

  本文的方法名为 XLSR ,名义上获得了2021年Mobile AI SISR比赛的冠军。该比赛目标是移动平台,模型的所有参数和推理都需要是INT8量化的,所以该比赛下的论文模型都是INT8量化的。总得来说,论文所做基本可分为两点:(1)选择一个合适的基础框架模块;(2)为SR模型的输出添加一个Clip ReLU模块;

  Mobile AI SISR的评价指标为: S c o r e ( P S N R , r u n t i m e ) = 2 2 ∗ P S N R C ∗ r u n t i m e Score(PSNR,runtime)=\frac{2^{2*PSNR}}{C*runtime} Score(PSNR,runtime)=Cruntime22PSNR其中 C C C是常数,经过计算, C = 35.5278 C=35.5278 C=35.5278,XLSR的最后得分为 51.02 51.02 51.02,运行时间为44.85ms;
  得到的量化模型在Sumsung Galaxy A21s上使用AI-Benchmark Tool的运行时间为

  • CPU运行时间:1130ms;
  • NNAPI运行时间 1150ms;
  • GPU Delegate运行时间 620ms;
    在这里插入图片描述

论文简介

  从参数量上来说,XLSR比VDSR参数量要少30多倍,但在Div2K验证集上的指标要更好。

  因为比赛的需求是全量化为INT8,所以无法保留第一层和最后一层(可以借此保留精度)

  在网络模块的选择上,使用channel shuffle是不现实的,因为reshape和transpose操作在目标硬件上是没有优化的,这限制了ShuffleNet Block。
  在常规SR算法上,会使用Skip Connections和Residual 加速收敛,但多数平行Skip Connection是较慢的,同时element addition操作也没有被优化,所以ResNet Block也不是很友好。
  所以,作者基于ResNext block,取除了channel shuffle和skip connection,得到了下图所示的基础模块
在这里插入图片描述
  同时,depthwise Conv尽管在移动端也频繁使用,但量化后会扩大量化损失,所以Depthwise Conv也没有使用。
  另一个方面,作者考虑到了,elementwise 操作在硬件平台上没有进行优化。所以作者避免了所有的加法和乘法算子,选择在必要时使用Concat算子,输入没有进行归一化处理

  在模型输出时,常规SISR会使用线性模型输出,即不对输出范围进行强约束。这样的模型在量化时会掉 5 − 7 d B 5-7 dB 57dB。作者认为原因在于输出不受限,导致前期训练时中间的激活层不稳定,可能产生离群点。作为对比的是,作者添加了一个Clip ReLU的非线性激活函数在网络的最后一层,即模型输出处。两种处理的对比如下表所示。
在这里插入图片描述

  网络最后一层添加的Clipped ReLU是ReLU1,表示为 C l i p p e d _ R e L U ( x ) = m a x ( 0 , m i n ( x , 1 ) ) Clipped\_ReLU(x)=max(0,min(x, 1)) Clipped_ReLU(x)=max(0,min(x,1))

  同时,作者选择将其中一些ReLU激活函数替换成Clipped ReLU。作者认为一部分ReLU激活函数已经足够正则化中间的激活层输出了。中间激活层的Clipped ReLU不需要Clip到1,可以经验性地进行选择,也可以像[19]一样优化

  在网络最后一层添加Clipped ReLU会带来更难优化的缺点。因为负值被平坦了,没有相应的梯度传回去。作者声称在训练细节中有一些训练技巧解决该问题。

论文实验

  和其他模型进行对比的时候,使用的是浮点模型。计算指标时,使用的是Y通道的图像。0

  在数据增加方面,除了常规的旋转和翻转,还使用了亮度增强的方法。损失函数使用的是 CharBonnier loss ,相当于平滑版本的 L 1 L_1 L1 loss,表达如下所示,其中 ϵ = 0.1 \epsilon=0.1 ϵ=0.1 C h a r b o n n i e r ( x ) = x 2 + ϵ 2 Charbonnier(x)=\sqrt{x^2+\epsilon^2} Charbonnier(x)=x2+ϵ2

  使用Clipped ReLU后更难优化,使用了如下tricks

  • 使用了triangular cylic learning rate scheduling strategy,其开始(第一个epoch)使用很低的lr( 5 e − 5 5e{-5} 5e5),然后在50个epoch内快速升到 25 e − 4 25e{-4} 25e4,然后在5000个epoch周期内开始缓慢下降,直到 1 e − 4 1e{-4} 1e4
  • 使用mini batch为16,每个epoch有100个mini batch,一共训练5000个epoch。在每次epoch,计算PSNR(用训练集没使用到的后8张),保留最好的模型进行量化;
  • 使用He-Normal初始化Conv2D,Variance Scaling为0.1。这个的灵感来自于想要尽量让核的初始化为0,同时避免较大的激活值离群点。

  为了量化模型,使用Tensorflow Post-Quatization策略,使用NVIDIA RTX 2080 Super进行训练。在DIV2K上训练该模型需要2个小时。得到的量化模型在Sumsung Galaxy A21s上使用AI-Benchmark Tool的运行时间为:

  • CPU运行时间:1130ms;
  • NNAPI运行时间 1150ms;
  • GPU Delegate运行时间 620ms;

  XLSR在目标平台的运行时间为45ms。下表展示了参加Mobile AI 2021 实时超分辨率挑战的结果。
在这里插入图片描述
  下表是浮点模型比较的结果。
在这里插入图片描述

  下表是与FSRCNN比较在量化损失上的结果。
在这里插入图片描述

  下图是不同量化模型的比较结果。
在这里插入图片描述

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值