Skip to content

動画追跡とマスク伝播

一つのフレームにマスクを描けば SAM 2 が物体をクリップ全体で追いかけます。フレームごとに 0.974 から 0.979 の IoU を計測、減衰なし。設計としてサーバー側で動作します。

一つのフレームにマスクを描いて「前方へ追跡」を押すと、SAM 2 がそれ以降のフレームで物体を追いかけ、結果はスクラブして修正できるキーフレームとして届きます。 既知の正解に対して測定した結果、フレームごとの IoU は最初のフレームから最後まで 0.974 から 0.979 を保ち、減衰しません

yaml
annotation_schemes:
  - annotation_type: video_annotation
    name: tracks
    description: "Draw the object once, then press Track forward."
    source_field: video_url
    mode: tracking
    labels:
      - {name: subject, color: "#d1495b"}
    tracking_options:
      interpolation: linear
      auto_advance_frames: 5
    video_fps: 12
    show_timecode: true
    frame_stepping: true

動作する例:examples/video/mask-propagation/

これはサーバー側で動く

伝播には SAM 2 を、その記憶モジュール(バンクの順序付け、リピートパディング、時間エンコーディング、オブジェクトポインタのチャンク分割)とともに使います。各フレームを独立に再プロンプトするのではありません。

これは意図的にサーバー側で動きます。コストはプロンプトごとではなくフレームごとにかかり、モデルは五つのグラフで合計 181 MB あり、動画はすでにそこにあります。ブラウザタブでその百フレーム分を回せば UI は何分も固まります。CPU でおよそ 1 フレームあたり 1.32 秒、GPU ならより高速です。

Potato にはフレームごとに再プロンプトする、より軽いブラウザ内の沿用パスもあります。両者は別のものであり、混同しない価値があります。この能力はどちらの経路でも無償の自前ホスト版で利用できますが、記憶に基づく伝播はサーバー側のほうです。

遮蔽は推測されず、答えられる

モデルは物体が遮蔽された時点を自ら判断し、推測ではなく空のフレームを返します。これは修正作業中に望ましい振る舞いです。隠れているフレームに推測されたマスクがあると取り消す手間になり、もっともらしい誤ったマスクは明白な空白より悪いからです。

補間されたフレーム上のマスクは混ぜられるのではなく保持され、保持されたフレームはタイムライン上に印が付きます。正直な表現のほうが、滑らかな誤りより優れています。

チューブレットとポリゴンの補間

マスク伝播と並んで、Potato は回転整合を伴う弧長リサンプリングでポリゴンのトラックを補間します。これにより、素朴な補間が取り違える二つの場合——キーフレーム間で頂点数が異なること、同じ形状をトレースし始める位置が異なること——に対処できます。

知っておく価値のあるフレーム索引のバグ

getCurrentFrame は、2.8 より前のすべてのリリースで、すべてのクリップにおいて、シークのたびに 1 ずれていました。HTML の video は currentTime を小数第 6 位で切り捨てて報告するため、12 fps クリップの 14 フレーム目が 13 として読み戻されていたのです。

それ以前のバージョンで作られたフレーム索引付きの動画アノテーションを持っている場合、シークの後で 1 フレームずれている可能性があります。

関連