はじめに
このjepaのお試しについて、実験内容検討はchat gpt、実装と実験はcodex、記事作成はdotsとOpenAIのAIにほぼお任せでした。
特にdotsはリポジトリやローカルのプロジェクトをチェックして、チェックポイントをユーザー(今回は私)に確認しながら記事を書いてくれました。色々試してみるのは好きなのですが、共有するまではどうしても億劫で手がつかないことの多い自分としては大助かりです。
dotsの実力チェックも兼ねて、今回はdotsの出したものをほぼそのまま載せてみます。
試した動機
JEPAはどんなモデルで、何ができるのか。まずは手元で動かして理解してみたいと思いました。そこでChatGPTと壁打ちし、走行映像の中から衝突やニアミスに関係する区間を見つける実験が題材としてよさそうだと考え、試してみました。
この記事では、JEPA一般の考え方と、今回使った動画モデルV-JEPA 2を分けて説明します。そのうえで、同じ動画を使った二つの実験経路を比べ、記録に残った結果と、そこからはまだ言えないことを整理します。
今回試した内容は以下のリポジトリに公開しています。
https://github.com/daikubo-jb/jepa-risk-detection
JEPAとは
JEPAはJoint Embedding Predictive Architectureの略です。名前のとおり、入力を潜在表現(embedding)へ写し、その表現どうしの関係を予測するアーキテクチャの考え方です。
画像を例にすると、入力画像の一部分をcontextとしてencoderに通し、画像全体をtarget encoderに通し、その出力から予測対象部分の表現を取り出します。predictorはcontextの表現とtargetの位置などを手がかりに、target側の表現を予測します。学習時には予測表現をtarget表現に近づけます。概念図にすると次のようになります。
ここで比較するのは、画素をそのまま再構成した画像ではなく、encoderが作る特徴表現です。画素単位の細部をすべて当てることより、下流タスクに役立つ情報を潜在空間で捉えることを目指す考え方です。MetaのI-JEPA論文は画像でこの構成を示し、V-JEPA 2論文は動画へ拡張した自己教師あり学習を扱っています。
ただしJEPAは、一つの固定されたモデル名ではありません。画像向けI-JEPA、動画向けV-JEPAなど、対象や学習方法の異なるモデルがあります。また「潜在表現を予測する」という学習方法だけで、任意の下流タスクがそのまま解けるわけではありません。どの情報が表現に含まれるか、どの入力・ラベル・評価方法を使うかを個別に確かめる必要があります。
今回使ったV-JEPA 2
今回の実験ではMetaが公開しているV-JEPA 2を使いました。V-JEPA 2は大規模な動画・画像で事前学習した動画encoderを含むモデルです。論文では、動作理解や行動予測などの評価に加え、ロボットの行動条件付きモデルV-JEPA 2-ACも扱っています。今回使ったのは、ロボット軌跡で後学習したV-JEPA 2-ACではありません。
このプロジェクトではHugging Face版のfacebook/vjepa2-vitl-fpc64-256を、設定に記録されたrevisionで読み込みます。動画を2秒、64フレームの窓に切り、V-JEPA 2の動画processorで前処理します。特徴抽出経路ではencoderを推論モードで実行し、得られる空間・時間tokenを平均して窓ごとの1024次元global特徴にまとめます。
ここで調べたい問いは、「この表現にリスク区間と関係する情報があるか」と「マスクされた時間部分の予測誤差がリスク区間と対応するか」です。事故が起きる前に警報を出せるか、という問いとは別です。
データとラベル
使ったのはNexar Collision Predictionの公式train split 1,500本です。公式test splitは取得していません。プロジェクトのmanifest生成コードでは、positive動画のtime_of_alertからtime_of_eventまでを半開区間[time_of_alert, time_of_event)としてリスク区間にしています。negative動画にはリスク区間を割り当てません。
動画は2秒窓で、窓末尾を0.5秒ずつ進めます。窓末尾時刻がpositive動画のリスク区間に入ると正例、それ以外は負例です。動画単位で内部train 1,200本、validation 300本に分割し、A/B比較ではvalidationの同じ有効フレーム集合を使いました。
データセットのライセンスが指定するHugging Face上のdataset citationに加え、データカードが案内するdataset paperも参考資料に載せています。再現時は取得時点の公式ライセンスと利用条件を確認してください。この記事では動画や動画単位の成果物を配布しません。
このラベルは「その時点が元データのalertからeventの間にあるか」を表します。「この窓だけから将来の事故を予測できたか」を直接表すラベルではありません。
二つの経路
A: contextからtarget表現を予測し、誤差を測る
コード上は、64フレーム全体からtubelet tokenを作った後、context encoderのtransformerへ入る前に最初の24時間tokenを選びます。残り8時間tokenはtarget側です。64フレームは時間幅2のtubeletへ分けられるため、24 tokenは前半48フレーム、8 tokenは後半16フレームに対応します。つまり「64フレームをcontext encoderの全層へ通してから出力を分ける」処理ではありません。context encoderの各self-attention blockには、前半24時間位置に属する空間tokenだけが入り、後半tokenは含まれません。一方、別のtarget encoderには64フレーム全体を通してtarget表現を得ます。このtarget表現は比較用であり、context encoderやpredictorへの入力には使いません。predictorへ渡すtarget位置には後半の画素やtarget特徴ではなくmask tokenを置き、出力とtarget encoder表現(LayerNorm後)の平均L1距離を計算します。
この経路では分類器を学習しません。窓ごとの誤差が大きいほどリスクらしいか、という連続スコアとラベルの関係を後から評価します。コードではcontext encoder側のattentionにtarget tokenは入りませんが、スコア自体は後半16フレーム相当も含む64フレーム窓を観測してから算出します。したがって、後半側を使わずに未来のイベントを先行予測した実験ではありません。
B: 凍結特徴に線形probeを学習する
BではV-JEPA 2の特徴抽出器としての使い方を調べます。2秒窓のglobal特徴を計算し、train側の特徴とリスクラベルだけでStandardScalerとロジスティック回帰をfitします。V-JEPA 2の重みは固定し、学習するのは線形probeです。
これは「映像の変化量」を明示的に測る方法ではありません。各窓全体から得た特徴を使い、その特徴でリスク区間を分類できるかを見る方法です。Aが予測誤差をスコアとして使うのに対して、Bは教師ありの分類器を追加します。
評価指標の読み方
スコアの順位付けにはROC-AUCとAverage Precision(AP)を使いました。APは、スコアの閾値を動かしたときのprecisionとrecallをまとめる指標で、正例が少ないデータでは正例率を基準と一緒に見ると解釈しやすくなります。今回の有効フレームでは正例7,730、負例314,201で、正例率に相当する一定スコア基準のAPは0.024011でした。
一定スコア基準は、全フレームを同じスコアにして順位付け能力がない場合の比較点です。APがこの値を上回ったことは、今回のラベルに対してスコアに順位情報があったことを示します。それだけで、実用上十分な精度や運転支援への適性を示すわけではありません。APは確率の校正や「警報したとき何割当たるか」を一つの運用閾値で示す値でもありません。
| 経路 | ROC-AUC | AP | 一定スコア基準AP |
|---|---|---|---|
| A: 予測誤差 | 0.633691 | 0.037674 | 0.024011 |
| B: 線形probe | 0.801785 | 0.144671 | 0.024011 |
共通評価フレームは321,931件でした。今回のvalidationでは、BのAPはAの約3.84倍、一定スコア基準の約6.03倍でした。Aも一定スコア基準を上回っています。これは「今回のデータ分割・ラベル・前処理・評価方法で、Bのスコアの方がリスク区間を順位づけした」という観測です。
結果をどこまで信頼できるか
大事な制約は、probeの正則化係数Cをvalidation上のframe APで選び、そのvalidationで性能も評価していることです。さらにイベント単位の閾値もvalidation上でF1が最大になる値を経路ごとに選びました。したがって、同じvalidationをモデル選択・閾値調整・評価に使った探索的な結果であり、未使用データに対する最終評価ではありません。値は楽観的になっている可能性があり、公式testや独立holdoutへそのまま一般化できるとは言えません。
またフレーム行は同じ動画内で時間的に隣接し、互いに独立ではありません。レポートには動画単位bootstrapの区間も記録されていますが、A/Bの有意差検定ではありません。APの比率だけから、モデル間の統計的有意差を結論することもできません。
もう一つ、A/Bはモデルの違いだけを比較したものではありません。Aは予測誤差の連続値、Bはtrainラベルで学習した分類器のスコアです。BのAPが高かった理由を「JEPAの予測が役に立たなかったから」などと特定することはできません。特徴表現の集約方法、分類器がラベルを使う点、前処理や評価設計など複数の違いがあるためです。
予測誤差を使う経路のAPが低かった理由は未検証
今回のAのAPはBより低い値でしたが、その原因を特定する追加実験は行っていません。考えられる仮説としては、リスク区間と予測しにくさが必ずしも一致しない、平均L1が局所的な変化を薄める、前半から後半への予測設定や窓の長さがこのデータに合っていない、などがあります。いずれも現時点では仮説であり、今回の結果から確定した原因ではありません。
切り分けるなら、context/targetの長さや窓位置を変える、誤差を時空間tokenごとに集約する方法を比較する、別のスコア正規化を試す、未使用holdoutで同じ手順を評価する、といった実験が必要です。事故前予測を調べるなら、入力に許す時刻と予測対象時刻を明確に分け、事故前のリードタイムを評価する別のプロトコルを設計しなければなりません。これらは今後の候補で、今回実行したものではありません。
まとめ
今回の実験では、JEPAの考え方を使うV-JEPA 2について、潜在表現を直接予測した誤差を測る経路と、凍結特徴に線形probeを学習させる経路を作りました。Nexarの内部validationでは両方のAPが一定スコア基準を上回り、今回の条件では線形probe経路の値が高くなりました。
一方で、公式testは未取得で、モデル選択・閾値調整と評価に同じvalidationを使っています。ラベルはalertからeventの区間に対応するため、事故を事前に予知できた結果ではありません。今回得られたのは、JEPA表現をどう使うかで結果が変わることを知るための探索的な比較です。
モデル・コードのライセンスとcheckpoint
プロジェクトの独自コードにはrootのMIT Licenseがありますが、これはNexarのデータセットやV-JEPA 2のモデルに適用されるものではありません。encoderは指定revisionのHugging Face配布物を利用しています。
A経路ではMeta V-JEPA 2互換のpredictor実装とraw checkpointを使います。公開ソースのpredictor.pyにはMeta原典への帰属とMITライセンス参照を記し、pinned Meta MIT本文をリポジトリの第三者ライセンス資料に置いています。実装にはMeta原典と対応する処理に加えプロジェクト固有の変更があり、どの部分が独立実装または翻案かをここでは断定しません。
ローカルvitl.ptのSHA-256は5346856ec9df69487fe72a25bf2632aaa8112df33fb67708e3f7374edc1f7012、sizeは5,127,726,842 bytesです。これは公式Hugging Face上のfacebook/vjepa2-vitl-fpc64-256/original/model.pthに表示されたSHA-256・sizeと一致し、そのモデルページはMITと表示しています。同一ファイルであることは確認できましたが、実験時にMeta配布URL、Hugging Face、その他のどの経路から取得したかを示すログはなく、実取得経路は未確認です。checkpoint本体は公開リポジトリに含めていません。
参考資料
- I-JEPA: Self-Supervised Learning from Images with a Joint-Embedding Predictive Architecture(論文)
- V-JEPA 2: Self-Supervised Video Models Enable Understanding, Prediction and Planning(論文)
- Introducing V-JEPA 2(Meta AI公式解説)
- facebookresearch/vjepa2(Meta公式コードとモデル情報)
- Nexar Collision Prediction dataset(データセット・ライセンス)
- Nexar dataset citation: Moura, Daniel C., and Zvitia, Orly. “Nexar Collison Dataset.” Hugging Face, 2025. https://huggingface.co/datasets/nexar-ai/nexar_collision_prediction
- Dataset paper: Daniel C. Moura, Shizhan Zhu, Orly Zvitia, “Nexar Dashcam Collision Prediction Dataset and Challenge,” 2025. arXiv:2503.03848
- Nexar dataset card(指定citation・データ説明)
- V-JEPA 2 Hugging Face model file(MIT表示・checkpoint hash/size)
- V-JEPA 2 Meta source at pinned commit