ClassSR: A General Framework to Accelerate Super-Resolution Networks by Data Characteristic 论文阅读

date
Jul 25, 2023
Last edited time
Jul 25, 2023 11:22 AM
status
Published
slug
ClassSR论文阅读
tags
DL
CV
summary
type
Post
origin
Field
Plat

Abstract

我们的目标是加速在大型图像(2K-8K)上的超级分辨率(SR)过程。
在实际使用中,大图像通常被分解成小的子图像。基于这种处理方式,我们发现不同的图像区域有不同的修复难度,可以由具有不同能力的网络来处理。直观地说,光滑的区域比复杂的纹理更容易进行重建。为了利用这一特性,我们可以采用适当的 SR 网络来处理分解后的不同子图像。在此基础上,我们提出了一个新的解决方法–ClassSR,它在一个统一的框架中结合了分类和超分辨率。特别的是,它首先使用一个 Class-Module 将子图像按照修复难度分为不同的类别,然后应用一个 SR-Module 对不同的类别进行 SR。Class-Module 是一个传统的分类网络,而 SR-Module 是一个 network container 网络容器,由 to-be-accelerated SR network 和其简化版本组成。我们还引入了一种新的分类方法,用两种损失–类损失 Class-Loss 和平均损失 Average-Loss–来产生分类结果。经过联合训练,大部分子图像将通过较小的网络,因此计算成本可以大大降低。实验表明,我们的 ClassSR 可以帮助大多数现有的方法(如 FSRCNN、CARN、SRResNet、RCAN)在 DIV8K 数据集上节省高达 50% 的 FLOPs。这个通用的框架也可以应用于其他低级别的视觉任务。

Introduction

在本文中,我们研究了如何在 “大” 输入图像上加速 SR 算法,这些图像将被上采样到至少 2K 的分辨率(2048×1080)。而在现实世界的使用中,智能手机和电视显示器的图像 / 视频分辨率已经达到了 4K(4096×2160),甚至 8K(7680×4320)。由于最近的 SR 算法是建立在 CNN 的基础上,内存和计算成本将随着输入尺寸的增加而呈 quadratically 增长。因此,有必要将输入分解成子图像,并不断加速 SR 算法,以满足在真实图像上实时实施的要求。
最近关于 SR 加速的工作集中在提出轻量级的网络结构,例如,从早期的 FSRCNN 到最新的 CARN。我们从一个不同的角度来解决这个问题,不是设计一个更快的模型,而是提出一个新的处理方法,可以加速大多数 SR 方法。我们发现不同的图像区域需要不同的网络复杂度,例如,平面区域(如天空、土地)自然比纹理(如头发、羽毛)更容易处理。这表明,如果我们能用较小的网络来处理不太复杂的图像区域,计算成本就会大大降低。
根据我们的统计,对于 DIV8K 数据集,大约 60% 的 LR 子图像(32×32)属于平滑区域,而对于 DIV2K 数据集,这一比例下降到 30%。因此,大图像的加速率会更高。其次,子图像分解可以帮助节省实际应用中的内存空间,对低内存处理芯片来说是必不可少的。将子图像分配给并行处理器以进一步加速也是合理的。
为了解决上述问题并加速现有的 SR 方法,我们提出了一个新的解决方案,即 ClassSR,以同时进行分类和超分辨率。该框架由两个模块组成–分类模块SR 模块。分类模块是一个简单的分类网络,根据修复难度将输入分类到一个特殊的类别,而 SR 模块是一个网络容器,用相应类别的 SR 网络处理分类后的输入。它们被连接在一起,共同训练。创新之处在于分类方法和训练策略。具体来说,我们引入了两个新的损失来限制分类结果,第一个是 “类损失”,它鼓励对个别子图像对选择某一类有更高的概率。另一个是平均损失,确保整体分类结果不偏向于单一类别。这两种损失协同工作,使分类结果有意义且分布合理。此外,还加入了图像损失(L1 损失),以保证重建的性能。对于训练策略,我们首先用 Image-Loss 对 SR-Module 进行预训练。然后,我们固定 SR - 模块,用所有三种损失优化 Class 模块。最后,我们同时优化这两个模块,直到收敛。

Methods

Observation

