关注公众号,发现CV技术之美
VSR 的训练确实很费时间,本文提出多重网格训练和大型minibatch的办法来加速训练。客观的讲,空间周期变化对PSNR的影响相较时间周期要敏感一些,大型minibatch的方法固然可以加快速度但是使用中还需考虑显存问题。整体看来,时间周期加上对学习率的调整是个不错的加速选择。
详细信息如下:
- 论文名称:Accelerating the Training of Video Super-Resolution
- 作者单位:腾讯PCG ARC实验室
- 论文链接:https://arxiv.org/pdf/2205.05069.pdf
- 项目链接:https://github.com/TencentARC/Efficient-VSR-Training
01 看点
有效地训练有竞争力的VSR模型是一个具有挑战性的问题,它通常比训练对应的图像模型需要多出一个数量级的时间。现有的VSR方法通常从头到尾训练具有固定空间和时间大小的模型。固定大小通常设置为较大的值以获得良好的性能,但训练缓慢。
本文展示了逐步从小到大(空间/时间维度)训练视频模型的可能性。整个训练分为几个阶段,早期阶段的训练空间形状较小。每个阶段内时间大小从短到长变化。这种多重网格训练策略可以加速训练,因为大部分计算都是在较小的空间和较短的时间上进行的。为了进一步加速GPU并行化,本文还研究了在不损失精度的情况下进行大minibatch训练,使得各种VSR模型能够在不降低性能的情况下大幅提高训练速度(最高可达6.2倍)。
(这图怎么看着30.90dB比30.91dB还高)
02 方法
多重网格训练
提高VSR精度的一种常见做法是训练更多的帧。然而随着帧数的增加,训练速度会变慢(下图a),因为模型需要处理更多的时间信息,空间尺寸同理(下图b),那么以较大和固定的尺寸来进行训练显然是欠优的。
一个直观的方法是首先以较小的空间和时间大小训练VSR模型,然后逐渐增大,即以一种简单到困难的方式。具体说,在训练的早期阶段,网络以较小的空间和时间大小进行训练,这相对更容易、更快。然而由于小尺寸信息有限,导致欠佳的表现。可以通过增加空间和时间大小来提高性能,因为较大的输入尺寸能使网络专注于融合更多信息和重建更精细的细节。
通过这种方式,大多数训练迭代都是以较小的空间和较短的时间大小进行的,以加快训练。基于以上讨论,本文提出了一种多网格训练策略,如下图。该策略采用两个周期(空间和时间)的分层设计来改变空间和时间大小。
空间周期: 对于空间周期,不同的空间大小和每个空间阶段的持续时间是变长的。如果空间大小从较小的值开始,训练会更快,然而这会带来训练精度下降(如16×16)。原因可能是由于这些小patch的信息不足,进而导致不准确的光流估计。因此,空间周期中的空间大小不应太小。此外,为了逼近baseline精度,最后一个空间阶段的空间大小将设置为baseline中的默认大小(H×W)。本实验中将整个训练过程平均分为我们将训练过程平均分为个空间阶段。这两个阶段的空间大小分别设置为和。通过随机裁剪原始帧,生成不同空间大小的训练样本。
时间周期: 不同的时间大小和每个时间阶段的持续时间也是变长的。时间维度越长,训练时间就越长,在时间长度非常小(如3)的情况下,由于无法提供足够的补充信息,VSR的性能会相应下降。因此,本实验中时间周期中的时间长度最小为6,并逐渐扩大,直到在基线中达到原始时间长度T。本文将每个时间周期平均划分为f个时间阶段。此外,实验表明同时增加空间和时间大小会导致次优结果。因此,本文采用两个周期的分层设计来改变空间和时间大小,而不是同步地改变它们。对于每个空间阶段,时间大小会在一个完整的时间周期内发生变化,从而在整个训练过程中总共产生个时空阶段。本实验中将空间周期平均分为个时间阶段。这三个时间阶段中的时间长度以递增的方式设置:,和。这三种时间尺度涵盖了一个直观的范围,在实践中效果良好。
动态学习率调度器: 通常,VSR训练中的学习率将初始化为一个相对较大的值,然后随着训练的进行而衰减,将其应用到多重网格训练中时,在训练更大的空间和时间时学习率将变小,这会阻碍网络的探索能力。本文提出了一种动态学习率调度器,它可以在切换空间/时间大小时调整学习率以适应不同的任务难度。具体地,当空间或时间大小改变时,调度器将学习率重新调整为较大的值。采用余弦退火策略以更好地收敛,在第t个迭代时的学习率的公式如下:
式中,η表示初始学习率,表示时空阶段j的训练迭代次数,表示总训练迭代次数,满足。因为总迭代次数总是大于,故学习率永远不会衰减到零,这避免了在学习率太低的情况下浪费训练迭代。
大minibatch训练
增加minibatch的大小使网络能够并行处理更多样本,因此它们可以更快地训练。与高级任务类似,本文总结了两条关于大minibatch的重要规则用于加速训练:当minibatch大小发生变化时,线性调整学习率以及在开始时以较小的学习率预热网络。接下来将阐述上述规则为何有效。使用损失为的VSR小批量训练:
其中,是一个Minibatch,n为X中的样本数,w是VSR网络的权重,为损失函数。下面分析训练m次拥有n个样本的minibatch和训练一次的大minibatch之间的差异。m次minibatch的权重更新如下:
其中η为学习率,为训练迭代次数,为梯度。类似地,当使用大小为mn的执行单个迭代时,权重将为:
假设,:
因此,当学习率设置为ηη时,将得到。这表明可以用更大的minibatch和更少的迭代来训练网络,通过线性调整学习率逼近基线训练。此外,这种假设依赖于。当权重快速变化时,该假设可能会失败。由于权重的快速变化通常发生在训练的早期阶段,因此本文采用热身策略,将学习率从一个小值逐渐提高到一个大值,以缓解这个问题。
03 实验
实施细节
本文实现了BasicVSR-M、BasicVSR(M表示中等大小)来进行实验。它们的空间周期中使用的空间大小为均为32×32和64×64,时间周期为{7,11,15}。在32×32空间大小上训练的学习率从2e−4开始。学习率过大可能会导致EDVR-M的性能严重下降。此外在前5000次迭代中使用线性学习率预热来训练这些模型。
定量评估
当使用4×和2×较大的小批量训练BasicVSR-M和BasicVSR时,训练速度分别加快3.9倍和1.9倍。这种加速可以归因于大的小批量能够实现更好的GPU并行化。在不同的模型尺寸下,空间周期和时间周期都会给BasicVSR带来一致的加速比。
消融实验
如下图所示,直接增大minibatch会导致性能下降。然而,在进行学习率调整时,大型minibatch训练(带热身)的表现与基线相当。
下图研究了预热设置的影响。在没有预热的情况下直接应用线性调整会导致性能下降。这可能是因为在训练的早期,网络变化很快。在预热阶段的帮助下,大型minibatch训练的表现可以达到基线表现。
空间和时间周期的消融研究。
以同步方式简单地组合空间和时间周期中的大小(即,同时更改空间和时间大小)会导致性能下降。这可能是因为同时变化的空间/时间大小带来的巨大信息变化阻碍了学习过程。下图显示,以分层方式组合空间和时间周期可在不损失精度的情况下实现6.2倍的加速比。这些结果证明了我们多重网格设计的有效性。