【论文阅读笔记】NITRE 2022 Challenge on Efficient Super-Resolution: Methods and Results

发布时间:2022-11-15 11:00

代码地址:https://github.com/ofsoundof/NTIRE2022_ESR

论文小结

赛事情况

  由于AIM2021没有展开,所以NTIRE2022是ESR方向的第三届。AIM2019冠军方法为IMDN,AIM2020冠军方法为RFDN,这两种方法也成为本次竞赛的baseline和大部分团队的主要借鉴方向。
  为了多维度进行综合评比,本次竞赛分为了三个主要赛道:(1)运行时间(runtime);(2)模型复杂度(model complexity);(3)整体表现(overall performance)。子赛道1的模型复杂度以参数量和FLOPs为参考,两指标的排名和来决定排序。子赛道2的整体性能是参考 5 5 5个指标,包括运行时间,参数量,FLOPs,激活层(feature map)大小,显存消耗。和子赛道1相似,子赛道2的排名是5个参考指标的排名的和作为排序指标。
  由于实际时间是最重要的,所以团队的名次排名按照主赛道的运行时间来排序。软件环境为Pytorch 1.11.0,CUDA 10.2,CuDNN 7.6.2,硬件环境为一块 Titan Xo GPU。FLOPS、特征层大小(activations)和最大显存(GPU memory)消耗是按照 256 ∗ 256 256*256 256256输入算的。
  NITRE超分的尺度因子为4,算法模型在DIV2K验证集的PSNR最低标准为29.0,超过29.0的模型才会进行各赛道指标的评比。共303注册参赛者 ,共43个团队有有效提交。

  字节跳动的ByteESR获得了主赛道的第一名,XPiel和NJUST_ESR团队获得了子赛道1的并列第一名,NEESR获得了子赛道2的第一名。

赛事相关介绍

赛事信息

  同时开展的NTIRE 2022相关挑战还有:(1)光谱恢复(spectral recovery);(2)光谱去马赛克(spectral demosaicing);(3)感知图像质量评估(perceptual image quality assessment);(4)修复(inpainting);(5)夜间摄影渲染(night photography rendering);(6)高效超分辨率(efficient super-resolution);(7)学习超分辨率空间(learning the super-resolution space);(8)压缩视频的超分辨率和视频增强(super-resolution and quality enhancement of compression video);(9)高范围动态(high dynamic range);(10)双目超分辨率(stereo super-resolution);(11)真实世界超分辨率(burst super resolution);

DIV2K数据集

  DIV2K的HR图像是1404*2040大小(随便打开了一张看的,不确定普遍性)的2K图像,一共有1000张。其中800张是训练集,100张是验证集,100张是测试集。制作数据集采用的是下采样因子为4的双三次差值(bicubicly downsampled)。在挑战进行的过程当中,测试集的HR图像不对外开放。

作为baseline的IMDN模型

  IMDN是AIM 2019的受限超分挑战的冠军,一共有43个卷积。
  IMDN使用 1 1 1 C o n v 3 ∗ 3 Conv3*3 Conv33提取特征,再用 8 8 8个信息多路蒸馏块(information multi-distillation block,IMDN)进行信息校正(refine)。每个IMDB包含 4 4 4阶段的渐进式校正特征表示。在每个阶段,都将输入特征分成两个独立的特征(channel split),一路直接传递到block的底部,一路进行高维空间的信息校正。上采样层采用pixel Shuffle算子,在上采样前使用一个卷积进行最终的矫正。

Evaluation protocol

  一堆指标中,运行时间(runtime)被认为是最重要的一个。该挑战要求参赛者的算法在验证集上的PSNR在29.00db以上。对于最终排名,准确度的微小下降是可以容忍的。其中,验证集PSNR大于28.95db,测试集的PSNR高于28.65的提交即可进入最终排名中。
  各团队的排名如下,其中PSNR和Conv数量不计入统计指标。FLOPs、Acts和GPU Mem是以256*256为输入计算的。GPU Mem是由pytorch的接口(torch.cuda.max_memory_allocated)推断出来的最大的GPU内存消耗。每个数字后面的括号内容,就是在该项的排名。计算指标的代码示例在https://github.com/ofsoundof/NTIRE2022_ESR可以找到,提交的解决方案和预训练权重代码也可在上面网址中获得。
