0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

V-JEPA 2で似た動画区間を探すツールを作ってみた

0
Posted at

目的

前回は、「V-JEPA2で何ができそうか試してみる」でV-JEPA 2を手元で動かし、動画の特徴表現を使った実験をしました。今回はその続きとして、実用的な道具にするとしたら何が作れるかを試しました。

作ったのは、見本にしたい2秒の動画区間を選ぶと、手元の動画から似た特徴を持つ区間を探すツール「JEPA-ScenePick」です。動画を説明させたり、特定の出来事を認識させたりするのではなく、「この場面に似た区間はどこにあるか」を探すことを狙っています。

コードとセットアップ方法はGitHubリポジトリに置いています。

使い方

Mac上でローカル動画を選び、検索用の索引を作ります。次に、見本にしたい動画の2秒区間を選んで検索すると、似ている候補が元動画の時刻とともに表示されます。候補を再生して見比べ、keep または hold を記録し、最後に参照リストをJSONで書き出せます。

大まかな流れは次のとおりです。

  1. 動画を選び、検索方式を決めて索引を作る
  2. 見本にしたい2秒区間を選んで検索する
  3. 表示された候補を再生して比較する
  4. 残したい候補を記録し、参照リストをJSONで書き出す

索引と検索に使う方式は、V-JEPA 2とColor + Motionから選べます。Color + Motionは、OpenCVで色の分布とフレーム間の差を使う軽量なベースラインです。V-JEPA 2の準備ができていない状態で、利用できる方式へ自動で切り替わることはありません。

似た場面をどう探すか

動画から2秒の窓を作り、0.5秒ずつ開始位置をずらしながら特徴を抽出します。V-JEPA 2を選んだ場合は、各窓から64フレームを取り出してエンコーダーに入力し、出力トークンを平均して窓ごとの特徴ベクトルにまとめます。Color + Motionでは8フレームを使います。抽出した特徴量と動画の時刻などはSQLiteに保存します。

検索時には見本の2秒区間も、索引時と同じ方式で特徴量にします。その特徴と索引済みの窓の特徴をコサイン類似度で比べ、スコアの高い候補を並べます。同じ動画内で時刻が近い候補は間引き、隣り合う窓ばかりが結果を占めにくいようにしています。

V-JEPA 2は学習時に潜在表現を予測するモデルですが、このツールでは予測器の出力や予測誤差を異常度として使っていません。エンコーダーが出す特徴を取り出し、特徴ベクトル同士の近さを調べています。スコアは検索上の類似度であり、正解である確率ではありません。

UIとローカル処理

画面はHTML、CSS、JavaScriptで作り、Pythonの標準ライブラリによるHTTPサーバーから操作します。索引や検索の重い処理は同じPythonプロセス内の別スレッドで動き、同時に実行するジョブは1つです。特徴量や検索状態、候補の採否はローカルのSQLiteに保存されます。

UIサーバーは 127.0.0.1 で待ち受け、モデル推論もローカルで行います。依存パッケージのインストール時にはPyPIへの通信があります。検索時の推論先として外部クラウドを使う構成ではありません。

まず起動する

リポジトリのREADMEでは、Python 3.12または3.13を使う手順を案内しています。まずはV-JEPA 2のモデルを用意せず、Color + Motionで画面を試せます。

git clone https://github.com/daikubo-jb/JEPA-ScenePick.git
cd JEPA-ScenePick
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e .
jepa-search-ui --port 8765

ブラウザでローカル画面が開いたら動画を選び、索引を作成します。検索方式でColor + Motionを選び、2秒の見本区間から検索できます。

V-JEPA 2を使う場合は、PyTorchなどの追加依存に加えて、別途用意する jepa-risk-detection loader とローカルcheckpointが必要です。これらはこのリポジトリに含まれていないため、公開リポジトリをcloneしただけではV-JEPA 2の推論まで完了しません。READMEに記載された準備手順とライセンス上の条件を確認してください。V-JEPA 2のcheckpointも自動取得しません。

サンプルの合成動画で試すと、画像のようになります。右側に類似候補がリスト表示されるようになっています。
スクリーンショット 2026-10-12 10.42.56.png

試して分かったこと

合成のテスト用の動画と手元にあるスキーの動画で試したところ、似た場面を検知できていそうです。
自分の趣味で冬にスキーをやる際に動画を撮っているので、それで試して見ようと思います。滑走時の部分を特定してハイライトとか作るのには良さそうです。

できることと、まだできないこと

検索対象は固定の2秒区間で、見本と特徴が近い区間を順位付けします。似ているスコアが高くても、同じ物体や同じ出来事が映っているとは限りません。映像の内容を文章で検索したり、試合のプレーや事故を判定したり、自動で見どころ動画を作ったりする機能はありません。実映像を使った定量評価も、まだ行っていません。

検索結果の参照JSONには動画のローカルパスが含まれます。共有するときは内容を確認してください。また、リポジトリの独自コードのMITライセンスは、外部loader、依存パッケージ、モデルcheckpointに適用されるものではありません。

まとめ

前回の「JEPAを手元で試す」から一歩進め、動画の特徴を使って似た区間を探すローカルツールを作りました。V-JEPA 2を分類器や予測誤差として使うのではなく、エンコーダー特徴の検索に使う構成です。見本を選んで候補を再生する流れまでは作れましたが、どの動画でも期待した候補が見つかるかは、これから素材と評価方法を増やして確かめる必要があります。

参考資料

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?