关注公众号,发现CV技术之美

 写在前面

训练深度视频模型比训练其对应图像模型慢一个数量级。训练慢导致研究周期长,阻碍了视频理解研究的进展。按照训练图像模型的标准做法,视频模型训练使用了固定的mini-batch形状,即固定数量的片段,帧和空间大小。

然而,最佳形状是什么?高分辨率模型表现良好,但训练缓慢。低分辨率模型训练速度更快,但精确度较低。受数值优化中多重网格方法的启发,作者提出使用具有不同时空分辨率的可变mini-batch形状。不同的形状源于对多个采样网格上的训练数据进行重采样。当缩小其他维度时,通过扩大小batch大小和学习率来加速训练

 1. 论文和代码地址

A Multigrid Method for Efficiently Training Video Models

论文:https://arxiv.org/abs/1912.00998
代码:https://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 Concepts

Sampling 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能够获得一定的性能提升,并且能够获得显著的训练加速。

▊ 作者简介

研究领域:FightingCV公众号运营者,研究方向为多模态内容理解,专注于解决视觉模态和语言模态相结合的任务,促进Vision-Language模型的实地应用。

知乎/公众号:FightingCV

END

欢迎加入「视频技术交流群

视频数据训练太慢?试试UT-AustinFAIR提出的多重网格训练,加速4.5倍,还能提点!...相关推荐

  1. 模型训练遇到数据量太大而导致内存不够问题?今天教你一招

    在比赛和工作中,我们经常会遇到数据量太大而导致内存不够的问题.这里可以细分为两种情况: 情况1:数据太大,无法加载到内存: 情况2:加载数据但训练时内存不够: 针对情况1可以考虑使用Spark或者Da ...

  2. 谷歌牛逼:720p高清+长镜头,网友:对短视频行业冲击太大

    来源:量子位 内容生成AI进入视频时代! Meta发布「用嘴做视频」仅一周,谷歌CEO劈柴哥接连派出两名选手上场竞争. 第一位Imagen Video与Meta的Make-A-Video相比突出一个高 ...

  3. 谷歌最新发布两大视频生成工作:720p高清+长镜头,网友:对短视频行业冲击太大......

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 点击进入-> CV 微信技术交流群 梦晨 Pine 发自 凹非寺 转载自:量子位(QbitAI) 内容 ...

  4. Java多线程B站爬虫与45万条视频数据,mysql批量写入性能对比,附代码

    恩,萌新刚来,听学长说写博客可以总结梳理自己的知识,所以来试试,自娱自乐,不喜莫喷.目前还是大二狗,学Java半年多,错误很多,望大神指正. 本文涉及:Java多线程,单例模式,爬虫相关技术,MySQ ...

  5. Make-A-Video(造啊视频)——无需文字-视频数据的文字转视频(文生视频)生成方法

    © 2022 Uriel Singer et al (Meta AI) © 2023 Conmajia 本文基于论文 Make-A-Video: Text-to-Video Generation wi ...

  6. 训练数据也外包?这家公司“承包”了不少注释训练数据,原来是这样做的……...

    作者 |  Lionbridge AI 译者 | 天道酬勤 责编 | 徐威龙 封图| CSDN│下载于视觉中国 出品 |  AI科技大本营(ID:rgznai100) 在机器学习领域,训练数据准备是最 ...

  7. WebRTC视频数据流程分析

    本文来自<WebRTC Native开发实战>书籍作者许建林在LiveVideoStack线上分享中的内容,详细分析总结 WebRTC 的视频数据流程,并对大型项目如何快速上手:分析方法, ...

  8. android surfaceview 大小_Android 使用Camera2 API采集视频数据

    Android 视频数据采集系列的最后一篇出炉了,和前两篇文章想比,这篇文章从系统API层面进行一些探索,涉及到的细节更多.初次接触 Camera2 API 会觉得它的使用有些繁琐,涉及到的类有些多, ...

  9. for循环数据量太大_中文文本分类roberta大力出奇迹之数据量大的问题

    问题描述: 笔者在文本分类场景中使用了roberta+pool+dense的三分类模型.采用预训练模型做项目的时候经常苦于数据太少,模型泛化性差,因此收集了1300W数据.在我尝试暴力出奇迹的时候,遇 ...

最新文章

  1. 实例:手写 CUDA 算子,让 Pytorch 提速 20 倍
  2. 漫画 | 一台 Linux 服务器最多能支撑多少个 TCP 连接?
  3. C++ 重载机制实现原理
  4. 团队行为心理学读书笔记(8)绩效考核背后的行为心理学
  5. 平板电脑应用_什么是机房巡检AI机器人?工业平板电脑的应用如何体现
  6. 【POJ - 3211】Washing Clothes (dp,0-1背包中点问题)
  7. 【EOJ Monthly 2018.10 - B】 莫干山奇遇 (思维构造,数学,数组,贪心)(总结)
  8. FreeSql (二十七)将已写好的 SQL 语句,与实体类映射进行二次查询
  9. 毫秒数据字符串转换为DateTime
  10. 用JavaScript获取输入的特殊字符
  11. ceph存储原理_Java实战教程:【原理剖析】K8S存储原理剖析与实战
  12. 《丁丁历险记系列之委托》改编自《.NET委托:一个C#睡前故事》
  13. oracle asm空间利用率,ASM磁盘组状态和使用率的监控
  14. tableau必知必会之学做三个集合的维恩图(文氏图)Venn diagram(二)
  15. IE浏览器打不开解决办法
  16. 计算机应用基础教程ppt 洪歧,计算机应用基础案例教程(清华)
  17. 计算机不接受跨专业考研,2016跨专业考研需谨慎的专业解读:计算机
  18. google android模拟器多系统,Android模拟器安装教程_体验google_Android系统手机
  19. SpringBoot——使用拦截器拦截未登录用户
  20. 生成webservice客户端以及解决SSL异常

热门文章

  1. 联邦学习安全与隐私保护综述 A survey on security and privacy of federated learning
  2. 决策树模型(ID3/C4.5/CART)原理和底层代码解读 学习笔记
  3. TensorFlow第六步: 继续挖坑 用tf重写BP并增加SGD
  4. 随机样本一致性:一种用于图像分析和自动制图的模型拟合模型(6)--(计算共线矩阵T)
  5. 从云服务器上拷贝文件,从云服务器上拷贝文件
  6. alternatives命令用法
  7. Hibernate通用Dao实现
  8. Linux学习笔记--导航(CentOS 7)
  9. Javascript事件驱动编程
  10. 【QT 数据库专辑】【02】WIN7下搭建本地MYSQL数据库02 - 建立数据库的驱动程序-QT为例-完备版