Skip to content

互動式分割

點選一個物件即可得到掩碼,在瀏覽器中完成,無需 GPU,每次點選也不產生網路呼叫。Potato 如何通過 ONNX Runtime Web 執行 MobileSAM,以及如何配置它。

點選一個物件,約 130 毫秒後掩碼就會返回,全部在標註者的瀏覽器中完成,無需 GPU,也沒有網路往返。 兩條命令即可安裝,一旦權重就位於本機,它便可在氣隙環境下工作。

安裝

bash
potato download-models onnxruntime     # 13.5 MB,每次安裝一次即可
potato download-models mobile_sam      # 45 MB

然後把 sam 加入某個模式的 tools

yaml
annotation_schemes:
  - annotation_type: image_annotation
    name: objects
    description: "Outline every object you find."
    source_field: image
    tools: [sam, polygon, brush, eraser]
    labels:
      - name: object
        color: "#6e56cf"

畫筆、橡皮擦與識別顏色的填充工具仍然可用,供手工操作。互動式分割是掩碼的起點,而不是修正掩碼的替代品。

執行 examples/image/interactive-segmentation/ 即可看到實際效果。

工作原理

這裡使用的模型是 MobileSAM,它是 Segment Anything 的蒸餾版本,通過 ONNX Runtime Web 執行。

編碼器與解碼器是有意分開的。編碼器開銷大,每張圖片只執行一次;解碼器開銷小,每次點選執行一次。把兩者分開、並按圖片快取嵌入,正是點選之所以感覺像互動而非網路請求的全部原因。該快取有容量上限,會淘汰最久未使用的嵌入。

你可以正向點選以擴充套件掩碼,反向點選以從中裁去,框選物件以約束搜尋範圍,或者對已有的掩碼做細化。

為什麼預設放在瀏覽器裡

pip install potato-annotation 之後就應當得到可用的分割能力:不需要 GPU,不需要新的 Python 依賴,標註時也不產生對外網路請求。最後這一點不是錦上添花:有若干研究組在氣隙環境下執行 Potato,在那裡,一個要在點選時去拉取的模型不是"慢",而是"缺失"。

瀏覽器(預設)服務端端點
安裝potato download-modelspip install 'potato-annotation[vision]' 外加權重
GPU不需要建議配備
氣隙可用是,模型下載完成後
模型體積蒸餾版,約 45 MB取決於你提供的模型

服務端端點是為那些擁有 GPU、想用更大模型的實驗室準備的,但它是例外而非預設。

輸入契約是驗證過的,而不是假定的

SAM 的編碼器接收的是經過預處理的影像,而其規格說明允許不止一種看似合理的解讀。其中三種解讀會產出自信、看似合理卻錯誤的掩碼:質心誤差在 70 到 148 畫素之間,看上去像是標註者有點馬虎,而不像是流水線壞了。正確的解讀落在 0.1 畫素

這種差別只有對照真實權重和真實基準才看得出來,因此這份契約由測試固定,而不是靠註釋約定。此處若解讀錯誤,會悄無聲息地劣化用它構建的每一個數據集中的每一份掩碼。

掩碼上的一致性

兩位標註者分割同一個物件,不會產出完全相同的畫素,因此掩碼一致性需要的不只是一個重疊度數字。Potato 使用 STAPLE(Warfield、Zou 與 Wells,2004),它在估計潛在共識邊界的同時,也給出每位評定者的敏感度與特異度。

它與逐畫素多數表決的差別並非表面功夫。當兩位認真的標註者以二比三落於噪聲標註者之下時,多數表決相對真值的 Dice 為 0.846,而 STAPLE 為 1.000,因為 STAPLE 注意到認真的那一對彼此一致,而噪聲的三位彼此並不一致。

細節與注意事項參見掩碼共識

相關內容