ESC
输入关键词搜索文章
目录

SlowFast Networks

ICCV 2019 · Facebook AI Research
把视频识别拆成两条速度不同的通道:慢速看空间,快速看运动
Part 1
引言:视频识别为什么不能"一条路走到黑"

如果你做过视频动作识别,大概率会熟悉这条技术主线:把视频当作一个时空体(spatiotemporal volume),用 3D 卷积统一处理空间和时间两个维度。#i3d2017 的 I3D、#r2plus1d2018 的 R(2+1)D、#s3d2018 的 S3D——这条路线在 2015 到 2018 年几乎统治了 Kinetics-400 排行榜。这些方法的核心假设是:空间和时间是"对等"的两个维度,所以应当用 3D 卷积对称地处理它们。

但 2019 年 Facebook AI 的 Christoph Feichtenhofer、Haoqi Fan、Jitendra Malik 和 Kaiming He 发表了一篇看上去"反常识"的论文 #slowfast2019SlowFast Networks for Video Recognition。他们的核心观察是——视频里的空间语义和时间运动根本不是同一种信号,应当用两条完全异构的通道分别处理:

  • Slow 通道:低帧率采样(30 fps 视频里只取 2 fps),重点处理空间语义,通道容量大(ResNet-50/101 全量)
  • Fast 通道:高帧率采样(ω=8 倍密集的帧),重点处理运动细节,通道容量只有 Slow 的 1/8,整体计算量只占总体的 ~20%

这种"双速"的设计在 Kinetics-400 上 from-scratch 训练(不用 ImageNet 预训练)就达到了 79.8% top-1 #slowfast2019,把当时所有方法(包括 I3D 72.1% 和 R(2+1)D 73.9%)甩开几个百分点。论文还顺便在 AVA 时空动作检测上刷新 SOTA,并赢得了 ActivityNet Challenge 2019 的 AVA 赛道冠军。#slowfast2019

更优雅的是,整套方案不需要光流,完全端到端可学习。这与同时期需要预计算 optical flow 的 Two-Stream 系列工作形成鲜明对比——slowfast 的 Fast 通道用更密集的原始 RGB 帧替代了光流的信息。

这篇论文之所以成为视频识别领域的经典,一方面是设计哲学层面的洞察,另一方面是它催生了 PySlowFast 开源框架,成为后续 X3D #x3d2020、MViT #mvit2021、Video Swin Transformer 等工作的重要灵感来源。下面我们就从底层 motivation 开始,一步步把 SlowFast 拆开看。

本篇在系列中的位置:这是"动作识别"系列的第 2 篇论文精读。上一篇是 动作识别综述篇,介绍了 3D CNN 整体谱系。本篇聚焦于 SlowFast 本身。读完本篇后建议接着看后续的 X3D / TimeSformer / Video Swin 等精读。
Part 2
问题剖析:空间-时间为什么不对称?

2.1 一个被忽视的统计事实