我们首先说明了我们对不同种类的子图像的观察。
具体来说,我们研究了 DIV2K 验证数据集中 32×32LR 子图像的统计特征。为了评估其修复难度,我们将所有子图像通过 MSRResNet,并根据其 PSNR 值对这些子图像进行排序。如图所示,我们用蓝色曲线显示这些值,并将它们分成三个具有相同数量子图像的等级–“简单、中等、困难”。可以看出,具有高 PSNR 值的子图像通常是光滑的,而具有低 PSNR 值的子图像包含复杂的纹理。
notion image
然后我们采用不同的网络来处理不同种类的子图像。如表 1 所示,我们使用三个 FSRCNN 模型,它们具有相同的网络结构,但在第一卷积层和最后一个反卷积层中具有不同的通道数(比如 16、36、56)。它们分别用训练数据集中的 “简单、中等、困难” 子图像进行训练。
notion image
从表 1 中我们可以发现,FSRCNN(16) 和 FSRCNN-O(56) 在 “简单” 子图像上几乎没有区别,而 FSRCNN(36) 在 “中等” 子图像上可以达到与 FSRCNN-O(56) 大致相同的性能。这表明我们可以用一个轻量级的网络来处理简单的子图像以节省计算成本。这就是为什么我们提出以下 ClassSR 方法,它可以对不同的图像区域进行不同的处理,并加速现有的 SR 方法。

Overview of ClassSR

ClassSR 是一个新的单图像 SR 的解决方案,它由两个模块组成–Class-Module 和 SR-Module。
notion image
类模块将输入的图像分为 个类,而 SR 模块则包含 个分支(SR 网络)来处理不同的输入。
具体来说,一个大的输入 LR 图像 ,首先被分解为重叠的子图像 。分类模块接受每个子图像 ,并生成一个概率向量 。之后,我们通过选择最大概率值的索引来决定使用哪个 SR 网络。最后,我们将所有的输出子图像结合,得到最终的大 SR 图像 (2K-8K)。

Class-Module

Class-Module 的目标是通过低层次的特征来判断 “输入的子图像重建的难易程度 whether the input sub-image is easy or hard to reconstruct”。如图 4 所示,我们把 Class-Module 设计成一个简单的分类网络,它包含五个卷积层、一个平均池层和一个全连接层。
卷积层负责特征提取,而池化层和全连接层负责概率向量的提取。这个网络是相当轻量级的,并没有带来什么额外的计算成本。实验表明,这样一个简单的结构已经可以达到令人满意的分类结果。

SR-Module

SR - 模块被设计成一个容器,由几个独立的分支组成。一般来说,每个分支可以是任何基于学习的 SR 网络。由于我们的目标是加速现有的 SR 方法(例如,FSRCNN,CARN),我们采用这种 SR 网络作为基础网络,并将其设置为最复杂的分支,其他分支 SR 是通过降低网络复杂性得到的。

Classification Method

在训练过程中,分类模块根据子图像对特定分支的修复难度进行分类。因此,与测试不同的是,输入的子图像 应该通过所有 个 SR 分支。此外,为了保证 Class-Module 能够接受重建结果的梯度传播,我们将重建的子图像 和相应的分类概率 相乘,生成最终的 SR 输出 ,即为
我们用 L1 损失来约束 ,然后我们就可以自动获得分类概率。
但在测试过程中,输入只通过概率最大的 SR 分支。因此,我们提出 Lc(Class-Loss),使最大概率达到 1,y 将等于概率为 1 的子图像。请注意,如果我们只采用 Image-Loss 和 Class-Loss,训练将很容易收敛到一个极端点,即所有图像都被归入最复杂的分支。为了避免这种偏颇的结果,我们设计了 La(Average-Loss)来约束分类结果。

Loss Functions

损失函数由三个损失组成:一个常用的 L1 损失(Image-Loss)和我们提出的两个损失 Lc(分类损失)和 La(平均损失)。具体来说,L1 用于确保图像重建质量,Lc 用于证明分类的有效性,而 La 则确保每个 SR 分支可以被平等地选择。
损失函数表达为:

Class-Loss

Class-Loss 限制了分类模块的输出概率分布。
我们预先知道,分类模块对最大概率的类的信心要比其他类高得多。例如,分类结果 [0.90, 0.05, 0.05] 比[0.34,0.33,0.33]好,因为后者看起来像是随机选择。
分类损失被表述为:
其中 M 是类的数量。Lc 是同一子图像的各类概率之间的距离之和的负数。这种损失可以极大地扩大不同分类结果之间的概率差距,从而使最大概率值接近于 1。

Average-Loss

