動画理解を1から — フレームの束から時間の理解へ
動画は「画像がたくさん」ではない。何枚をどう選ぶか(サンプリング)、フレーム同士をどう混ぜるか(時間注意)、長い動画をどう縮めるか(圧縮)の3つの問いに分けて、前提知識ゼロから式・動く図・コードで解説する。
Is Space-Time Attention All You Need for Video Understanding? (TimeSformer)
一次資料 — この記事の根拠
この解説の公開 2026-08-27
Is Space-Time Attention All You Need for Video Understanding? (TimeSformer)arXiv:2102.05095論文ページ·PDFViViT: A Video Vision TransformerarXiv:2103.15691論文ページ·PDF
Flamingo: a Visual Language Model for Few-Shot LearningarXiv:2204.14198論文ページ·PDF
動画は「画像がたくさん」ではない
画像を読めるモデルがあるのだから、動画は1秒ずつ切って何枚も入れればいい — 最初は誰でもそう考えます。実際にやると2つの壁にぶつかります。
1つ目は量の壁です。30fpsの動画は1分で1800枚。1枚を画像Transformerに通すと数百個のトークンになりますから、1分ぶんをそのまま渡すだけで数十万トークンに膨れます。文脈長がどれだけ伸びても、この掛け算には追いつきません。
2つ目は、こちらが本質的なのですが、順序の壁です。「コップを置く」と「コップを取る」は、フレームをバラして袋に入れてしまえば中身が同じで、違うのは並び順だけ。フレームを平均して1本のベクトルにする方式では、この2つを原理的に区別できません。動画を理解するとは、写っている物を当てることではなく、物がどう変わったかを読むことです。
だから動画理解は、次の3つの問いに分解できます。この記事はこの順に進みます。
- サンプリング: 何枚のフレームを、どこから取るか
- 時間注意: 取ったフレーム同士を、どう混ぜるか
- 圧縮: 長い動画を、どこまで縮められるか
画像1枚をどうトークンに変えるかは論文解説: ViT、そのトークンを言語モデルにどう繋ぐかはVLMの成立と現在で扱っています。ここではその先、時間軸が加わってから始まる話に絞ります。
比喩: 2時間の映画を電話で伝える
友人に2時間の映画のあらすじを電話で説明する場面を思い浮かべてください。全カットを読み上げる時間はないので、あなたは自然に3つの判断をしています。どの場面を選ぶか(均等に10分おきか、話が動いた瞬間だけか)、順番をどう伝えるか(バラバラの順で話せば意味が通じない)、長い場面をどう縮めるか(30分の会議シーンを一言にまとめる)。サンプリング・時間注意・圧縮は、この3つの判断に機械で名前を付けたものにすぎません。
サンプリング: 何枚を、どこから取るか
いちばん素朴で、いまでも最もよく使われるのが均一サンプリングです。動画全体を等間隔にN分割し、1枚ずつ取ります。
は動画の総フレーム数、 は取り出したい枚数、 は 番目に取り出すフレームの位置、 は小数の切り捨てです。要するに「動画の長さがどうであれ、必ずN枚に均等割りする」と言っているだけの式です。
利点は、入力の大きさが動画の長さによらず一定になること。GPUメモリの見積もりが立ち、バッチにまとめられます。欠点は、長い動画ほど間隔が粗くなること。2分の動画からN=8枚なら間隔は15秒で、1秒しかない出来事はほぼ確実に取りこぼします。
対する固定fpsサンプリングは「毎秒1枚」のように間隔のほうを固定します。見落としは減りますが、枚数が長さに比例します。10分で600枚、予算が先に破綻します。
学習時にはもう一工夫あります。動画をN区間に割り、各区間の中からランダムに1枚引く方式です。同じ動画でもエポックごとに違うフレームが出るので、データ拡張として効きます。推論時は区間の中央に固定するのが定番です。
もう一系統がキーフレーム抽出で、隣り合うフレームの類似度を見て変化の小さいところを捨てます。監視映像では効きますが、「3分間なにも起きなかった」ことが答えである質問には答えられなくなる。捨てたのは冗長性ではなく時間の長さの情報だった、ということが起きます。
時間注意: フレームをどう混ぜるか
選んだN枚をどう1つの理解にまとめるか。歴史的に3世代あります。
コメント
コメントにはログインが必要です