在图像分类里我们习惯了"空间各向同性"假设:自然图像在水平、竖直、对角等所有方向上统计等价(#ruderman1994#huang1999 的早期工作证实了这一点)。所以 2D CNN 用方形 kernel 横扫一切很合理。但视频是三维信号 \(I(x, y, t)\),空间两维和时间一维不对等

为什么?论文 #slowfast2019 引用了两个关键观察:

  • 慢速运动更常见。人在某一瞬间看到的大多数物体其实是静止的,运动只发生在局部。Weiss 等人 #weiss2002 在贝叶斯框架下证明了"慢速运动先验"(slow movement prior)能解释人眼在孔径问题(aperture problem)中的视觉偏好:当我们看到一个边缘在移动,会倾向于把它解读为垂直于边缘方向,而不是带切向分量。
  • 空间语义慢变,运动快变。挥手的人一直还是"人",不会在挥手的瞬间从人变成猫。但"挥手"这个动作可能在 0.5 秒内完成,跟"走路"切换得非常快。

所以一个自然的设计思路是:用低帧率的"慢"通道抓空间语义(不需要那么快更新),用高帧率的"快"通道抓运动细节(需要密集采样)。这就是 SlowFast 的直觉起点。

2.2 与 Two-Stream 的关键区别

一看到"两条通路",很多人会立刻想到经典的 Two-Stream 网络 #twostream2014。但 SlowFast 在多个根本层面与 Two-Stream 不同:

维度Two-Stream (2014)SlowFast (2019)
两路关系同构(结构相同)异构(通道容量差 8 倍)
第二路输入Optical flow(手工设计)原始 RGB(端到端学习)
时间采样率两路相同Fast 通道是 Slow 的 8 倍密集
是否需要光流是(需预计算)
计算开销双流 ≈ 翻倍Fast 仅 ≈ 总计算 20%

关键差异点是时间采样率不同。Two-Stream 的两个流处理同样的帧数,区别只在模态(RGB vs optical flow)。SlowFast 强调的是"不同的时间速度"——Fast 通道比 Slow 通道密集采样 ω=8 倍的帧。这是对"双流"思想的一次根本性扩展:不只是模态不同,时间速度也应当不同

2.3 生物学启发:视网膜 P/M 双通路

论文还把这一设计与灵长类视觉系统的双通路做类比。视网膜神经节细胞中约 80% 是 Parvocellular(P-cells),约 15-20% 是 Magnocellular(M-cells)#livingstone1988

  • P-cells(副细胞):空间分辨率高、颜色敏感、时间响应慢——负责精细形状和颜色识别。
  • M-cells(主细胞):时间频率高、对快速运动敏感、空间细节和颜色不敏感——负责运动检测和低光视觉。

SlowFast 的 Fast 通道在设计上几乎复刻了 M-cells 的三个特点:

  1. 通道容量小(占总计算 ~20%,对应 M-cells 的少数比例)
  2. 时间分辨率高(每层都保留密集时间特征,对应 M-cells 的高时间频率)
  3. 空间细节弱(消融实验证明 grayscale 输入几乎不掉点,对应 M-cells 的色盲特性)

These studies found that in these cells, ~80% are Parvocellular (P-cells) and ~15-20% are Magnocellular (M-cells). The M-cells operate at high temporal frequency and are responsive to fast temporal changes, but not sensitive to spatial detail or color.

#slowfast2019 引言

不过作者也明确说:"admittedly the analogy is rough and premature"——这是 rough 的类比,不是严格的生物学建模。但这个类比给工程设计提供了清晰的指导原则。

Part 3
模型架构详解:双通道如何协作

在搞清动机之后,我们看 SlowFast 的具体实现。论文给出了一个清晰的实例化(论文 Table 1 #slowfast2019),基于 ResNet-50/101。

3.1 整体 Pipeline

先看一张从论文里提取的整体架构图。绿色代表 Fast 通道的高时间分辨率,橙色代表它的低通道容量。

SlowFast 整体架构图
图 1:SlowFast 整体架构。Slow 通道低帧率、高通道;Fast 通道高帧率、低通道。横向连接在 res2/res3/res4/res5 之后把 Fast 信息注入 Slow #slowfast2019

为了更清楚地展示数据流和融合点,我用 mermaid 重新画一张:

graph TD
  R["原始 64 帧 clip
(30 fps × 2.13s)"] -->|"τ=16 采样
(4 帧)"| S1 R -->|"τ/ω=2 采样
(32 帧)"| F1 S1["Slow 输入
T=4, 224×224"] --> S2["conv1
1×7², 64ch"] S2 --> S3["pool1
1×3² max"] S3 --> S4["res2
×3 blocks
(256,64)"] S4 --> S5["res3
×4 blocks
(512,128)"] S5 --> S6["res4
×6 blocks
(1024,256)"] S6 --> S7["res5
×3 blocks
(2048,512)"] S7 --> S8["GAP → 2048-d"] F1["Fast 输入
ωT=32, 224×224"] --> F2["conv1
5×7², 8ch"] F2 --> F3["pool1
1×3² max"] F3 --> F4["res2
×3 blocks
(32,8)"] F4 --> F5["res3
×4 blocks
(64,16)"] F5 --> F6["res4
×6 blocks
(128,32)"] F6 --> F7["res5
×3 blocks
(256,64)"] F7 --> F8["GAP → 256-d"] S4 -.->|"Lateral"| S5 S5 -.->|"Lateral"| S6 S6 -.->|"Lateral"| S7 F4 -.->|"Lateral"| S4 F5 -.->|"Lateral"| S5 F6 -.->|"Lateral"| S6 F7 -.->|"Lateral"| S7 S8 --> C["concat 2048+256"] F8 --> C C --> FC["FC → K 类"]

整张图的核心要点:

  • 两路从同一段原始视频采样,采样步长不同(τ=16 vs τ/ω=2)
  • 两路的 backbone 都是 3D ResNet 变体,但通道数差 8 倍
  • Fast 通道通过横向连接(lateral connections)单向融合到 Slow 通道的每个 stage
  • 最后两路各自 GAP → concat → 全连接分类

3.2 Slow 通道:低帧率抓空间

Slow 通道的设计哲学很直接:把它当作"高质量图像识别器",只是在时间维度上稀疏采样。

采样配置:从 64 帧原始 clip 中每隔 τ=16 帧采样 1 帧,得到 T=4 帧输入。在 30 fps 视频下,4 帧覆盖约 2.13 秒,但只占原始视频每秒 2 帧——这是一条慢速通道。

网络结构:论文 #slowfast2019 Table 1 给出了具体配置(基于 ResNet-50):

  • conv1: 1×7² kernel,64 通道(2D kernel,时间维度为 1
  • pool1: 1×3² max pool
  • res2: 3 个 bottleneck blocks(输出 256,中间 64)
  • res3: 4 个 bottleneck blocks(512, 128)
  • res4: 6 个时空可分离 blocks(1024, 256,[3×1², 1×3², 1×1²])
  • res5: 3 个时空可分离 blocks(2048, 512)
  • GAP → 2048-d

注意一个反直觉的设计选择:conv1 到 res3 都用 2D kernel,只有 res4、res5 用 3D kernel(带时间维度)。论文 #slowfast2019 解释:当 τ=16 这么大时,早层小空间感受野内的时间相关性很弱;只有到 res4 这种大空间感受野的层,时间维度才显示出足够的运动信息。这与 R(2+1)D #r2plus1d2018 和 S3D #s3d2018 的"top-heavy"设计哲学一致。

3.3 Fast 通道:高帧率抓运动

Fast 通道是 SlowFast 最具特色的设计。它的输入帧数是 Slow 的 ω=8 倍(ωT=32 帧),但通道数只有 Slow 的 φ=1/8(最少到 8 通道)。

采样配置:从 64 帧原始 clip 中每隔 τ/ω=2 帧采样 1 帧,得到 32 帧输入。注意 ωT=32 帧也覆盖约 2.13 秒,但每秒采 16 帧——这是一条快速通道。

网络结构

  • conv1: 5×7² kernel,8 通道(带时间维度)
  • pool1: 1×3² max
  • res2: 3 个时空可分离 blocks(输出 32,中间 8)
  • res3: 4 个 blocks(64, 16)
  • res4: 6 个 blocks(128, 32)
  • res5: 3 个 blocks(256, 64)
  • GAP → 256-d

与 Slow 通道的两个关键差异:

Fast 通道的两个"不"原则

  1. 不做时间下采样。从 conv1 到 res5,所有时间维度始终保持 ωT=32 帧。Fast 通道不进行时间池化或时间步长卷积。这样可以保留最细粒度的时间信息。
  2. 每层都用非退化时间卷积。Slow 通道只有 res4、res5 用 3D kernel;Fast 通道从 conv1 开始每一层都有时间维度。论文 #slowfast2019 解释:因为 Fast 通道的"时间 stride"小(τ/ω=2),每个时间步之间都有强相关性,3D kernel 都有用武之地。

3.4 横向连接:Fast 怎么"帮"Slow

两路独立运行到结束显然不行——Fast 通道的信息需要传递给 Slow 通道,让分类器同时知道"是什么物体"和"在做什么动作"。这个连接就是 lateral connection

Slow 通道的特征形状是 \(\{T, S^2, C\}\),Fast 通道的特征形状是 \(\{\omega T, S^2, \phi C\}\),两者时间维度和通道维度都不匹配。论文尝试了三种变换方式 #slowfast2019

三种 Lateral Connection 实现

(i) Time-to-channel (TtoC)

\(\omega\) 帧"打包"到一个帧的通道维度:

\(\{\omega T, S^2, \phi C\} \;\longrightarrow\; \{T, S^2, \omega \phi C\}\)

通过 reshape + transpose 实现。优点是保留所有时间信息;缺点是通道数扩了 ω 倍。

(ii) Time-strided sampling (T-sample)

从 Fast 特征中每隔 ω 帧采样 1 帧:

\(\{\omega T, S^2, \phi C\} \;\longrightarrow\; \{T, S^2, \phi C\}\)

最简单;缺点是丢掉中间帧信息。

(iii) Time-strided convolution (T-conv) — 默认

用一个 5×1² kernel 的 3D 卷积,输出 2φC 通道,stride=ω:

\(\text{Conv}_{5 \times 1^2, \text{stride}=\omega} : \{\omega T, S^2, \phi C\} \;\longrightarrow\; \{T, S^2, 2\phi C\}\)

可学习,灵活;在 K400 上取得最好结果。

横向连接的位置在每个 stage 之后(pool1 之后、res2 之后、res3 之后、res4 之后),与 FPN #fpn2017 的设计哲学一致。论文实验发现单向融合(Fast → Slow)和双向融合效果相似,所以默认采用单向。

最终分类:两路各自 GAP → concat(2048-d + 256-d)→ 全连接层 → K 类。

3.5 网络实例化对照

下表是论文 Table 1 的精简版(基于 ResNet-50 backbone,ω=8, φ=1/8, τ=16):

StageSlow 通道Fast 通道输出 T×S²
原始 clip64×224²
data layerstride 16, 1²stride 2, 1²Slow: 4×224²
Fast: 32×224²
conv11×7², 64ch5×7², 8chSlow: 4×112²
Fast: 32×112²
pool11×3² max1×3² maxSlow: 4×56²
Fast: 32×56²
res2blocks(256,64)×3blockt(32,8)×3Slow: 4×56²×256
Fast: 32×56²×32
res3blocks(512,128)×4blockt(64,16)×4Slow: 4×28²×512
Fast: 32×28²×64
res4blockt(1024,256)×6blockt(128,32)×6Slow: 4×14²×1024
Fast: 32×14²×128
res5blockt(2048,512)×3blockt(256,64)×3Slow: 4×7²×2048
Fast: 32×7²×256
finalglobal avg pool → concat → fc# classes

注:blockt 是 [3×1², 1×3², 1×1²] 三层时空可分离残差块,blocks 是 [1×1², 1×3², 1×1²] bottleneck。带下划线的 kernel 表示有非退化时间维度。

Part 4
关键设计选择与消融实验

SlowFast 的成功不是偶然。论文 #slowfast2019 做了大量消融实验,验证了每一个关键超参的选择。本节聚焦三个最关键的设计决策。

4.1 通道容量比例 φ=1/8:为什么 Fast 通道这么瘦?

这是 SlowFast 设计哲学的精华——Fast 通道的通道容量选择。下面是论文 Table 4b 的完整消融 #slowfast2019

配置top-1top-5GFLOPs说明
Slow-only72.690.327.3单独 Slow 通道
φ=1/475.691.754.5Fast 通道较重
φ=1/675.892.041.8最优 top-1
φ=1/875.692.136.1默认配置(最优 top-5)
φ=1/1275.291.832.8更轻量
φ=1/1675.191.730.6更轻量
φ=1/3274.291.328.6极轻量(仅 +1.3 GFLOPs)

几个关键观察:

  1. 所有 φ 值都比 Slow-only 好。即使 φ=1/32(Fast 通道只占 5% 总 FLOPs),仍比单独 Slow 通道高 1.6%。这说明 Fast 通道是"普惠性"设计,而不是"越大越好"。
  2. φ=1/8 是最优平衡点。它在精度和 FLOPs 之间取到了最佳 trade-off。φ=1/6 top-1 高 0.2% 但 FLOPs 多 16%。
  3. 计算量大致与通道数平方成正比。3D 卷积 FLOPs ∝ C_in × C_out,所以从 φ=1/4 减到 φ=1/8,FLOPs 减半。Fast 通道"瘦"不是工程妥协,而是设计目标

这与 M-cells 在视网膜中占 ~15-20% 的比例形成精妙呼应:Fast 通道占总计算约 20%(论文 §3.2 明确提到 #slowfast2019),M-cells 占视网膜神经节约 15-20%。不是巧合,而是 SlowFast 把生物学比例翻译成了工程比例。

4.2 Fast 通道的空间能力:到底要多弱?

既然 Fast 通道的通道容量小,那它的空间建模能力也应该弱——但到底能弱到什么程度?论文 Table 4c 测试了 4 种弱化空间输入的方式:

Fast 输入空间top-1top-5GFLOPs
RGB(默认)full75.692.136.1
RGB, φ=1/4, half res112×11274.791.834.4
Grayscalefull75.591.934.1
Time differencefull74.591.634.2
Optical flowfull73.891.335.1
反直觉发现:把 Fast 通道从 RGB 改成 grayscale,top-1 几乎不掉(75.5 vs 75.6,差 0.1%)。这说明 Fast 通道确实不需要颜色,与 M-cells 对颜色不敏感的特性完全一致!

另一个反直觉点:手工设计的 optical flow 反而最差(73.8%)。这意味着让网络自己学"运动表示",比直接喂给它人为设计的光流更好。这是 SlowFast 抛弃光流的重要实验依据。

4.3 不需要光流:Fast 通道是光流的"可学习替代品"

Two-Stream 系列工作(#twostream2014、Feichtenhofer 2016 等)一直依赖预计算的 optical flow(FlowNet 2.0、TV-L1 等算法),存在三个问题:

  1. 需要额外存储:光流 ≈ RGB 大小,视频数据集光流存储开销很大
  2. 不能端到端学习:光流是固定算法的输出,不能与分类器联合优化
  3. 计算成本翻倍:两路都跑 3D/2D 网络 ≈ 翻倍

SlowFast 的设计优雅地用 Fast 通道替代了光流:

  • 用更密集的 RGB 帧(ω=8 倍)替代光流携带的运动信息
  • Fast 通道轻量级(仅 ~20% 总计算)— 比两流结构更便宜
  • 完全端到端,不需要预计算

实验上,SlowFast 79.8% > Two-Stream I3D 75.7%(K400 #slowfast2019 Table 2)。在 AVA 上,SlowFast 用 Fast 通道提升 5.2 mAP,而 Two-Stream I3D 加光流只提升 1.1 mAP(#ava2018#slowfast2019。Fast 通道在改善精度的同时避免了光流的所有问题

4.4 三种 Lateral Connection 横向对比

论文 #slowfast2019 Table 4a 给了 lateral connection 的消融:

配置top-1top-5GFLOPs
Slow-only72.690.327.3
Fast-only51.778.56.4
SlowFast (no lateral)73.590.334.2
SlowFast (TtoC, sum)74.591.334.2
SlowFast (TtoC, concat)74.391.039.8
SlowFast (T-sample)75.491.834.9
SlowFast (T-conv)75.692.136.1

几个发现:

  • Fast-only 单独精度只有 51.7%——Fast 通道需要 Slow 通道的空间语义才能工作
  • 没有 lateral connection 也有提升(73.5% vs 72.6%),说明通道容量提升本身就有帮助
  • T-conv 效果最好(75.6%),比 T-sample 高 0.2%
整体精度/复杂度对比:论文 Figure 2 给出了 Slow vs SlowFast 在不同配置下的精度-复杂度曲线。下图显示 SlowFast(绿色)始终在 Slow-only(蓝色)上方,且 Fast 通道带来的额外 FLOPs 很小。
Slow vs SlowFast 精度/复杂度 tradeoff
图 2:Slow-only vs SlowFast 在 K400 上的精度/FLOPs 对比。绿色箭头表示加入 Fast 通道带来的提升,红色箭头表示 SlowFast 同时提升精度并降低 FLOPs #slowfast2019
Part 5
实验结果:四大数据集 SOTA

SlowFast 在四个主要视频数据集上全面刷新 SOTA。下面逐一分析。

5.1 Kinetics-400(动作分类,~240k 训练视频)

Kinetics-400 #kinetics4002017 是动作分类的"ImageNet",包含 ~240k 训练视频和 20k 验证视频,400 个类别。

模型flowpretraintop-1top-5GFLOPs×views
I3D #i3d2017ImageNet72.190.3108×N/A
Two-Stream I3DImageNet75.792.0216×N/A
S3D-G #s3d2018ImageNet77.293.0143×N/A
Nonlocal R50 #nonlocal2018ImageNet76.592.6282×30
Nonlocal R101ImageNet77.793.3359×30
R(2+1)D #r2plus1d201872.090.0152×115
R(2+1)D73.990.9304×115
SlowFast 4×16, R5075.692.136.1×30
SlowFast 8×8, R5077.092.665.7×30
SlowFast 8×8, R10177.993.2106×30
SlowFast 16×8, R10178.993.5213×30
SlowFast 16×8, R101+NL79.893.9234×30

几个核心数字:

  • 79.8% top-1 创下新 SOTA,比之前的 Nonlocal R101(77.7%)高 2.1%
  • 所有 SlowFast 都 from scratch 训练(不用 ImageNet 预训练),而 I3D/Nonlocal 等都依赖 ImageNet 预训练
  • 在不用预训练的 from-scratch 设置下,SlowFast 79.8% 比 R(2+1)D+flow 73.9% 高 5.9 个百分点——这是慢快设计的纯贡献
  • 计算成本上,SlowFast 4×16 R50 用 36.1 GFLOPs 达到 75.6%,比 Nonlocal R50(282 GFLOPs, 76.5%)FLOPs 少 87%

5.2 Kinetics-600(更大规模,~392k 视频)

Kinetics-600 #kinetics6002018 是 K400 的扩展版,~392k 训练视频,600 类。注意 K600 验证集与 K400 训练集有重叠,所以 SlowFast 在 K600 上没有用 K400 预训练

模型pretraintop-1top-5GFLOPs×views
I3D71.990.1108×N/A
StNet-IRv2 RGB #stnet2018ImgNet+Kin40079.0N/AN/A
SlowFast 4×16, R5078.894.036.1×30
SlowFast 8×8, R5079.994.565.7×30
SlowFast 8×8, R10180.494.8106×30
SlowFast 16×8, R10181.195.1213×30
SlowFast 16×8, R101+NL81.895.1234×30

SlowFast 16×8 R101+NL 在 K600 上达到 81.8% top-1,超过 StNet-IRv2 79.0%(ActivityNet Challenge 2018 冠军)。这说明 SlowFast 架构在大规模数据上有很好的可扩展性。

5.3 Charades(长时多标签动作)

Charades #charades2016 是长时多标签动作数据集(视频约 30 秒),用 mAP 评估:

模型pretrainmAPGFLOPs×views
CoViAR, R-50ImageNet21.9N/A
MultiScale TRNImageNet25.2N/A
Nonlocal, R101 #nonlocal2018ImageNet+K40037.5544×30
STRG, R101+NLImageNet+K40039.7630×30
Slow-only (baseline)K40039.0187×30
SlowFastK40042.1213×30
SlowFast +NLK40042.5234×30
SlowFast +NLK60045.2234×30

SlowFast 比 Slow-only baseline 高 3.1 mAP,比之前的 SOTA STRG(39.7 mAP)高 2.4 mAP,同时 FLOPs 更少(234 vs 630)。这是 Fast 通道在长时多标签场景下的额外价值——Fast 通道的高时间分辨率对长动作建模很有帮助。

5.4 AVA Action Detection(时空动作检测)

AVA #ava2018 是时空动作检测数据集,437 部电影,60 个原子动作。SlowFast 在 AVA v2.1 取得 27.3 val mAP,test mAP 27.1,并赢得 ActivityNet Challenge 2019 的 AVA 赛道冠军(ensemble 34.3 mAP)。

模型flowvideo pretrainval mAPtest mAP
I3D #ava2018K40014.5
I3DK40015.6
ACRN, S3DK40017.4
ATR, R50+NLK40020.0
ATR, R50+NLK40021.7
9-model ensembleK40025.621.1
I3DK60021.921.0
SlowFastK40026.3
SlowFastK60026.8
SlowFast +NLK60027.327.1
SlowFast* +NLK60028.2

SlowFast 在 AVA 上的核心消融值得单独看(论文 Table 7 #slowfast2019):

模型T×τωmAP
Slow-only, R504×1619.0
SlowFast, R504×16824.2
关键发现:在 AVA 上,仅靠加入 Fast 通道,Slow-only 19.0 → SlowFast 24.2 mAP,提升 +5.2 mAP(相对 +28%)。作为对比,Two-Stream I3D 加 optical flow 只提升 +1.1 mAP(14.5→15.6)。Fast 通道对时空动作检测的价值远超传统光流方法。

类别分析也很有启发(论文 Figure 4 #slowfast2019):

AVA 各类别 AP 提升
图 3:AVA 60 个类别的 AP 提升。黑色标注绝对提升最大的 5 个类别(hand clap +27.7, swim +27.4, run/jog +18.8, dance +15.9, eat +12.5),橙色标注相对提升最大的类别 #slowfast2019

提升最大的类别都是周期性/重复性动作(hand clap, swim, run, dance, eat)——这些恰好是 Fast 通道最擅长的"快速运动模式"。少数反而下降的类别(answer phone, lie/sleep, shoot)下降幅度都很小(<0.5 AP),可能是因为这些是相对静止或定义模糊的动作。

Part 6
训练配置与工程实践

SlowFast 的训练配置是它能稳定训练 from scratch 的关键。论文 Appendix 给了详细超参数 #slowfast2019

6.1 训练超参数披露表

配置项具体设置披露状态
优化器同步 SGD,momentum=0.9, weight decay=1e-4论文披露
学习率 scheduleHalf-period cosine: $\eta_n = \eta \cdot 0.5 [\cos(\frac{n}{n_{\max}}\pi) + 1]$论文披露
Base learning rate (K400)η=1.6论文披露
WarmupLinear, 8k iterations (K400), 1k (AVA)论文披露
Batch size8 clips/GPU × 128 GPUs = 1024 (K400)论文披露
训练 epochs256 (T≤4) / 196 (T>4) / 2× for K600论文披露
BN statistics在每个 8 clips 内计算论文披露
Dropout0.5(在 final classifier 前)论文披露
初始化He initialization论文披露
训练硬件128 GPUs 同步 SGD论文披露
数据增强(空间)224×224 随机 crop,更短边 [256, 320] random scale,horizontal flip论文披露
数据增强(时间)随机采样 αT×τ 帧 clip论文披露
推理配置256×256 spatial,10 temporal clips × 3 crops = 30 views论文披露

6.2 训练成本估算

从论文 Appendix 的信息可以估算训练成本:

  • 硬件:128 GPUs (推测为 V100 32GB)
  • 训练时长:~256 epochs × 60k iter / 1024 batch ≈ 几个 GPU-day
  • 每个 iter 处理 1024 clips,每 clip 处理 64 帧
  • 总训练 token 数:~240k K400 videos × 256 epochs = 60M+ samples

对于资源有限的研究者:论文提到单 8-GPU 机器也能达到相近精度,但需要相应调整学习率。

6.3 PySlowFast 开源框架

论文最重要的"工程遗产"是 PySlowFast 框架 #slowfast2019

  • 仓库:https://github.com/facebookresearch/SlowFast
  • 许可证:Apache 2.0
  • 状态:活跃维护(截至 2024 年)
  • 提供:完整训练 pipeline、K400/K600/Charades/AVA 复现脚本、Model Zoo 预训练权重、可视化工具

PySlowFast 已经成为视频理解领域事实标准框架,是后续 X3D #x3d2020、MViT #mvit2021 等工作的代码基础。

6.4 复现建议

复现 SlowFast 的关键 tips

  • 多 GPU 训练:至少 8 GPU(论文用 128)。
  • BN statistics 范围:必须用 8 clips 内的 BN statistics,不能用 global BN(这与图像 ResNet 不同)。
  • warmup 关键:8k iter warmup 对稳定训练很重要,否则前期 loss 会发散。
  • AMP 加速:可以用 mixed precision (fp16) 加速训练,论文附录没明确说但社区已广泛使用。
  • checkpoint 间隔:建议每 5 epoch 保存一次,用于恢复中断的训练。

6.5 失败案例与局限

虽然 SlowFast 在大多数类别上都超过 Slow-only,但 AVA 上有 3 个类别反而略低:

类别AP 变化可能原因
answer phone-0.1数据样本少,定义模糊
lie/sleep-0.2动作慢,Fast 通道优势小
shoot-0.4需要长程上下文

整体上这些下降幅度都 < 0.5 AP,远小于 5.2 mAP 的总体提升。这反映了一个普遍现象:Fast 通道对周期性/快速动作帮助大,对慢速/静态动作帮助小

未在论文中明确讨论的局限

  • 训练资源需求高:128 GPU 训练 from scratch 是一道高墙,单机复现要小心调整 LR。
  • 超参依赖经验:φ=1/8, ω=8, τ=16 是经验值,没有强理论保证。
  • 对极细粒度时间定位不擅长:Fast 通道擅长"模式",对"时刻点"不敏感。
  • 无端到端时空定位能力:AVA 任务需要外接 Faster R-CNN 做 person detection,SlowFast 只做 action classification。
Part 7
影响与启发:SlowFast 在视频识别谱系中的位置

7.1 与 3D CNN 演进的对比

方法年份核心思路K400 top-1特征
C3D20153×3×3 3D kernelN/A (UCF/HMDB)统一时空
I3D2017Inception inflated to 3D72.1 (ImageNet)统一时空
Two-Stream2014RGB + optical flow双模态同构
R(2+1)D20182D + 1D 分解72.0 (scratch)分解卷积
S3D2018top-heavy 拓扑69.4 (scratch)拓扑分离
Nonlocal R10120183D + non-local77.7 (ImageNet)长程依赖
SlowFast2019异构双速通道79.8 (scratch)时间速度异构
X3D2020渐进式扩展 2D79.1 (scratch)多轴扩展
MViT2021多尺度 Transformer81.3 (scratch)多尺度 attention

SlowFast 在这条谱系中扮演了"思想转折"的角色:它揭示了 3D CNN"对称处理空间-时间"的局限,提出异构双速作为替代范式。这影响了后续所有视频识别架构的设计哲学。

7.2 后续工作的直接继承

  • X3D #x3d2020:Feichtenhofer 本人(SlowFast 一作)2020 年的延续工作,沿时间/空间/宽度/深度/帧率等多个轴逐步扩展一个 tiny 2D 网络到 video 域。在 K400 上达到 79.1% top-1,FLOPs 比 SlowFast 更少。
  • MViT #mvit2021:Haoqi Fan(SlowFast 二作)2021 年提出的多尺度视觉 Transformer,把 SlowFast 的"多尺度时间建模"思想引入 Transformer。在 K400 上达到 81.3%,无需大规模预训练。
  • Video Swin Transformer #videoswin2022:层级化视频 Transformer,借鉴 SlowFast 的 hierarchical 特征设计。
  • Audiovisual SlowFast:把双速思想扩展到音视频融合。

7.3 可操作启发

从 SlowFast 我们能学到哪些设计原则?

启发 1:异构设计 > 统一设计。当数据有不同性质的子模态时(运动 vs 外观、空间 vs 时间),用专门的网络处理不同的子模态,比一个统一网络更有效。
启发 2:轻量不等于弱。Fast 通道只有 1/8 通道、20% 计算,但它对总精度的贡献可达 3-5%。这说明"小而专"的网络比"大而泛"的网络更高效。
启发 3:可学习表示 > 手工设计。Fast 通道的 grayscale / time difference 都比 optical flow 好,说明让网络自己学运动表示比喂给它人为设计的光流更好。
启发 4:生物学类比有时能指导工程。P/M cells 的比例 (80/20) 给了 φ=1/8 一个优美的理论支撑。在其他领域,也可以从神经科学/认知科学找灵感。

7.4 适合阅读的下一篇文章

SlowFast 不仅是一篇工程 paper,它代表了一种设计哲学:承认数据的内在非对称性,把非对称性作为设计输入而不是包袱。这个思想在 3D CNN 时代是颠覆性的,在 Transformer 时代也仍在被借鉴。

References
参考来源

核心论文

  • SlowFast 论文:Feichtenhofer et al. 2019,ICCV 2019 Oral
  • 代码:https://github.com/facebookresearch/SlowFast
  • 后续:X3D (CVPR 2020), MViT (ICCV 2021), Video Swin (CVPR 2022)

参考来源

  • Feichtenhofer, C., Fan, H., Malik, J., & He, K. (2019). SlowFast Networks for Video Recognition. ICCV 2019. arXiv:1812.03982 · PySlowFast Code
  • Carreira, J., & Zisserman, A. (2017). Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset. CVPR 2017. arXiv:1705.07750
  • Simonyan, K., & Zisserman, A. (2014). Two-Stream Convolutional Networks for Action Recognition in Videos. NIPS 2014. arXiv:1406.2199
  • Tran, D., Wang, H., Torresani, L., Ray, J., LeCun, Y., & Paluri, M. (2018). A Closer Look at Spatiotemporal Convolutions for Action Recognition. CVPR 2018. arXiv:1711.11248
  • Xie, S., Sun, C., Huang, J., Tu, Z., & Murphy, K. (2018). Rethinking Spatiotemporal Feature Learning: Speed-Accuracy Trade-offs in Video Classification. ECCV 2018. arXiv:1712.04851
  • Wang, X., Girshick, R., Gupta, A., & He, K. (2018). Non-local Neural Networks. CVPR 2018. arXiv:1711.07971
  • Kay, W., et al. (2017). The Kinetics Human Action Video Dataset. arXiv:1705.06950
  • Carreira, J., et al. (2018). A Short Note about Kinetics-600. arXiv:1808.01340
  • Sigurdsson, G. A., Varol, G., Wang, X., Farhadi, A., Laptev, I., & Gupta, A. (2016). Hollywood in Homes: Crowdsourcing Data Collection for Activity Understanding. ECCV 2016. arXiv:1604.01753
  • Gu, C., et al. (2018). AVA: A Video Dataset of Spatio-temporally Localized Atomic Visual Actions. CVPR 2018. arXiv:1705.08421
  • He, K., Zhang, X., Ren, S., & Sun, J. (2016). Deep Residual Learning for Image Recognition. CVPR 2016. arXiv:1512.03385
  • Ren, S., He, K., Girshick, R., & Sun, J. (2015). Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks. NIPS 2015. arXiv:1506.01497
  • Lin, T.-Y., Dollár, P., Girshick, R., He, K., Hariharan, B., & Belongie, S. (2017). Feature Pyramid Networks for Object Detection. CVPR 2017. arXiv:1612.03144
  • Feichtenhofer, C. (2020). X3D: Expanding Architectures for Efficient Video Recognition. CVPR 2020. arXiv:2004.04730
  • Fan, H., Xiong, B., Mangalam, K., Li, Y., Yan, Z., Malik, J., & Feichtenhofer, C. (2021). Multiscale Vision Transformers. ICCV 2021. arXiv:2104.11227
  • Weiss, Y., Simoncelli, E. P., & Adelson, E. H. (2002). Motion illusions as optimal percepts. Nature Neuroscience.
  • Livingstone, M., & Hubel, D. (1988). Segregation of form, color, movement, and depth: anatomy, physiology, and perception. Science.
  • Ruderman, D. L. (1994). The statistics of natural images. Network: Computation in Neural Systems.
  • Huang, J., & Mumford, D. (1999). Statistics of natural images and models. CVPR 1999.
  • He, D., et al. (2018). StNet: Local and Global Spatial-Temporal Modeling for Action Recognition. AAAI 2019.
  • Liu, Z., et al. (2022). Video Swin Transformer. CVPR 2022. arXiv:2106.13230