【论文阅读笔记】NITRE 2022 Challenge on Efficient Super-Resolution: Methods and Results_第1张图片

表格分析

  运行时间的主赛道冠军是ByteESR,主赛道的前三算法都在30ms以内,第13名也比AIM 2020冠军RFDN要快。可以关注到的是,在DIV2K的数据集下,PSNR指标都是要比baseline要低的,说明只能在某个需要的应用方向进行折中设计。
  模型复杂度赛道有两个冠军,是XPiel和NJUST_ESR。9个解决方案的参数量都低于0.3M,要比IMDN和RFDN好上不少。
  整体表现赛道的冠军是NEESR,ByteESR和rainbow是二三名。

  在运行时间和参数量比baseline的IMDN要低的解决方案中,xilinuxSR的PSNR指标最高(验证集29.05,测试集28.75)。IMDN与xilinux相比,PSNR在验证集提升比测试集的提升大。相对而言,TeamInception和Just Try在测试集的提升更大些,而验证集的PSNR和IMDB相近。这些现象表明IMDN更倾向于验证集的高PSNR,这也是验证集的PSNR指标低位设置为29.00db而不是29.13db的原因。

论文介绍

edge-oriented convolution block(ECB)

  主体思想就是利用重参数的思想,将一些边缘信息放入重参数模块中,比如sobel算子,Laplcaian算子,最后使用一个 C o n v 3 ∗ 3 Conv3*3 Conv33代替。
【论文阅读笔记】NITRE 2022 Challenge on Efficient Super-Resolution: Methods and Results_第2张图片

Residual feature distillation block(RFDB)

  这是RFDN中的主要模块,使用SRB(shallow residual block)作为其中组件,多使用 C o n v 1 Conv1 Conv1做信息蒸馏,使用concat算子聚合特征。
【论文阅读笔记】NITRE 2022 Challenge on Efficient Super-Resolution: Methods and Results_第3张图片

IMDB

  这是IMDN的主要模块,大量使用Channel Split算子来减少计算复杂度。

【论文阅读笔记】NITRE 2022 Challenge on Efficient Super-Resolution: Methods and Results_第4张图片

各团队方法介绍

  1. 在架构的设计上,改IMDN和RFDN仍是主要的技巧方向。ByteESR用RLEB代替SRB和IMDB,主要区别为去掉了concat层和 1 ∗ 1 1*1 11蒸馏层,这是为了runtime特别考虑的。此外,ByteESR也减少了ESA模块的卷积数。
  2. 在runtime主赛道的前两名都没有包含多阶段信息蒸馏模块。在[85]有提到,太多的skip connection和 1 ∗ 1 1*1 11信息蒸馏会损害runtime
  3. 重参数模块可以带来轻微的性能提升。比如NJU_Jet用一个重参数residual block代替了平常的residual block。NEESR使用一个edge-oriented Convolution block重参数重组成一个正常的卷积。
  4. 滤波器分解方法可以有效减少模型复杂度。XPiel使用了depthwise + 1*1 Conv,NJUST_ESR使用逆残差结构,这两个解决方案赢得模型复杂度赛道的冠军。
  5. 模型裁剪开始起到关键的作用。ByteESR从 48 48 48 Channel略微减到 46 46 46 Channel,MegSR和xlinxSR也使用到了channel prune技术。
  6. 激活函数是一个重要因子。rainbow使用SiLU激活函数,很多团队使用了GeLU激活函数。
  7. 损失函数的设计也是需要考虑的。大部分方法使用L1或者L2损失函数。一些团队设计损失函数让PSNR有所增长。比如ByteESR团队使用对比损失(constrastive loss)带来了验证集的PSNR有 0.01 0.01 0.01dB到 0.02 0.02 0.02dB的提升。而NKU-ESR团队提出了 edge-enhanced gradient-variance损失函数。
  8. 先进的训练策略可以保证网络的性能。比如,大多数团队使用了延长训练。因为模型的容量是很小的,使用更大的patchSize和batchSize就变得可行了。一些团队使用周期学习率策略余弦学习率策略,可以帮助模型训练跳出局部最小点。冠军解决方案使用了经典的包含多次训练阶段

  竞赛的时候,训练允许使用额外的数据及,如Flickr2K,但DIV2K验证集和测试集不能进入训练中。

