Skip to content

如何標註影像分割掩碼

多邊形、畫筆掩碼與點選即分割,各自適用於什麼場景,如何寫出標註者能照做的邊界規範,以及如何衡量掩碼上的一致性。

分割標註的是哪些畫素屬於某個物件,而它的絕大部分難度在於邊界規則,而不在於繪圖工具。 給兩位標註者同一張圖片、卻不給關於陰影的規則,他們就會系統性地產生分歧,而再好的工具也無法彌補這一點。

多邊形還是掩碼

多邊形畫筆掩碼
孔洞與不連通部分彆扭自然
細長結構(電線、毛髮、腿)
格式支援廣:COCO、YOLO、CVAT、LabelMe窄:COCO RLE、DAVIS、掩碼 PNG
可編輯性移動一個頂點重塗一片區域
儲存除非稀疏,否則較大

多邊形能在更多格式之間往返,如果標籤最終必須離開這個工具,這一點很關鍵。而當物件確實有孔洞或細絲時,掩碼才是誠實的答案。

如果拿不定主意,就看消費這些標籤的模型需要什麼。語義分割模型兩種情況下消費的都是掩碼;剩下的問題只是標註者用哪一種最不容易出錯。

先寫好邊界規則

正是這一部分決定了你的一致性數字。請做出決定,併為以下各項給出示例:

  • 陰影與反光。 算在內還是不算?必須前後一致。
  • 透明與半透明部分。 玻璃杯、擋風玻璃、塑膠袋。
  • 細長結構。 一根電線細到什麼程度就不值得再描了?
  • 遮擋。 只標可見部分,還是推斷整個物件?
  • 接觸。 兩個相互接觸的實例:分界線究竟在哪裡?
  • 運動模糊。 模糊邊緣的邊界在哪裡?

每條規則配一個做好的示例,勝過一整段文字說明。如果做完這些之後標註者仍有分歧,你會看到σ 低而檢測一致性高——他們找到的是同一批物件,只是畫法不同,那屬於規範問題,而非粗心問題。

從模型出發

點選即分割可在瀏覽器中、無需 GPU,約 130 毫秒給出初稿:

yaml
annotation_schemes:
  - annotation_type: image_annotation
    name: objects
    description: "Outline every object."
    source_field: image
    tools: [sam, polygon, brush, eraser]
    labels:
      - {name: object, color: "#6e56cf"}
bash
potato download-models onnxruntime
potato download-models mobile_sam

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

標註的價值在於修正。 如果你的標註者每次都直接接受第一版掩碼,那你採集到的不過是一份模型與自己達成一致的記錄——參見如何區分認真複核與走過場,因為一致性統計量不會告訴你這一點。

衡量掩碼上的一致性

不要使用標註者之間的平均 IoU。它回答的是"這個任務容不容易",而不是"這些標註者是否一致"——原因參見如何測量邊界框上的一致性

請使用 STAPLE,它在估計潛在共識邊界的同時,給出每位標註者的敏感度特異度

  • 敏感度低意味著分割不足,把邊界畫進去了。
  • 特異度低意味著分割過度,把周圍也慷慨地圈了進來。

兩者的糾正方式恰好相反,這正是單一準確率數字不足以給標註者反饋的原因。

STAPLE 還會按已表現出的可靠性加權,而不是數票。兩位認真的標註者以二比三落於噪聲標註者之下時,多數表決的 Dice 為 0.846,STAPLE 為 1.000。

匯出

COCO 承載多邊形與 RLE 掩碼,包含 iscrowd 人群區域。DAVIS 承載逐實例掩碼。YOLO 承載多邊形但不承載掩碼。如果標籤最終必須落到某個特定格式,請在確定採用掩碼工作流之前先查閱格式矩陣

延伸閱讀