Video Understanding
動画理解とは、動画内で起きる動作やイベント、その順序を時間軸に沿って解釈するAIです。タスク、モデルファミリー、コードについて解説します。
動画理解は、動画内で時間とともに起きることを解釈するコンピュータービジョンの分野です。どの物体や人物が存在するか、何をしているか、イベントがいつ始まりいつ終わるか、あるイベントがどのように別のイベントにつながるかを扱います。画像認識は各フレームを個別に分析しますが、動画理解モデルは動きと時間的な順序をモデル化します。多くの問いに答えるには、これらの情報が必要です。1枚のフレームには椅子に座りかけている人物が写っていても、その前後のフレームがなければ、その人物が座ろうとしているのか、立ち上がろうとしているのかは分かりません。この分野は、短いクリップへのラベル付けから、数時間の映像についての自由形式の質問への回答まで多岐にわたります。
主なタスク#
- 行動認識: 「腕立て伏せ」や「転倒」などのラベルを、短く切り出したクリップに1つ割り当てます。
- 時間的行動ローカライズ: 長く未編集の動画で各行動の開始時刻と終了時刻を特定します。時空間行動検出では、各フレーム内の行為者もバウンディングボックスで囲みます。
- 物体追跡: 各物体をフレーム間で一貫したIDで追跡します。これは、カウント、速度測定、軌跡分析の基盤となります。
- 動画セグメンテーション: フレーム間で一貫性を保つ、物体やシーン領域のピクセルマスクを生成します。
- 動画キャプション生成と質問応答: クリップをテキストで説明するか、「車が停止する前に運転手は何をしましたか?」といった質問に回答します。
- 時間的グラウンディング: 「ゴールキーパーがボールをキャッチする」などの文に一致する瞬間を特定します。このタスクはモーメント検索とも呼ばれます。
- 異常検知: 転倒、けんか、逆走車両などの異常なイベントを検出します。
動画モデルの仕組み#
動画モデルは、物体がどのように見えるかという外観と、物体がどのように変化するかという動きを捉える必要があります。2ストリームネットワークは、RGBフレームとオプティカルフローを別々のブランチで処理します。3D畳み込みニューラルネットワーク(CNN)は、高さ、幅、時間をまとめて畳み込みます。Temporal Shift Moduleは、各層のチャネルの一部を隣接フレームへシフトすることで、計算量を増やさずに2D CNNへ時間方向のモデル化を導入します。動画Transformerは時空間パッチ全体に自己注意を適用します。TimeSformerは、時間方向と空間方向に別々の段階で注意を適用し、これを実用的な計算量で実現しました。ラベルなし動画を使った自己教師あり事前学習では、汎用性の高いエンコーダーを作成できます。MetaのV-JEPA 2は、マスクされた領域の表現を予測することで、インターネット上の動画100万時間以上から学習しました。動きの違いが主な判別要素となる手と物体の動作のベンチマークであるSomething-Something v2では、top-1精度77.3%を達成しました。動画言語モデルはフレームをサンプリングしてそれぞれを視覚トークンにエンコードし、それを大規模言語モデル(LLM)に渡して、テキストで質問に回答します。
システムに必要な出力によって、使用するモデルの種類がほぼ決まります。
物体トラックからイベントを把握する#
実用的なシステムの多くは、トラックを基に推論して動画を理解します。検出器が各フレーム内の物体を見つけ、トラッカーがそれらを軌跡として関連付け、ルールやモデルが軌跡を、区域への進入、ラインの通過、長時間の停止といったイベントに変換します。Ultralyticsの物体カウントソリューションは、YOLO26のトラッキング機能を使ってこの方法で動作します。追跡対象の物体がラインを通過すると1回だけカウントし、連続するフレームでの位置から移動方向を記録します。
import cv2
from ultralytics import solutions
# Count people (COCO class 0) crossing a horizontal line through the middle of the 640x360 frame
counter = solutions.ObjectCounter(model="yolo26n.pt", region=[(0, 180), (640, 180)], classes=[0])
cap = cv2.VideoCapture("https://github.com/ultralytics/assets/releases/download/v0.0.0/solutions_ci_demo.mp4")
while True:
success, frame = cap.read()
if not success:
break
results = counter(frame)
# A crossing and its direction come from each person's track, so they exist only across frames
print(f"Crossed moving down: {results.in_count}, moving up: {results.out_count}")2つのカウントは、単一のフレームには写らないイベントを表します。歩いて降りている人と歩いて上っている人を区別するには、少なくとも同じ人物の2つの位置が必要です。
動画理解と関連用語#
- 画像認識: 単一画像内の内容を分類または検出します。動画の各フレームに対して実行すると、ID、動き、順序を考慮しないフレームごとの結果が得られます。
- 複数物体追跡(MOT): 物体が何をしているかを解釈せず、フレーム間でIDを維持する、動画理解の構成要素の1つです。
- 動画生成: テキストや画像から新しい動画を生成する、動画理解とは逆方向のタスクです。ただし、どちらも時間とともにシーンがどう変化するかをモデル化します。
- マルチモーダルAI: 動画を音声、字幕、その他のデータと組み合わせます。サウンドトラックや音声に重要な情報が含まれる場合に役立ちます。
用途#
- スポーツ分析: 選手やボールを追跡して速度、ボール支配率、フォーメーションを測定し、試合全体の録画からハイライトを特定します。
- 交通・スマートシティ: 車両や歩行者をカウントし、速度を測定して、逆走や停車した車両を検出します。
- 小売・安全監視: 行列の長さを測定し、介護施設での転倒を検知し、立ち入り制限区域への進入を検出します。
- メディア・コンテンツモデレーション: 大規模な動画ライブラリに検索用インデックスを付け、ポリシーに違反するアップロードを検出します。
- ロボティクスと自動運転車: 歩行者や他の車両が次にどこへ移動するかを予測します。
課題#
動画では、画像1枚あたりの処理コストがそのまま増大します。フレームレート30fpsの動画は1分間に1,800フレームを含むため、モデルは多くの場合、クリップごとに8~64フレームを疎にサンプリングしますが、それでも短いイベントを見逃す可能性があります。長い動画はメモリとコンテキスト長を圧迫し、行動の正確な開始時刻と終了時刻のラベル付けには、画像のラベル付けよりはるかに長い時間がかかります。GoogleのGemini APIは動画を1秒あたり1フレームでサンプリングし、デフォルトの低メディア解像度では動画1秒あたり約100トークンを使用します。そのため、コンテキストウィンドウが100万トークンのモデルでは、最大3時間の動画、または高解像度で1時間の動画を処理できます。