ByteESR

  ByteESR团队提出的ESR解决方案名为RLFN(Residual Local Feature Network)。RLRN使用经典的一种SR架构,与IMDN类似,不同点在于RLFN使用的是RLFB(Residual Local Feature Block)RLFB由SRB改动而来。SRB用 3 3 3 1 ∗ 1 1*1 11Conv进行特征蒸馏,然后将所有的蒸馏特征进行concat。作者认为,尽管聚合多层的蒸馏特征能有更好的表现特征,但concat会花费大部分的推理时间。考虑到要减少GPU占用和减少推理时间,RLFB移除了Concat操作和相关的特征蒸馏层,使用Add代替。此外,RLFB使用了ESA[52],但简化成只有一个Conv 3 3 3来减少模型深度和复杂度。模型结构如下图所示。
【论文阅读笔记】NITRE 2022 Challenge on Efficient Super-Resolution: Methods and Results_第5张图片
【论文阅读笔记】NITRE 2022 Challenge on Efficient Super-Resolution: Methods and Results_第6张图片

  论文[53]和[72]发现,一个随机初始化特征提取器,不需要任何训练,可以提升模型在几个密集预测任务上的性能。受这些论文启发,RLFN建立了一个两层网络用于特征提取,卷积的权重是随机初始化的。对比损失定义如下:其中 ϕ \phi ϕ被定义为由特征提取器生成的特征图(feature map), ∥ ⋅ ∥ \|\cdot\| 表示 L 1 L_1 L1 loss。有一个疑问就是分母中的lr和sr是怎么对应上的。
C L = ∥ ϕ ( y s r ) − ϕ ( y h r ) ∥ ∥ ϕ ( y s r ) − ϕ ( y l r ) ∥ CL=\frac{\| \phi(y_{sr}) - \phi(y_{hr}) \| }{\|\phi(y_{sr})-\phi(y_{lr})\|} CL=ϕ(ysr)ϕ(ylr)ϕ(ysr)ϕ(yhr)

训练细节

  RLFN有4个RLFBs,初始的特征Channel为48,ESA Channel为16,训练时使用DIV2K和Flickr2K。训练分为4个阶段。

  • 初始阶段。模型从头训练,HR patchSize设为 256 ∗ 256 256*256 256256,随机Crop,batchSize设为 64 64 64,Loss使用L1 loss,Adam优化器,初始lr为 5 e − 4 5e^{-4} 5e4,每 200 200 200个epoch学习率减半,一共训练 1000 1000 1000个epoch。
  • finetune训练。使用上一个阶段的模型,使用上一个阶段的训练策略,重复finetune两次
  • finetune训练。训练策略和第一阶段大致相同,除了损失函数使用正则化因子为255的对比损失和 L 1 L_1 L1 loss的结合
  • 最后阶段,裁剪网络后finetune。使用Soft Filter Pruning[26]将RLFBs中的 C o n v 1 Conv1 Conv1 数量从 48 48 48减少到 46 46 46,训练策略和第一阶段大致相同,除了HR patchSize设置为 512 ∗ 512 512*512 512512,在 1000 1000 1000个epoch之后,使用HR patchSize 640 ∗ 640 640*640 640640,学习率 1 0 − 5 10^{-5} 105L2 loss进行finetune。

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号