AIM2020-ESR竞赛旨在设计一种这样的网络:在具有PSNR指标与MSRResNet相当的水平的同时,从推理耗时、参数量、FLOPs、Activations以及内存占用等方面进行至少一个维度的降低。其任务以4倍超分为基准,训练集、验证集以及测试集均为DIV2K,由于该任务的目的不在于刷新PSNR指标,故在训练阶段可以采用额外的训练数据,比如Flickr2K、OST等数据集。
在竞赛持续期间共有150名注册参与人员,25个队伍提交了结果,其中五个队伍因其模型PSNR弱于MSRResNet而未进行排名。我们先来看一下AIM2020-ESR的最终排名吧,见下图。
image-20200916155112362
背景说明
ESR竞赛是 AIM2020竞赛的其中一个组成部分,该竞赛有这样几个目的:
- adavance research on efficient SR
- compare the efficiency of different method
- offer an opportunity for academic and industrial attendees to interact and explore collaborations.
数据集
沿着已有的NTIRE2017竞赛,该竞赛仍然采用DIV2K数据。DIV2K包含1000整2K分辨率的RGB图像,其中800用于训练,100用于验证,100用于测试(无GT)。在该竞赛中LR通过bicubic方式进行4x下采样得到。
注:由于该竞赛目标不在于提升模型的PSNR指标,故而在训练阶段可以采用额外的数据集,Flickr2K、OST等数据均可。
MSRResNet
该基准模型是ESRGAN一文在SRGAN的基础上设计的一种超分网络,它将用于该竞赛baseline。MSRResNet包含16个残差模块,一个全局跳过连接,每个残差模块由两个3x3卷积 ReLU激活构成,而全局跳过连接分支由双线性插值得到。
MSRResNet是经过DIV2K、Flickr2K、OST等数据训练所得,其相关指标统计如下:
- 参数量为1517571(1.5M)
- DIV2K验证集与测试集的PSNR指标分别为29.00dB与28.70dB;
- 在DIV2K验证集上的平均推理耗时为0.110s(PyTorch1.5.1, CUDA Tookkit10.2, CuDNN7.6.2, Titan XP GPU);
- 输入为
时的FLOPs为166.3G;
- 输入为
时的Activations为292.55M;
- 输入
时的最大GPU内存占用为610M;
- 卷积层的数量为37.
对于MSRResNet感兴趣的同学可以去如下两个链接查看相关代码:
- https://github.com/znsc/MSRResNet
- https://github.com/xinntao/BasicSR
竞赛参与说明
在竞赛持续期间,主要有两个阶段:
- Development and Validation:在这一阶段,参赛人员可以拿到800LR/HR训练数据对于100LR验证数据;如果需要,参赛人员同样可以采用MSRResNet作为baseline在自己的系统上测试耗时、显存、FLOPs等指标以进行更好的对标。参赛人员可以提交验证集的HR结果已度量其模型的PSNR指标并得到反馈,但模型的参数量、推理耗时则需要参赛人员自己统计。
- Testing:在最终的测试阶段,参赛人员可以拿到100LR测试图像,参赛人员需要提交其超分结果到Codalab评估服务器并将相应代码与说明书email给竞赛组织人员,方便组织人员统计最终的结果。最终组织人员会将最后的排名反馈给参赛人员。
关于竞赛的评价工具与度量指标,该竞赛需要统计的指标包含:PSNR、推理耗时、参数量、FLOPs、Activations、最大GPU内存占用等。相关评价统计工具可以参考如下链接:
https://github.com/cszn/KAIR/blob/master/main_challenge_sr.py
竞赛结果
image-20200916155112362
上面给出了该竞赛的最终排名,注PSNR指标低于MSRResNet的方案将不参与排名;此外,lyl,LMSR,CET-CVLab以及wozhu等团队因缺失实验验证也未参与排名。上表中同时提供了AIM2019Constrained SR竞赛的冠军方案(IMDN)。
从上表可以得出如下几点:
- NJU_MCG团队取得冠军,AiriA_CG与UESTC_MediaLab分别获得亚军与季军;
- NJU_MCG与AiriA_CG具有最快的推理耗时;XPixel具有最少的参数量;在FLOPs方面,SC-CVLab,NJU_MCG以及MLVC排名前三且具有相近的FLOPs;NJU_MCG、AiriA_CG具有最少的Activations;MLVC具有最少的内存占用。
- MLVC与SC-CVLAB与参数量与FLOPs方面占优,但推理耗时并不匹配;404NotFound与MLVC具有比IMDN更少的参数朗,但推理速度反而更慢。
image-20200916162240093
为分析上述指标间的差异性,作者统计了参数量、FLOPs、Activations、最大GPU内存占用与推理耗时之间SROCC(Spearman rank-order correlation coefficient)关系。结果剪商标。从表中结果可以看到:Activations与推理耗时之间的相干性更强。事实上在恺明大神的一文中也有类似结论。但同时需要注意:参数量、FLOPs仍然是评价模型高效性的非常重要的参考指标。
Architecture and main ideas
参赛人员提出了不同的技术用于提升MSRResNet与IMDN的有效性,这些技术大体上可以归结为以下几方面:
- 改进IMDN:冠军方案NJU_MCG提出了一种高效RFDB(Residual Feature Distillation Block, RFDB),它集成了浅层残差连接与ESA模块,同时采用
卷积进行特征蒸馏,并将通道数由64降低到50;AiriA_CG采用ACBlock(Asymmetric Convolution)改进IMDN中的卷积;受启发于IdelBlock,ZJUESR2020提出了多尺度IdleBlock;
- 改变上采样模块:不同MSRResNet中的两次
PixelShuffle(X2)->Conv->LeakyReLU->
上采样方式,Xpixel提出采用最近邻插值替换PixelShuffle
;NJU_MCG、Airia_CG、HaiYun、IPCV-IITM则直接采用PixelShuffle进行4x上采样。 - 全局特征集成:不同于IMDN中的局部特征集成策略,以下几个团队(NJU_MCG, HaiYun, IPCV_IITM, 404NotFound)采用类似RDN的全局特征集成策略;NJU_MCV提出将4个RFDN的结果进行Concat,后接
卷积进行特征降维,最后采用Conv3x3->PixelShuffle
输出HR图像。
- 集成注意力模块:NJU_MCG提出在RFDN模块中插入空间注意力模块ESA;Xpixel提出像素注意力生成3D注意力图;MLVC提出多注意力模块(ESA CEA)。
- 递归降低参数量:Zhang9678提出采用LSTM降低参数量,InnoPeak_SR提出了递归残差模块;
- 网络剪枝:SC_CVLAB提出了一种细粒度畅通剪枝策略从过参数模型中得到轻量型模型;
- 替换MSRResNet中的残差模块:Xpixel提出采用自矫正卷积与像素注意力机制替换残差模块;404NotFound提出采用Ghost卷积与
卷积替换
卷积;SAMSUNG_TOR_AIC提出采用改进MobileNetV3模块替换残差模块。
Fairness
在该竞赛的验证与测试阶段存在一些“公平”与“不公平”的tricks:
一方面,采用额外的训练数据是一种“公平”的trick,这是由于MSRResNet采用DIV2K、Flickr2K、OST等数据训练得到(大多参赛队伍均采用所提供的DIV2K与额外的Flickr2K进行训练)。除了额外数据外,训练阶段的数据增广策略也是一种“公平”的trick;
另一方面,采用验证集的LR/HR以及测试的LR进行训练是一种“不公平”的trick。首先,验证集参与训练会提升验证PSNR指标;其次,有助于产生PSNR增益;最后,PSNR可以通过知识蒸馏方式在验证集与测试集上得到提升。
Conclusion
从前述分析,我们可以得出以下几个结论:
- 所提方法刷新的ESR的SOTA指标:相比IMDN,NJU_MCG方案具有明显的提升;
- FLOPs与参数量与模型的高效性相干性较弱,而Activation是一种更合理的度量指标;
- top6的方案均采用手动设计网络架构;剪枝、蒸馏、量化以及NAS在ESR方面的应用需要更进一步的研究;
- 未来更高效的超分网络需要将推理耗时、参数量、FLOPs以及Activation纳入考入范围。
Methods
NJU_MCG
NJU_MCG提出了一种残差特征蒸馏网络用于高效图像超分,RFDN受启发于IMDN与RFANet。下图给出了所提RFDN与IMDB之间的关联性。
image-20200916165631014
IMDB是IMDN的关键组成部分,见上图a,它是一种渐进式特征蒸馏模式。尽管IMDN可以取得显著提升,但不够高效同时会因channel splitting
引入某些不灵活的操作;同时采用3x3卷积蒸馏特征会产生过多的冗余参数;采用channel splitting
会导致难以利用恒等连接。
上图b采用连个并行的conv3x3卷积解决了上述问题,相比原始IMDB,这一改进版更为灵活;RFDB则采用三个1x1卷积进行特征蒸馏,采用采用SRB(shallow residual block)替换conv3x3,以更有效的利用残差学习策略。对于SRB而言,采用空间注意力机制比通道注意力机制更佳,故RFDN采用RFANet中的ESA模块。所提RFDN包含4个RFDB模块,RFDN的整体网络结构与IMDN相似,但RFDN的特征通道数由64改成了50。
在训练阶段,HR图像块的大小为
,BatchSize=64,损失函数为L1,优化器为Adam,初始学习率为
,每200epoch学习折半,训练1000epoch后改为L2损失进行微调,同时学习率设置为
,训练数据为DIV2K与Flickr2K。
Airia_CG
image-20200916171316144
该团队提出了一种FIMDN(Faster Information Multi-Distillatio Network via Asymmetric Convolution),见上图,它是在IMDN的基础上改进而来,且仅对IMDB进行了微调改进。不同于IMDN,FIMDN近几年采用了6个CACB构成FIMDB模块加速网络。(从笔者角度来看,FIMDN的网络架构与EDSR的相似性更多一些)
image-20200916171353499
上图给出了FIMDN的结构示意图,它采用ACNet中的非对称卷积组替换IMDB中的Conv3x3,在最后的融合阶段采用1x1卷积进行特征融合。该网络的训练包含两个阶段四个步骤:
- Stage1:采用原始AC模块(三个并行非对称卷积)配置FIMDN。
- 在DIV2K Flickr2K(DF2K)数据集上对FIMDN进行训练,HR图像块大小为
,Batch=64,损失函数为L1,优化器为Adam,初始学习率为
2e-4
,每3600epoch折半,合计训练18000epoch;- 在DF2K数据集上微调,HR图像块大小为
,BatchSize=24,损失函数为L2,初始学习率为
1e-5
,每720epoch折半,合计训练600epoch;- 在DF2K数据集上微调,HR图像块大小为
,BatchSize=4,损失函数为L2,初始学习率为
1e-6
,每400epoch折半,合计训练2000eoch; - Stage2:将AC模块转换成单个
卷积
- 在DIV2K数据集上进行微调,HR图像块大小为
,BatchSize=24,损失函数为L2,初始学习率为1e-6
,每200epoch折半,合计训练1000epoch。
UESTC-MediaLab
该团队提出了一种新颖的训练策略,它有助于在不增加额外参数的前提下提升模型性能。传统的卷积可以描述为
。该团队将卷积核分解为N个核基
。所提训练策略包含多个阶段,
在第一个阶段(表示为0-th),模型从头开始训练,核基数
,所有卷积核参数通过Xaiver-Uniform进行初始化,并通过
合并权值;
在第t阶段(
),第
个核基随机初始化,合并权值时加权系数为
;
在完成模型训练后,仅仅合并后的权值k与偏差b得以保留,而核基与合并参数无需保留。下图给出了所提训练方案与模型指标提升示意图。可以看到:模型的性能随着核基的数量增多而逐渐增加。
image-20200916172405524
在网络结构方面,该团队在IMDN的基础上进行了如下改进:
- 将
Conv3x3->LeakrReLU
替换为GConv3x3->PReLU->Conv1x1
,注:组卷积会将通道数倍增; - 采用了自适应跳过连接;
- 网络的深度与宽度进行了调整以更好的均衡模型效率和性能。
Xpixel
该团队提出了一种简单而有效的像素注意力网络(Pixel Attention Network, PAN),它以仅仅272149参数量取得了与MSRResNet相当的性能。该方法的主要贡献在于像素注意力机制,下图给出了所提凸显赶超分网络结构图。
image-20200916173524257
从上图可以看到:所提网络架构包含三个阶段:特征提取、非线性映射以及重建模块。像素注意力机制在非线性映射与重建模块中进行了应用。
- PixelAttention。通道注意力机制目标在于得到一个1D(
)注意力特征;而空间注意力机制则在于得到一个2D(
)注意力特征。不同于上述两种注意力机制,该方法提出了一种像素注意力机制,它将生成3D(
)注意力特征,见上图,可以看到:它仅仅采用1x1卷积 sigmoid得到3D注意力特征。
- SC-PA Block。所提方法的主要模块为SC-PA(Self-Calibrated Convolution with Pixel Attention),它是在ScConv的基础上引入了PA注意力机制。SC-PA包含两个分支,每个分支在起始阶段你包含一个
卷积用于特征降维,上分支同时还包含两个
卷积,一个用于PA模块,该分支用于将特征
变换到
;下分支仅仅包含一个
卷积用于生成
(因为原始信息需要进行保留)。最后
通过Concat 卷积方式融合得到
,为加速训练,SC-PA还引入了残差连接。各位同学有没有觉得这个其实跟ScConv的思想差不多呢?
- U-PA Bloc。除了SC-PA模块外,PA还被集成进了重建模块。重建模块还是比较简单的,这里就不过多赘述了,唯一需要注意的就是这里采用最近邻插值(主要目的可能就是降低计算量和参数量吧),而非PixelShuffle或者转置卷积。
在训练阶段,训练集为DF2K,HR图像块大小为
,BatchSize=32,损失函数为L1,优化器为Adam;在验证阶段,所提方法取得了29.00dB@DIV2K-val,推理耗时为0.0758s@Ti1080。
Haiyun
image-20200916175259565
上图给出了HaiYun团队所提出的网络架构示意图,受启发于LatticeNet,该方法设置了一种Lattice Block, LB
,它包含两个蝶式结构用于组合两个残差模块。下图给出了LatticeNet一文的LB结构示意图,对该方法感兴趣的同学建议去看一下LatticeNet一文。这里就不再过多介绍了。