Potato 2.8:標註一切,然後測量它
Potato 2.8 新增了計算機視覺、十億畫素深度縮放、三維點雲、深度圖、機器人回合、生成式影片評估與 VLM 定位——並對上述全部內容報告經機遇校正的一致性。
Potato 曾是一個帶有影像模式的文本標註平臺。從 2.8 起,它覆蓋影像、影片、十億畫素掃描件、三維點雲、深度圖、機器人回合、生成式影片推演與視覺語言定位,並且對其中每一項都會報告標註者是否一致。
後半句值得讀兩遍。繪圖工具並不稀缺:CVAT、Label Studio、Roboflow、V7 與 Supervisely 都能畫框和多邊形,其中幾家畫得比 Potato 還好。稀缺的是針對空間標籤的、經機遇校正的信度統計量。我們沒有找到另一個會報告它的標註平臺。通行做法是原始 IoU 或百分比匹配。
Potato 2.8
如果你是從 PyPI 安裝的,請升級
先說這件事。2.7.1 及之前的 wheel 用單層萬用字元宣告包資料,因此存放在子目錄中的 27 個模板從未進入釋出包。對於用 pip install 安裝的人,solo 模式的設定路由、管理看板、評審校準與語料地圖全都是壞的。從 git 檢出執行的人從未遇到過,這也正是測試套件沒能發現它的原因。
pip install --upgrade potato-annotation為什麼原始 IoU 不等於一致性
設想一份語料,其中每張圖片都有一個居中的大目標。兩位都在中間畫框的標註者會有很高的重疊度,因此平均 IoU 算出來約 0.95。
而一位看都沒看就在中間畫了個框的標註者,結果也是如此。
這個數字衡量的是任務有多容易,而不是標註者有多一致,而這恰恰是機遇校正當初為類別標籤所要解決的問題。Potato 報告 σ,它是把 α 自身的 1 − D_o/D_e 形式推廣到任意距離,其機遇基線通過比較不同條目的標註來經驗地估計。σ = 0 意味著標註者之間的一致程度,與他們在互不相關的圖片上的表現無異。
顯而易見的替代方案——在 1 − IoU 上套用 Krippendorff's α——結果是行不通的,而這值得說明原因,因為那正是我們最初的方案。IoU 距離會飽和:隨機配對的兩個框幾乎總是 IoU 為 0,於是期望分歧收斂到約等於 1,α 退化為 1 − 平均距離,其中已不剩任何機遇校正。Braylan、Alonso 與 Lease(WWW 2022)在實證上得出了同樣的結論,報告稱對於邊界框,α 會把普通 L2 排在 IoU 與 GIoU 之上,與實踐者給出的排序恰好相反。
空間一致性也被報告為三個數字而非一個:標註者是否找到了相同的物件、是否給出了相同的名稱、是否放在了相同的位置。一位找全了一切卻把標籤全標錯的標註者,與一位標籤正確但框畫得鬆垮的標註者,面對的是不同的問題,兩者的糾正方式也不同。
讓這一切變得必要的那個缺陷
裁決邏輯比較的是標註的鍵名。而影像模式會把所有內容存放在一個名為 _data 的鍵下。
於是每一對影像標註都得到 1.0 的一致性。兩位在任何地方都不一致的標註者看上去完全一致,並且沒有任何一張圖片被送去複核。
該問題已經修復,這也正是一致性計算內建於每種標註類型之中、而非疊加在其之上的原因。
瀏覽器中的分割與文本提示
點選一個物件,約 130 毫秒後得到掩碼,無需 GPU,每次點選也不產生網路呼叫。這是執行在 ONNX Runtime Web 上的 MobileSAM。
輸入一個短語,所有匹配項都會被框出來。這一項用的是 Grounding DINO,而許可才是值得注意的部分:人們普遍以為文本提示標註必須依賴 SAM 3 的非商業條款,其實不必。Grounding DINO 是 Apache-2.0,這正是它能面向所有人釋出、而不是隻面向付費層級的原因。
構建過程中有兩個細節,其適用範圍超出了 Potato 本身:
編碼器契約是對照真實權重核驗過的。 SAM 的輸入規格允許多種看似合理的解讀,其中三種會產出自信、看似合理卻錯誤的掩碼:質心誤差在 70 到 148 畫素之間,看上去像是標註者有點馬虎,而不像是流水線壞了。正確的解讀落在 0.1 畫素。只有對照真實權重與真實基準做核驗,才能把它們區分開。
量化方案是由實測選出的。 對照 686 MB 的全精度 Grounding DINO 匯出,q4f16 的框 IoU 為 0.972,而 int8 為 0.874——並且 q4f16 還小 50 MB。採用慣常選擇,就會用更大的檔案裝上一個更差的模型。
影片,以及"拒絕作答"的價值
在一幀上畫好掩碼,按下"向前跟蹤",SAM 2 就會讓該物件貫穿其後的各幀。對照已知基準實測:逐幀 IoU 為 0.974 至 0.979,從第一幀到最後一幀沒有衰減,CPU 上大約每幀 1.32 秒。
這一項執行在服務端,且是有意為之。它的開銷按幀計而非按提示計,而在瀏覽器標籤頁中跑上一百幀影片模型,意味著頁面要凍結好幾分鐘。Potato 另有一條更輕量的瀏覽器內延續路徑,兩者不應混為一談。
在標註閉環中最重要的性質是:模型會自行判斷物件何時被遮擋,並返回一個空幀,而不是去猜。在被遮擋的幀上給出看似合理卻錯誤的掩碼,是要花功夫撤銷的;而空幀可以被立刻讀懂,並且它也正是正確答案。
三維、深度與機器人
spatial_annotation 可讀取 PCD、PLY、LAS、KITTI .bin 與 .xyz,具備八叉樹細節層次、正交切片面板,以及能把每個三維框投影到每一張相機影像上的標定,使標註者可以在三維中編輯、在二維中核驗。
旋轉以四元數而非偏航角儲存。正是它讓 KITTI 匯入做到無損,包括那約 0.85° 的相機相對雷射雷達的安裝傾角——只有偏航角的欄位會一聲不吭地把它丟掉——而匯出回 KITTI 時會報告捨棄了多少朝向資訊,而不是悄悄把框壓平。
深度圖可讀取 16 位 PNG 與 TIFF、NPY、PFM 與 EXR,並在游標處給出米制讀數。零會被塗成品紅色,而不是被渲染成"非常近",因為零是幾乎通用的無返回編碼,而一臺面對無紋理牆面的雙目裝置確實會返回 80% 的空洞。
episode_annotation 把 N 路同步影片流與 M 條機器人時序軌道放在同一條時間軸上。三種結果,而非兩種:在真實機器人資料中,"部分成功"是出現頻率最高的結果,把它強行壓成二元,會摧毀那個讓資料集值得標註的訊號。軌道降取樣會保留極值,因此只持續一幀的力峰值也能挺過被繪製到 300 畫素軌道的過程——這一點很重要,因為一次失敗的抓取,在力曲線上會比在畫面上早若干幀顯現。
標出世界崩壞之處
rollout_evaluation 把 2 到 N 段生成影片放在同一時鐘上,請標註者標出世界開始不成立的那一幀,再標註是哪一條物理或因果性質被破壞。
給"物理合理性"打 5 分中的 3 分,既無法核查、無法定位,也無法據以修復任何東西。而一個幀號加一個類別三者兼備,並且兩位標註者的答案是數軸上的兩個點,因此真正的一致性統計量在此適用。
斷點一致性以檢測、定位與類別三方面報告,匹配容差以掃描曲線而非單一數字呈現,因為 0.25 秒下與 2 秒下的一致性,是關於同一份資料的兩種不同斷言。
我們預計會被低估的那項功能
預標註讓標註者更快。它也讓走過場式的蓋章毫無阻力:建議彈出,標註者點選接受,資料集就變成了一份模型與自己達成一致的記錄。
標註本身沒有任何東西能把這與認真複核區分開。幾何形狀完全相同,而所有品質指標看起來都更好,標註者間一致性也在其列,因為都接受同一份預標註的標註者,在構造上就是一致的。
唯一顯出差別的地方是時間。繪製遙測記錄每個圖形的耗時、筆跡動態、修改次數與 AI 建議的接受延遲——並且任何情況下都不記錄座標,這是事件記錄的結構性屬性,而非一條政策。
隨著一鍵自動標註成為常態,這是唯一能把認真複核與蓋章通過區分開的訊號。
2.8 中的其他內容
- 帶回復結構的會話。
dialogue顯示類型會依據每條發言的reply_to渲染回覆結構,而potato convokit可匯入任意 ConvoKit 語料並匯出回去,且不依賴convokit。 - 15 種匯入格式與 29 種匯出格式,其中 11 種可雙向往返。Darwin 雙向可用,如果你是要離開某個平臺而不是加入它,這一點很關鍵。
- 即時資料庫攝入。 啟動之後新建的行,會在
poll_interval_seconds內變為可標註,無需重啟。 - 機器可讀規格。 一份涵蓋 159 個配置鍵、61 種標註類型與 24 種顯示類型的 JSON Schema,外加一份含 419 條路徑的 OpenAPI 文件。兩者均由程式碼生成,並在 CI 中校驗。
- 沒有對外請求。 全部 14 個模板中的每一份資源都由安裝自身提供。
styles.css此前一直以一條指向 Google Fonts 的@import開頭,它會在每次頁面載入時把每位標註者的 IP 地址傳送給第三方——而人們自託管這個工具,恰恰是為了讓資料不離開自己的基礎設施。它躲過了此前三次氣隙審計,因為每道防護讀取的都是<script src>與<link href>,而樣式表內部的@import兩者都不是。 - 管理端的實例列表頁從平方級降到了線性:2,000 個條目從 15.1 秒降至 23 毫秒。
影像標註的鍵盤快捷鍵現在預設遵循 V7 約定(b 畫筆、r 矩形、f 填充、k 關鍵點、v 選擇)。對已經在進行中的研究,可設定 keybinding_profile: legacy 恢復舊鍵位。
從哪裡開始
以上全部內容都在免費、可自託管的產品中。這裡沒有付費層級。