作者 | 小马编辑 | CV君,下面我们就来聊聊关于网格平滑自学教程?接下来我们就一起去了解一下吧!

网格平滑自学教程(数据训练太慢)

网格平滑自学教程

作者 | 小马

编辑 | CV君

报道 | 我爱计算机视觉(微信id:aicvml)

【写在前面】

训练深度视频模型比训练其对应图像模型慢一个数量级。训练慢导致研究周期长,阻碍了视频理解研究的进展。按照训练图像模型的标准做法,视频模型训练使用了固定的mini-batch形状,即固定数量的片段,帧和空间大小。然而,最佳形状是什么?高分辨率模型表现良好,但训练缓慢。低分辨率模型训练速度更快,但精确度较低。

受数值优化中多重网格方法的启发,作者提出使用具有不同时空分辨率的可变mini-batch形状。不同的形状源于对多个采样网格上的训练数据进行重采样。当缩小其他维度时,通过扩大小batch大小和学习率来加速训练

1. 论文和代码地址

A Multigrid Method for Efficiently Training Video Models

论文地址:http://arxiv.org/abs/1912.00998

代码地址:http://github.com/facebookresearch/SlowFast

2. Motivation

在视频上训练深度网络(CNN)比训练2D CNN图像模型计算更密集。长时间的训练过程减缓了视频理解研究的进展,阻碍了扩展到现实世界的数据源,并消耗了大量的算力和硬件。这种缓慢的训练是否是不可避免的,还是有视频特定的优化策略可以加速训练

3D CNN视频模型使用mini-batch优化方法(如SGD)进行训练。mini-batch形状B×T×H×W (mini-batch大小×帧数×高度×宽度)通常在整个训练过程中保持不变。选择该输入形状时需要考虑各种因素,但一种常见的启发式方法是使T×H×W尺寸变大,以提高精度。

然而,这种启发式方法只是一种可能的选择,并且通常存在权衡。例如,可以使用较少数量的帧和/或空间大小,同时增加mini-batch大小B。通过这种交换,可以以较低的wall-clock时间处理相同数量的epoch,因为每次迭代处理更多的样本。这样做的代价是训练速度更快,精确度更低。

本文的中心思想是避免这种trade-off,即通过在训练过程中使mini-batch形状可变,从而在不损失准确性的情况下进行更快的训练。作者利用从粗到细的网格(分辨率)来加速优化。直观地说,如果作者在训练早期使用时间和空间尺寸相对较小的大型mini-batch (“粗粒度网格”),然后使用时间和空间尺寸较大的小型mini-batch(“细粒度网格”)。

多重网格训练是可能的,因为由于权重共享操作(例如卷积),视频模型与可变空间和时间维度的输入数据兼容。此外,通过之前工作的数据增强可以发现,CNN在多个尺度的学习模式方面都是有效的。作者通过多重网格训练观察到相似的多尺度鲁棒性和泛化性。

作者提出的多重网格训练方法简单有效。它很容易实现,通常只需要对data loader进行少量更改。此外,多重网格训练方法适用于多种模型、数据集、初始化和硬件规模。作者观察到,在所有情况下,在不进行调参的情况下,都能获得一致的加速比和性能增益。如上图所示,在SlowFast网络和Kinetics数据集上,用本文的方法能够比正常训练加速4.5倍,并获得0.8%的性能提升。

3. 方法

受数值分析中解决粗网格和细网格交替优化问题的多重网格方法的启发,本文的核心观察是用于训练视频模型的底层采样网格在训练过程中是可变的。作者将在实验中证明,通过在训练期间改变采样网格和mini-batch大小,可以显著降低训练复杂度,同时实现与baseline相似的精度。

支持多重网格训练的基本概念是,分配给每个mini-batch处理更多样本的计算与分配给处理更大时间和空间维度的计算之间的平衡。为了实现这种平衡,作者考虑通过重新采样源视频而形成的时间和空间形状t×w×h。当改变输入形状时,作者使用可变的mini-batch size来满足b·t·h·w = B·T·H·W,或者:

这使得产生的计算量(以FLOPs为单位)大致等于3D CNN baseline的计算量。

本文的多重网格方法使用一组采样网格和确定在每次训练迭代中使用哪个网格的网格schedule。无论怎么采样,训练保持不变的epoch,因此能够达到减少计算所需的FLOPs和时间的目的。

作者将通过实验研究两个问题:(1)是否有一组具有网格schedule的网格可以在不损失精度的情况下实现更快的训练?(2)如果是,它是否能够在不进行修改的情况下有力地推广到新模型和数据集

3.1. Multigrid Training ConceptsSampling Grids

数据集中的每个视频都是从物理世界生成的基本连续信号中采样的离散信号。视频具有一定数量的帧和每帧的像素,这些帧和像素通过记录设备的时间和空间分辨率(取决于多个相机属性)与物理世界相关。当在训练mini-batch中使用这些源视频之一时,使用采样网格对其进行重新采样。一维(空间或时间)的采样网格由两个量表示:span和stride。

对于时间维度,单位是帧,而对于空间维度,单位是像素。span是网格的支撑尺寸,定义了网格覆盖的持续时间或面积。stride是采样点之间的间距。不同的网格可以生成相同的数据形状,这意味着,如果采样网格的变化也会改变数据形状,则mini-batch大小也会改变。

