動画の物体追跡をアノテーションする方法
モデル支援のマスク伝播でクリップ全体を通して物体を追跡し、遮蔽を正直に扱い、許容幅のスイープで時間的一致度を測る方法。
追跡のアノテーションとは、複数のフレームにわたって同じ物体にラベルを付けることであり、コストがかかるのは最初のマスクではなく、そのあとに続く数百枚のほうです。 モデル支援の伝播はその大半を取り除きます。ただし、モデルが物体を見失ったときに正直であることが条件です。
作業の流れ
- あるフレームで物体をマスクする。
- 前方へ伝播させる。結果はキーフレームとして届く。
- キーフレームをスクラブし、マスクがずれた箇所を修正する。フレームを修正すると、その地点から追跡が再アンカーされる。
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
frame_stepping: true遮蔽時は何も返さないべき
アノテーションのループにおける伝播モデルのもっとも有用な性質は、物体が隠れているときに辞退すること、つまり最善の推測ではなく空のフレームを返すことです。
遮蔽されたフレーム上のもっともらしい誤ったマスクは、空白より悪いものです。アノテーターはそれに気づき、誤りだと判断し、削除しなければなりません。空のフレームは「ここでは物体が見えていない」とただちに読み取れ、しかもそれが正しいラベルでもあります。
SAM 2 はこれを行い、その記憶モジュールこそが、遮蔽の向こう側で物体を見失うことなく伝播を持続させるものです。既知の正解に対して測定した結果、フレームごとの IoU は 0.974 から 0.979 を保ち、系列を通じて減衰しませんでした。
保持と補間
キーフレームの間のフレームでは、マスクは保持(直前のキーフレームから繰り返す)か補間のどちらかです。正直な選択は保持であり、保持されたフレームは視覚的に印を付けるべきです。
補間されたマスクは滑らかに見えて、誰にも見えない形で誤っています。消費側が補間された形状を必要とするなら、それが明示された変換であるエクスポート時に補間してください。不可視であるインターフェース内ではなく。
ポリゴンの補間は見た目より難しい
二つのポリゴンキーフレームの間の補間は、素朴な実装が取り違える二つの点で失敗します。
- 二つのキーフレームで頂点数が異なることがある。
- アノテーターが形状の別の位置からトレースを始めていることがある。
回転整合を伴う弧長リサンプリングは両方に対処します。これがないと、補間されたポリゴンはキーフレームの間で裏返ることがあります。
伝播はどこで走らせるべきか
モデルが記憶を持つならサーバー側です。コストはプロンプトごとではなくフレームごとにかかり、ブラウザタブで動画モデルを百フレーム分回せば UI は何分も固まります。ブラウザ側でフレームごとに再プロンプトする沿用は、それとは別の、より軽い仕組みです。有用ではありますが同じ能力ではなく、自分たちのドキュメントで混同しないだけの価値があります。
一致度の測定
二人のアノテーターがイベント境界に同じフレームを選ぶことはないため、時間的一致度はマッチング許容幅に依存します。単一の閾値ではなくスイープを報告してください。
- 2 秒で高く 0.25 秒で低い:イベントが起きたことでは一致しているが、正確な時点では一致していない。たいていガイドラインの問題です。
- どちらでも低い:そもそも起きたかどうかで意見が割れています。
マスクそのものについては、フレームごとにマスク一致度の仕組みを使ってください。
自分のツールでも確認する価値のあるバグ
HTML の video は currentTime を小数第 6 位で切り捨てて報告します。それを素朴に掛けて切り捨ててフレーム番号に変換すると、シークのたびに 1 ずれます。12 fps クリップの 14 フレーム目が 13 として読み戻されるのです。
これは 2.8 より前の Potato で実際に起きており、すべてのクリップのすべてのアノテーターに影響していました。どのツールであれフレーム番号付きの動画アノテーションを持っているなら、既知のフレームと照合して確かめる価値があります。