TT Lab
ブログ

한국어 English 日本語 中文

はじめる
ブログ

ブログ

動画モデル: 3D畳み込み、2つのストリーム(SlowFast)、アテンション(TimeSformer) — そして動画におけるマスキングと予測(VideoMAE)

ステータス: ドラフト (2026-10-13)。 論文の数値は原典を開き、条件とともに確認しました。実際に試した内容はノートPCのCPUでのnumpyのサンプル(code/06_video_cost.py、1秒未満)です。この系統の動画モデルを卓球の動画に適用したことはありません(未実測)。シリーズ「ビジョンモデルを読む 2」第6回。前回の記事: オプティカルフローとRAFT. 2D畳み込みとViTについては ビジョンモデルを読む 1をご覧ください。

目次

1. 直感: 静止画1枚ではわからないこと

静止画1枚であれば「ラケットを持った選手」はわかりますが、その選手が 打っている最中なのか、打った後なのか、打つために準備している最中なのかはわかりません。「ドアを開けているところ」と「ドアを閉めているところ」は、静止画1枚では同じシーンになります。動画モデルは、この違い、すなわち 時間的な順序に含まれる情報を学習しようとします。

アプローチは大別して3つあります。

시간을 다루는 세 방식 ① 3D 합성곱 C3D · I3D 필터가 가로·세로·시간을 함께 훑는다(3×3×3) I3D: 2D 필터를 시간으로 N번 복사 ÷ N 으로 출발 → 멈춘 영상에서 2D 와 같은 답 값싼 변형: TSM(채널 일부를 앞뒤 프레임으로 밀기) ② 두 갈래 Two-stream · SlowFast 느린 길: 프레임 드문드문, 채널 많음 빠른 길: 프레임 8배 촘촘, 채널 ⅛ 느린 길 = 모양, 빠른 길 = 움직임(계산은 약 20%) ③ 주의(attention) TimeSformer · ViViT a) 시간: 같은 자리의 다른 프레임과 비교 (프레임 4장의 같은 칸) b) 공간: 같은 프레임의 다른 자리와 비교 (한 프레임 안의 이웃 칸) 한 블록에서 a → b 순서. 한꺼번에보다 훨씬 싸다
画像: 3D畳み込み、2つのストリーム、時間・空間アテンション
  1. 3D畳み込み: フィルタを幅・高さに加え、時間方向にも拡張する。
  2. 2つのストリーム: 形状を見るパスと動きを見るパスに分ける。
  3. アテンション (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つのストリームを構築します。

霊長類の視覚系において、形状を処理する細胞と動きを処理する細胞が分離しているという観察から着想を得たと記載されています。何よりも、 ImageNetの事前学習なしでゼロから Kineticsのみを用いて学習を行いました。事前学習を行っても差は ±0.3%ポイントにとどまりました(論文)。

4. 応援: TimeSformer

ViTを動画に適用すると、トークン数が「フレーム数 × 1フレームあたりのパッチ数」分だけ生成されます。8フレーム × 196パッチであれば1,568個になります。すべてのトークンがすべてのトークンを参照する 結合(joint) アテンションは、トークン数の二乗に比例してコストが増加します。

TimeSformer (2021)は、1つのブロック内でアテンションを2つに分割します(divided)。

  1. 時間アテンション: 各パッチが 同じ位置にある異なるフレームのパッチのみを参照する。
  2. 空間アテンション: その結果をもとに、各パッチが 同じフレーム内の他のパッチのみを参照する。

このように分割することで計算量が大幅に削減され、精度はむしろわずかに向上しました(下表)。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つあります。

チューブ単位でマスクする理由を実際に検証しました。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. 制限事項

9. 我々のプロジェクトとのつながり

TTの一言。 「打つ前」と「打った後」は、1枚の写真だけでは同じに見えます。しかし、フレームをバラバラに隠して当てさせると、モデルは隣のフレームをカンニングするずる賢さを先に覚えてしまいます。チューブ状にマスキングすることは、そのカンニングを防ぐための仕組みです。

参考文献

ログインするといいねできます

コメント

まだコメントはありません。

ログインするとコメントできます