作者注意到,如果使用多尺度空间数据增强,则baseline优化器中已经出现了空间采样网格。在本文的多网格视角下,多尺度空间数据增强会按比例改变重采样网格的空间spans和stride,从而使得到的mini-batch始终具有相同的H×W空间形状。相反,作者将根据不同的因素更改spans和stride,这将导致每个网格的空间形状H×W不同(时间维度也是如此)。

Grid Scheduling

作者使用mini-batch优化器,它以单个mini-batch迭代作为其最基本的调度单元,在该迭代中执行一次模型更新。训练schedule由一些mini-batch迭代组成,并且通常以epoch来表示。例如,训练可以由100或200个epoch的迭代组成。在整个训练schedule中,通常让学习率变化。

本文的多重网格方法的核心是调度整个训练过程中使用的采样网格。在更改网格时,mini-batch大小始终根据样本的形状进行缩放,以便mini-batch的FLOPs大致保持不变

Multigrid Properties

多重网格训练依赖于数据和模型的两个属性。首先,在不同网格上重新采样数据需要合适的运算。对于视频,该运算可以是应用于源离散信号的重建滤波器,然后计算网格指定点处的值(例如双线性插值)。

其次,模型必须与在不同网格上重新采样的输入兼容,因此在训练期间可能具有不同的形状。由在重采样的维度上使用权重共享的函数组成的模型是兼容的,本文方法涵盖了大多数常用的结构,例如2D和3D卷积、RNN和自注意力。在本文中,作者主要关注2D,3D卷积和self-attention。所有模型都以全局平均池化和一个全连接层作为分类器结束。

Training and Testing Distributions

这项工作的重点是用于训练的多重网格方法,因此作者使用一种标准的推理方法,该方法使用单一形状作为测试数据。然而,这种选择可能会导致用于训练模型的数据分布与测试时使用的数据分布不匹配。为了缩小这一差距,训练可以通过一些“微调”迭代来完成,这些迭代使用与测试分布更紧密一致的网格。作者发现,这种微调带来了微小但持续的改进。

3.2. Implementation Details

多重网格训练包括选择采样网格和网格schedule,这将带来丰富的设计空间。作者使用一个分层计划,涉及以两种不同频率在mini-batch形状之间交替:长周期(long cycle),通过一组由各种网格生成的基本形状移动,在每个形状上停留几个epoch;短周期(short cycle),通过一组“靠近”当前基本形状的形状移动,保持一个iteration(如上图所示)。

Long Cycle

作者使用采样网格,得到四种mini-batch的形状:,,,。这四种形状涵盖了直观的范围,在实践中效果良好。长周期与stepwise learning rate decay schedule同步,并对每个形状进行相同次数的迭代训练。

作者使用简单的随机策略来生成每个训练迭代的目标输入形状的mini-batch。对于要在mini-batch中使用的每个视频,作者从指定的范围中选择一个随机span,并设置stride,以便在生成的网格上采样时产生所需的形状。对于空间维度,此策略相当于使用双线性插值将随机裁剪调整为所需形状。对于时间维度,该策略相当于选择随机时间裁剪并对其帧进行二次采样。

Short Cycle

短周期在各种空间形状中快速移动,在每次迭代中都会发生变化。默认情况下,作者使用以下3个形状的短循环。对于迭代i,设m=i(mod3);如果m=0,则将空间形状设置为;如果m=1,则使用;否则,使用当前来自长周期的基本空间形状。

短周期可以单独应用,也可以与长周期一起应用。同样的随机网格策略应用于目标mini-batch形状的样本数据。

Learning Rate Scaling

当mini-batch因长周期而改变时,作者使用linear scaling rule通过mini-batch比例因子(即8×,4×,2×或1×)调整学习率。作者发现如果应用于由于短周期而导致的mini-batch大小变化,这个调整有害的,因此作者仅在长周期基本形状变化时才调整学习率。

4.实验

上图展示了本文的多重网格网格方法和baseline的训练过程变化图。

上表展示了Kinetics-400数据集上,Long cycle design的不同设置实验结果

上表展示了Kinetics-400数据集上,Short cycle design的不同设置实验结果

上表展示了本文方法在不同初始化、时间形状、空间形状下的实验结果。

上表展示了I3D 和 I3D-NL模型在Kinetics-400的准确率。

上表为单卡情况下,本文方法的实验结果,可以看出,本文方法对硬件规模也有很好的泛化性。

上表为本文方法在Something-Something V2上的实验结果。

上表为本文方法在Charades上的实验结果。

5. 总结

在本文中,作者希望用更少的GPU hour来训练一个视频模型,目前视频模型耗时很大的一个原因在训练的每一个epoch中都采用了相同的帧率、长和宽。但作者认为,可以通过可变的帧率和长宽来加快训练速度,比如当帧率和长宽减小时,可是适当增大batch size,从而使得显存基本不变。

在文章中,作者提出了集中调整帧率、长宽和batch size的策略,实验结果表明,动态可变的帧率、长宽和batch size相比于静态的帧率、长宽和batch size能够获得一定的性能提升,并且能够获得显著的训练加速。