0. 前言
- 相关资料:
- 论文基本信息
- 领域:视频理解 训练加速
- 作者单位:FAIR&得克萨斯大学奥斯汀分校
- 发表时间:2019.12
- 这工作对我们这种算力不够的人非常有帮助,也开源了,为啥没啥人讨论呢。
- 可能做视频算法的,除了我们,都是有钱人吧……
- 人生第一次训练Kinetics-400,就是现在了吗……
1. 要解决什么问题
- 现在的视频相关模型训练时间太久。
- 128卡在Kinetics-400上训练Slowfast也要一天多……
- high resolution models(指的应该是3D CNN模型,如I3D、SlowFast) 性能好,但训练时间长。
- low resolution models(指的应该是2D CNN模型,如TSN、TSM)训练时间较短,但性能差。
2. 用了什么方法
- 提出了一个multigrid的训练模型的方法。
- 该方法的目标是加快训练速度,且不损失太多精度。
- 一个结论:在训练过程中,输入数据的shape不用一定是固定的。
- 总体思路:
- coarse-to-fine,即从粗糙到精细。
- 主要需要平衡“预处理每个mini-batch数据的计算量”与“不同输入数据尺寸导致的模型计算量”。
- 方法基本流程
- 简单说,就是在训练过程中不断变换输入数据的尺寸。
- 假设输入数据为
(batch_size, t, h ,w ,c)
。 - 训练过程中,
batch_size, t, h ,w
都会不停的变换。- 刚刚提到,总体思路是从粗糙到精细。所谓粗糙就指的是
h, w
较小,精细指的是h, w
较大。
- 刚刚提到,总体思路是从粗糙到精细。所谓粗糙就指的是
- 另外,随着在改变整体shape的时候,一般要求总计算量(FLOPs)不会变化太大。
- 一些基本概念:
- sampling grids: 按我的理解就是,当
batch_size, t, h, w
这些数值固定后,就是一个sampling grid。- 一个sampling grid就代表一次对video的重采样(resample)。
- 对于上面没一个维度,都有两个量化数值,span/stride,前者表示所有可取的值,后者表示采样间隔。
- 相同的input size可能会是不用的 sampling grid。
- grid scheduling:
- 感觉意思差不多就是training schedule,在训练过程中变化
batch_size, t, h, w
这些维度。
- 感觉意思差不多就是training schedule,在训练过程中变化
- sampling grids: 按我的理解就是,当
- 具体实现方式:
- multigrid training的一个重要部分就是如何选择 sampling grids
- 本质就是怎么在训练过程中变换
batch_size, t, h, w
这几个维度。
- 本质就是怎么在训练过程中变换
- 文中提出了 short cycles, long cycles, long+short cycles,如下图所示。
- multigrid training的一个重要部分就是如何选择 sampling grids
3. 效果如何
- 在Kinetics-400上,用128GPU,训练backbone为ResNet50的SlowFast模型。
- 横座标所谓的wall-clock time猜测就是总训练时间(刚开始看,baseline训练20小时完事了,震惊了,结果仔细一看,128GPU……)。
- 图中所谓的
1x
这些指的是 epochs 的数量,1x
就是指与baseline相同。 - 对于1x的epochs,baseline/short cycle/long cycle/short-long cycle的训练时间分别是20/8/5/5小时……
- 在Kinetics-400上,用1GPU训练I3D模型。
- 训练时间从6.7天减少到2天……
- 在Something-Something-V2/Charades上也尝试使用multigrid训练,效果都可以
- 从而证明这种方法对各类数据集都有效。
- 从而证明这种方法对各类数据集都有效。
4. 还存在什么问题
-
感觉是比较工程化的项目(我喜欢),也没有太多“为什么”,做了这么多试验就是有效。
-
等有机会,要在ava上也试试。