如何标注图像分割掩码
多边形、画笔掩码与点击即分割,各自适用于什么场景,如何写出标注者能照做的边界规范,以及如何衡量掩码上的一致性。
分割标注的是哪些像素属于某个对象,而它的绝大部分难度在于边界规则,而不在于绘图工具。 给两位标注者同一张图片、却不给关于阴影的规则,他们就会系统性地产生分歧,而再好的工具也无法弥补这一点。
多边形还是掩码
| 多边形 | 画笔掩码 | |
|---|---|---|
| 孔洞与不连通部分 | 别扭 | 自然 |
| 细长结构(电线、毛发、腿) | 差 | 好 |
| 格式支持 | 广:COCO、YOLO、CVAT、LabelMe | 窄:COCO RLE、DAVIS、掩码 PNG |
| 可编辑性 | 移动一个顶点 | 重涂一片区域 |
| 存储 | 小 | 除非稀疏,否则较大 |
多边形能在更多格式之间往返,如果标签最终必须离开这个工具,这一点很关键。而当对象确实有孔洞或细丝时,掩码才是诚实的答案。
如果拿不定主意,就看消费这些标签的模型需要什么。语义分割模型两种情况下消费的都是掩码;剩下的问题只是标注者用哪一种最不容易出错。
先写好边界规则
正是这一部分决定了你的一致性数字。请做出决定,并为以下各项给出示例:
- 阴影与反光。 算在内还是不算?必须前后一致。
- 透明与半透明部分。 玻璃杯、挡风玻璃、塑料袋。
- 细长结构。 一根电线细到什么程度就不值得再描了?
- 遮挡。 只标可见部分,还是推断整个对象?
- 接触。 两个相互接触的实例:分界线究竟在哪里?
- 运动模糊。 模糊边缘的边界在哪里?
每条规则配一个做好的示例,胜过一整段文字说明。如果做完这些之后标注者仍有分歧,你会看到σ 低而检测一致性高——他们找到的是同一批对象,只是画法不同,那属于规范问题,而非粗心问题。
从模型出发
点击即分割可在浏览器中、无需 GPU,约 130 毫秒给出初稿:
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"}potato download-models onnxruntime
potato download-models mobile_sam正向点击扩展掩码,反向点击从中裁去,框选可约束搜索范围,已有的掩码也可以细化。
标注的价值在于修正。 如果你的标注者每次都直接接受第一版掩码,那你采集到的不过是一份模型与自己达成一致的记录——参见如何区分认真复核与走过场,因为一致性统计量不会告诉你这一点。
衡量掩码上的一致性
不要使用标注者之间的平均 IoU。它回答的是"这个任务容不容易",而不是"这些标注者是否一致"——原因参见如何测量边界框上的一致性。
请使用 STAPLE,它在估计潜在共识边界的同时,给出每位标注者的敏感度与特异度:
- 敏感度低意味着分割不足,把边界画进去了。
- 特异度低意味着分割过度,把周围也慷慨地圈了进来。
两者的纠正方式恰好相反,这正是单一准确率数字不足以给标注者反馈的原因。
STAPLE 还会按已表现出的可靠性加权,而不是数票。两位认真的标注者以二比三落于噪声标注者之下时,多数表决的 Dice 为 0.846,STAPLE 为 1.000。
导出
COCO 承载多边形与 RLE 掩码,包含 iscrowd 人群区域。DAVIS 承载逐实例掩码。YOLO 承载多边形但不承载掩码。如果标签最终必须落到某个特定格式,请在确定采用掩码工作流之前先查阅格式矩阵。