影片跟蹤與掩碼傳播
在一幀上畫好掩碼,SAM 2 便會讓物件貫穿整段影片;實測逐幀 IoU 為 0.974 至 0.979 且不衰減。該功能有意執行在服務端。
在一幀上畫好掩碼,按下"向前跟蹤",SAM 2 就會讓該物件貫穿其後的各幀,每一幀結果都會作為關鍵幀出現,可供你逐幀檢視與修正。 對照已知基準實測,逐幀 IoU 從第一幀到最後一幀穩定在 0.974 至 0.979,沒有衰減。
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、分佈在五張計算圖中,而影片本來就在服務端。在瀏覽器標籤頁中跑上一百幀,意味著介面要凍結好幾分鐘。CPU 上大約每幀 1.32 秒,GPU 上更快。
Potato 另有一條更輕量的瀏覽器內延續路徑,它是逐幀重新提示的。兩者是不同的東西,不宜混為一談:無論哪一種,該能力在免費、可自託管的產品中都可用,但基於記憶模組的傳播是服務端那一條。
遮擋是被回答的,而不是被猜測的
模型會自行判斷物件何時被遮擋,並返回一個空幀,而不是給出猜測。這正是修正過程中你想要的行為:在被遮擋的幀上猜出來的掩碼要花功夫撤銷,而一個看似合理卻錯誤的掩碼,比一個顯眼的空缺更糟。
插值幀上的掩碼是保持不變而非做混合的,並且被保持的幀會在時間軸上標出。誠實的呈現勝過平滑但錯誤的呈現。
管狀軌跡與多邊形插值
除掩碼傳播外,Potato 還通過弧長重取樣加旋轉對齊來對多邊形軌跡做插值。這處理了樸素插值會做錯的兩種情況:關鍵幀之間頂點數不同,以及同一形狀的描畫起點不同。
一個值得知道的幀索引缺陷
在 2.8 之前的每一個版本中,getCurrentFrame 在每次跳轉之後、對每一段影片都會偏差一幀。HTML 影片報告的 currentTime 被截斷到小數點後六位,因此 12 fps 影片的第 14 幀會被讀成第 13 幀。
如果你有來自更早版本的按幀索引的影片標註,它們在任何一次跳轉之後都可能整體偏移一幀。