ステータス: ドラフト (2026-10-13)。 論文の数値は原典を開き、条件とともに確認しました。実際に試した内容はノートPCのCPUでのnumpyのサンプル(
code/06_video_cost.py、1秒未満)です。この系統の動画モデルを卓球の動画に適用したことはありません(未実測)。シリーズ「ビジョンモデルを読む 2」第6回。前回の記事: オプティカルフローとRAFT. 2D畳み込みとViTについては ビジョンモデルを読む 1をご覧ください。
目次
- 1. 直感: 静止画1枚ではわからないこと
- 2. 3D畳み込み: C3DとI3D
- 3. 2つのストリーム: Two-streamとSlowFast
- 4. アテンション: TimeSformer
- 5. 実際に試してみる
- 6. 学習方法: ラベルなし、動画のマスキングと予測
- 7. 論文の数値
- 8. 制限事項
- 9. 自プロジェクトとの繋がり
- 参考文献
1. 直感: 静止画1枚ではわからないこと
静止画1枚であれば「ラケットを持った選手」はわかりますが、その選手が 打っている最中なのか、打った後なのか、打つために準備している最中なのかはわかりません。「ドアを開けているところ」と「ドアを閉めているところ」は、静止画1枚では同じシーンになります。動画モデルは、この違い、すなわち 時間的な順序に含まれる情報を学習しようとします。
アプローチは大別して3つあります。
- 3D畳み込み: フィルタを幅・高さに加え、時間方向にも拡張する。
- 2つのストリーム: 形状を見るパスと動きを見るパスに分ける。
- アテンション (attention): トークンが時間と空間を行き来しながら互いに参照し合う。
いずれの方法でも、学習の大部分は 教師あり学習です。「このクリップは『卓球のプレイ』」といった動画単位のラベルで分類を学習します。代表的なデータセットはKinetics(約24万件の学習動画、400種類の行動)です。最後のセクションで紹介するVideoMAEのみ、ラベルなしで事前学習を行います。
2. 3D畳み込み: C3DとI3D
C3D: 時間方向も3フレーム
C3D (2015)は、畳み込みフィルタを 3×3 から 3×3×3 に拡張しました。16フレーム × 112×112 のクリップを入力し、時間深度を 1、3、5、7 と変更して検証した結果、3が最も優れていました(論文ですが、狭い範囲でのみ比較したと著者らは言及しています)。スポーツ動画110万件(Sports-1M、487種類)を用いてゼロから教師あり学習を行いました。
I3D: 画像モデルを膨らませてスタートする
3D畳み込みの弱点は ゼロから学習しなければならない点です。画像にはImageNetで十分に学習された重みがありますが、動画にはそれに匹敵するスタート地点がありませんでした。I3D (2017)は、2Dの重みを3Dに変換するシンプルな手法を提案しました。
2Dフィルタを時間方向にN回コピーし、Nで割る。
このように作成した3Dフィルタは、 同じフレームが繰り返される「単調な動画」において、元の2Dフィルタと全く同じ出力を返します。画像モデルが獲得した知識をそのまま引き継いだ状態でスタートし、動きについては学習を通じて習得します。
低コストな代替手法: チャネルシフト (TSM)
3D畳み込みではパラメータ数と計算量が3倍に増加します。TSM (2019)は、2D畳み込みネットワークをそのまま維持し、特徴量チャネルの ⅛ を1フレーム前へ、 ⅛ を1フレーム後へ シフトさせるだけ の処理を行います。乗算は一切増加しないにもかかわらず、周辺フレームの情報が混ざり合います。 後方へしかシフトしない(過去のフレームのみを使用する)バージョンを別途用意することで、リアルタイムストリーミングへの適用も可能にしました(論文)。10本目の記事のE2E-Spotで使用されているGSMは、このシフトにおいて「何をどれだけシフトさせるか」まで学習できるようにしたバリエーションです。
3. 2つのストリーム: Two-streamとSlowFast
Two-stream (2014) は、静止画1枚を見るパス(空間ストリーム)と、第5回の記事で扱うオプティカルフローを10枚積み重ねて見るパス(時間ストリーム)を個別に学習させ、最終的にスコアを平均します。時間ストリーム単体でも空間ストリームより高精度でした(UCF-101で83.7%対73.0%、論文)。動きが行動認識においてそれだけ重要であることを示していますが、オプティカルフローを事前に計算しておく必要があるため処理が低速です。
SlowFast (2019) は、オプティカルフローを使用せずに2つのストリームを構築します。
- 遅いパス: フレームを間引きながら(例: 16フレームに1回)取得しつつ、多くのチャネルを使用して 何が存在するかを捉える。
- 速いパス: フレームを8倍の高密度(α=8)で取得しつつ、チャネル数を ⅛(β=1/8)に削減して どのように動いているかを捉える。計算量は全体の約20%である。
- 速いパスの特徴量を複数のレイヤーから遅いパスへと流れ込ませる( lateral connection )。
霊長類の視覚系において、形状を処理する細胞と動きを処理する細胞が分離しているという観察から着想を得たと記載されています。何よりも、 ImageNetの事前学習なしでゼロから Kineticsのみを用いて学習を行いました。事前学習を行っても差は ±0.3%ポイントにとどまりました(論文)。
4. 応援: TimeSformer
ViTを動画に適用すると、トークン数が「フレーム数 × 1フレームあたりのパッチ数」分だけ生成されます。8フレーム × 196パッチであれば1,568個になります。すべてのトークンがすべてのトークンを参照する 結合(joint) アテンションは、トークン数の二乗に比例してコストが増加します。
TimeSformer (2021)は、1つのブロック内でアテンションを2つに分割します(divided)。
- 時間アテンション: 各パッチが 同じ位置にある異なるフレームのパッチのみを参照する。
- 空間アテンション: その結果をもとに、各パッチが 同じフレーム内の他のパッチのみを参照する。
このように分割することで計算量が大幅に削減され、精度はむしろわずかに向上しました(下表)。ImageNetで事前学習したViTを起点とし、動画のラベルでファインチューニングを行います。
5. 実際に試してみる
code/06_video_cost.py の出力です(code/06_video_cost.out.txt).
I3Dの膨張。 12×12の画像を5回繰り返した「単調な動画」に対し、3×3フィルタを3回コピーして3で割った 3×3×3 フィルタを適用しました。
멈춘 영상에서 3D 출력과 2D 출력의 최대 차이: 1.33e-15
움직이는 영상에서는 차이가 생긴다(평균 절댓값 1.644) — 이 차이를 학습이 키워 움직임 필터가 된다
差分が 10⁻¹⁵ であることは、浮動小数点数の丸め誤差にすぎないことを意味しています。完全に一致しています。
アテンションの計算量。 1つのレイヤー内でトークンのペアを比較する回数を計測しました(16×16パッチ、224解像度の場合、1フレームあたり196パッチ)。
| 入力 | トークン | 結合型 | 時間・空間分割型 | 倍率 |
|---|---|---|---|---|
| 8フレーム | 1,568 | 2.5M | 0.32M | 7.7倍 |
| 16フレーム | 3,136 | 9.8M | 0.66M | 14.8倍 |
| 96フレーム | 18,816 | 354.0M | 5.49M | 64.4倍 |
フレーム数が増えるほど差が広がります。TimeSformer-Lが96フレームを処理できるのは、この分割手法のおかげです。
6. 学習方法: ラベルなし、動画のマスキングと予測
VideoMAE: 90%を、チューブ単位で
第3回の記事で紹介したMAEを動画に拡張したのがVideoMAE (2022)です。違いは2つあります。
- より多くマスクする。 画像は75%、動画は 90%(95%でも良好でした)。隣接フレームがほぼ同一であるため、動画は画像よりもはるかに多くの冗長性を含んでいます。
- チューブ単位でマスクする。 ある位置をマスクする場合、 すべてのフレームにおける同じ位置をマスクする。2フレーム × 16×16ピクセルの塊(キューブ)を1つのトークンとして扱います。
チューブ単位でマスクする理由を実際に検証しました。16フレーム × 196パッチにおいて、マスクされたパッチの直前または直後のフレームにおける 同じ位置が見えている割合です。
가림 75% · 프레임마다 따로 : 0.415
가림 90% · 프레임마다 따로 : 0.180
가림 95% · 프레임마다 따로 : 0.092
가림 75–95% · 튜브(모든 프레임 같은 자리): 0.000
옆 프레임 같은 자리를 그대로 베낀 오차 0.0120 (아무것도 모르고 0 으로 채우면 1.0009)
フレームごとに個別にマスクすると、90%をマスクしても18%のパッチは隣接フレームの同じ位置を コピーするだけで ほぼ完璧に(誤差0.012、ランダムに穴埋めした場合は1.0)予測できてしまいます。モデルは「コピーする」という簡単な手段を学習してしまい、動きや構造を学習しなくなります。チューブ単位でマスクすることで、この近道を根本的に断ち切ります。
損失関数はMAEと同じです。マスクされたキューブの(正規化された)ピクセル値を二乗誤差で予測します。エンコーダは可視化された約10%のトークンのみを処理します。
V-JEPA: ピクセルの代わりに特徴量を予測する
V-JEPA (2024)は、マスクされた部分の ピクセル の代わりに、ゆっくり追従する教師エンコーダ(第2回の記事のEMA教師)がその部分に対して出力する 特徴量を予測させます(L1損失)。ピクセルの細部を予測することにリソースを費やさないという考え方です(第3回の制限事項につながります)。事前学習済みの画像モデルも、テキストも、不正解の予測も、ピクセルの復元も使用していません(論文)。
7. 論文の数値
Kinetics-400におけるtop-1精度です。「view」はテスト時に1つの動画から切り抜くクリップ数 × 空間方向の切り抜き数です。
| モデル | 精度 | 条件 (論文) |
|---|---|---|
| I3D (画像 + オプティカルフローの2ストリーム) | 71.6 → 74.2 | ImageNetの膨張なし → あり。入力は64フレーム、224px |
| TSM (ResNet-50) | 74.1 | 8フレーム、10クリップ。2D基準 (TSN) 70.6 |
| SlowFast 16×8 R101+NL | 79.8 | 事前学習なし、30 view、1 viewあたり234 GFLOPs |
| TimeSformer / -L | 78.0 / 80.7 | ImageNet-21K事前学習、8×224² / 96×224²、3 view。計算量 0.59 / 7.14 TFLOPs |
| VideoMAE ViT-L / ViT-H | 85.2 / 86.6 | ラベルなしで1,600エポック事前学習後にファインチューニング、16フレーム、5×3 view。320px・32フレームのViT-Hは87.4 |
| V-JEPA ViT-H/16 | 82.0 | エンコーダを凍結し、アテンションプローブのみを学習(ファインチューニングではない) |
TimeSformerのアテンション手法の比較(ImageNet-21K事前学習)は以下の通りです(論文)。
| アテンション方式 | Kinetics-400 | Something-Something v2 |
|---|---|---|
| 空間のみ(時間を無視) | 76.9 | 36.6 |
| 結合型 | 77.4 | 58.5 |
| 時間・空間分割型 | 78.0 | 59.5 |
Kineticsでは時間を無視しても 76.9% という点に注目してください。Kineticsの多くの行動は、シーン(プール、卓球台)を見るだけで予測できます。一方、Something-Somethingは「何かを左から右へスライドさせる」といった 動きそのものが答えであるため、時間を無視すると36.6%へと性能が崩壊します。卓球の判定は明らかに後者に近いです。
学習コストも異なります。ImageNet-1Kの事前学習条件において、Kineticsの学習にはTimeSformerが416 GPU時間、SlowFast R50が3,840時間、I3Dが1,440時間かかりました(データセンター向けGPU基準、TimeSformer論文)。
VideoMAEのデータ効率。 同じViT-Bを各データセットの学習動画のみを用いて事前学習した場合の結果です(論文)。
| データセット(学習動画数) | ゼロからの教師あり学習 | コントラスト学習 (MoCo v3) | VideoMAE |
|---|---|---|---|
| UCF101(9.5千) | 51.4 | 81.7 | 91.3 |
| HMDB51(3.5千) | 18.0 | 39.2 | 62.6 |
| Something-Something v2 | 32.6 | 54.2 | 69.6 |
動画が数千件しかない小さなデータセットで、その差が最も大きくなります(UCF101・HMDB51の実験は75%マスキングで事前学習しました)。また、Something-Somethingの動画4.2万件で事前学習した側(68.7)が、Kineticsの24万件で事前学習した側(68.5)よりもSomething-Somethingにおいて優れていました。論文はこれを、「事前学習データは量よりも、検証する領域との類似度が重要である」という根拠として挙げています。
8. 制限事項
- 分類は「いつ」を教えてくれない。 このアプローチのモデルは、クリップ全体に1つのラベルを付与します。「この2秒以内に打球がある」ことは分かっても、「何番目のフレームか」は分かりません。フレーム単位の時刻特定については、第10回で精密なイベント検出として扱います。
- 双方向はリアルタイムではない。 3D畳み込みやアテンションは通常、クリップの過去と未来を同時に見ます。リアルタイム処理では未来が存在しないため、TSMの一方向シフトのように因果的に変更するか、短い遅延(先読み)を受け入れる必要があります。
- 小さな物体は解像度により消えてしまう。 224pxに縮小されたフレームでは、卓球のボールが1ピクセルにも満たないことがあります。
9. 我々のプロジェクトとのつながり
- 我々のボール検出器は、①の非常にシンプルな形態である。 BlurBall・WASBは連続する3フレームをチャンネル方向に積み重ね(9チャンネル)、2D畳み込みネットワークに入力します(TT Scoreモデル解剖編の第2回)。これは時間を最初のレイヤーで一度に混ぜ合わせる「早期結合(Early Fusion)」です。第9回でオクルージョンを扱うTOTNetは、ここに3D畳み込みを追加します。
- 我々の学習型バウンド判定器は、ピクセルではなく軌跡に対して時間方向の畳み込みを行う。 ボールの座標や速度など9つの特徴量の時系列データに対して1D畳み込みを用いるため、計算量が非常に小さくなります(第4回、2026-10-13の研究ノート基準で進行中の研究)。
- 動画単位の行動認識はコーチング向けの候補。 「フォアハンドドライブか、ブロックか」といったストローク分類は、このアプローチのモデルが適している課題です。現在のコーチングは姿勢(関節)ベースであり、動画モデルはまだ検証していません(未実測)。
TTの一言。 「打つ前」と「打った後」は、1枚の写真だけでは同じに見えます。しかし、フレームをバラバラに隠して当てさせると、モデルは隣のフレームをカンニングするずる賢さを先に覚えてしまいます。チューブ状にマスキングすることは、そのカンニングを防ぐための仕組みです。
参考文献
- Tran et al., Learning Spatiotemporal Features with 3D Convolutional Networks(C3D), ICCV 2015. https://arxiv.org/abs/1412.0767
- Simonyan & Zisserman, Two-Stream Convolutional Networks for Action Recognition in Videos, NeurIPS 2014. https://arxiv.org/abs/1406.2199
- Carreira & Zisserman, Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset(I3D), CVPR 2017. https://arxiv.org/abs/1705.07750
- Lin, Gan, Han, TSM: Temporal Shift Module for Efficient Video Understanding, ICCV 2019. https://arxiv.org/abs/1811.08383
- Sudhakaran et al., Gate-Shift Networks for Video Action Recognition(GSM), CVPR 2020. https://arxiv.org/abs/1912.00381
- Feichtenhofer et al., SlowFast Networks for Video Recognition, ICCV 2019. https://arxiv.org/abs/1812.03982
- Bertasius, Wang, Torresani, Is Space-Time Attention All You Need for Video Understanding?(TimeSformer), ICML 2021. https://arxiv.org/abs/2102.05095
- Tong et al., VideoMAE: Masked Autoencoders are Data-Efficient Learners for Self-Supervised Video Pre-Training, NeurIPS 2022. https://arxiv.org/abs/2203.12602
- Bardes et al., Revisiting Feature Prediction for Learning Visual Representations from Video(V-JEPA), TMLR 2024. https://arxiv.org/abs/2404.08471
- サンプルコードと出力:
code/06_video_cost.py,code/06_video_cost.out.txt