如果我们只采用 Image-Loss 和 Class-Loss,子图像很容易被分配到最复杂的分支。这是因为,最复杂的 SR 网络很容易得到更好的结果。那么,分类模块就会失去其功能,SR 模块就会退化为基础网络。** 为了避免这种情况,我们应该确保每个 SR 分支都有平等的机会被选中。** 因此,我们设计了 “平均损失”(Average-Loss)来限制分类结果。qq
它被表述为:
其中 B 是 batchsize,M 是分类数。La 是平均数 (B) 与一个批次内每个类别的子图像数之间的距离之和。有了这种损失,在训练过程中通过每个 SR 分支的子图像的数量将大致相同。

Training Strategy

我们建议通过三个步骤来训练 ClassSR。首先,预训练 SR-Module,然后固定 SR-Module,使用三种损失来训练 Class-Module,最后对所有网络进行联合微调。这是因为如果我们从头开始训练 Class-Module 和 SR-Module,性能将非常不稳定,分类将很容易陷入一个糟糕的局部最小值。
为了预训练 SR 模块,我们使用按 PSNR 值分类的数据。具体来说,所有的子图像都通过一个训练有素的 MSRResNet。然后根据 PSNR 值对这些子图像进行排名。接下来,前 1/3 的子图像被分配到 hard 类,而后 1/3 属于 easy 类。然后我们在相关的 easy/medium/hard 数据上训练 easy/medium/hard 的 SR 分支。尽管使用 MSRResNet 获得的 PSNR 来估计不同 SR 分支的修复难度并不完美,但它可以为 SR 分支提供一个良好的起点。
之后,我们添加分类模块并固定 SR 模块的参数。在所有的数据上用这三种损失来训练整个模型。如图所示,这个过程可以使类模块具有初级分类能力。之后,我们添加分类模块并固定 SR 模块的参数。在所有的数据上用这三种损失来训练整个模型,这个过程可以使类模块具有初级分类能力。
我们放松所有的参数,对整个模型进行微调。在联合训练期间,分类模块通过最终的 SR 结果重新确定其输出概率向量,而 SR 模块则根据新的分类结果进行更新。在实验中(见图 6),我们可以发现,子图像被分配到不同的 SR 分支,而性能和效率同时提高。

Experiments

Training Data

使用 DIV2K 数据集进行训练。为了准备训练数据,我们首先对原始图像进行下采样,缩放系数为 0.6、0.7、0.8、0.9,生成 HR 图像。
这些图像被进一步四倍下采样,得到 LR 图像。然后,我们从 LR 图像中密集地裁剪出 1.59M 个大小为 32×32 的子图像。通过 MSRResNet,这些子图像根据其 PSNR 值被平均分为三个等级(每个等级 0.53M)。所有子图像通过翻转旋转进一步增强。最后,我们得到 “easy/medium/hard” 的数据集,用于 SR - 模块的预训练。此外,我们还从 DIV2K 验证集中选择了 10 幅图像(索引 0801-0810),用于训练期间的评估。

Testing Data

我们从 DIV8K 数据集中选择了 300 张图像(索引 1201-1500),而不是常用的 SR 测试集,如 Set5 和 Set14,因为它们的图像太小,无法分解。
具体来说,前两百张图像分别被降为 2K 和 4K 分辨率,作为 Test2K 和 Test4K 数据集的 HR 图像。最后一百张图像构成 Test8K 数据集。LR 图像也是在 HR 图像的基础上通过 ×4 下采样得到的。在测试期间,LR 图像被裁剪成 32×32 的子图像,跨度为 28。通过对重叠区域进行平均化处理,将超分辨率的子图像合并为 SR 图像。我们使用 SR 和 HR 图像之间的 PSNR 值来评估重建性能,并计算测试集内所有 32×32 子图像的平均 FLOPs 来评估计算成本。

ClassSR with Existing SR networks

ClassSR 是一个通用框架,可以纳入大多数基于深度学习的 SR 方法,而不考虑网络结构。因此,我们不将 ClassSR 与其他网络加速策略进行比较,因为它们也可以通过 ClassSR 进一步加速。因此,为了证明其有效性,我们用 ClassSR 来加速 FSRCNN、CARN、SRResNet 和 RCAN,它们是不同网络规模的代表性网络。他们的 SR-Modules 都包含三个分支。最复杂的分支 f3 是原始网络,而其他分支是通过减少每个卷积层的通道得到的。

Results:在保证图片质量的情况下,大幅减少了计算量。

notion image

© Lazurite 2021 - 2024