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 承载多边形但不承载掩码。如果标签最终必须落到某个特定格式,请在确定采用掩码工作流之前先查阅格式矩阵

延伸阅读