4、多边形标注:语义分割中的多边形标注技巧与顶点控制
语义分割的数据标注,说白了就是给图像里的每个像素打上类别标签。但实际项目中,我们很少真的去画像素——太慢了。主流做法是用多边形去勾勒目标轮廓,然后内部自动填充。
我刚开始做分割标注时,总觉得多边形就是围着目标点一圈就行。结果呢?模型训练出来,边缘锯齿严重,小目标直接漏检。后来才明白,顶点怎么放、放多少、顺序对不对,直接影响标注质量和模型效果。
4.1 多边形标注的核心概念
多边形标注,就是用一系列有序顶点围成一个闭合区域。每个顶点是一个二维坐标点 (x, y),首尾相连形成封闭多边形。
关键公式:多边形面积(Shoelace 公式)
S = 0.5 * | Σ (x_i * y_{i+1} - x_{i+1} * y_i) |
这个公式我经常用来验证标注是否自交。如果算出来面积异常小或为负,说明顶点顺序可能反了。
一个合格的多边形标注,需要满足三个条件:
- 闭合性:首尾顶点相连,没有缺口
- 非自交:边与边之间不能交叉
- 顶点顺序一致:要么全顺时针,要么全逆时针
嗯,这里要注意。不同标注工具对顶点顺序的要求不一样。有的工具默认顺时针,有的默认逆时针。我建议你在项目开始前,先统一约定好顺序规则。
4.2 顶点放置的核心技巧
顶点怎么放,是门手艺活。放多了,标注成本高;放少了,轮廓不准。我总结了一套「三区放置法」:
| 区域类型 | 顶点密度 | 典型场景 |
|---|---|---|
| 高曲率区 | 密集(每 5-10 像素一个点) | 动物耳朵、车轮边缘、文字拐角 |
| 低曲率区 | 稀疏(每 30-50 像素一个点) | 车身侧面、建筑物墙面、道路标线 |
| 直线段 | 仅端点(2 个点) | 矩形物体、窗户、广告牌 |
我在项目中遇到过最典型的错误,就是有人在直线段上放了一堆顶点。你想想看,一条直线放 10 个点,不仅浪费标注时间,还会让模型学到不必要的抖动。
个人习惯:我一般先放 4-6 个关键顶点勾勒大致轮廓,然后在高曲率区域补点。这样效率最高,而且不容易漏掉重要特征。
4.3 顶点顺序与方向
顶点顺序看似小事,实际上坑很多。我见过一个团队,标注员有的顺时针画,有的逆时针画,结果模型训练时 loss 死活降不下去。
为什么会这样?因为很多分割模型在计算损失时,会假设多边形顶点顺序一致。如果混用,梯度方向就乱了。
我建议统一采用顺时针顺序。原因很简单:大多数标注工具默认顺时针,而且顺时针的顶点列表更容易做数据增强(比如旋转、翻转)。
我曾经踩过的坑:在做多边形裁剪时,如果顶点顺序是逆时针,裁剪后的结果可能会翻转。后来我加了一个自动检测顺序的脚本,发现顺序不对就反转列表。这个脚本现在还在我的工具包里。
4.4 顶点数量控制
顶点数量直接影响标注效率和模型精度。太少,轮廓粗糙;太多,标注成本高,而且容易过拟合到噪声。
我一般遵循「20-50 规则」:
- 小目标(面积 < 1000 像素²):8-15 个顶点
- 中目标(面积 1000-10000 像素²):15-30 个顶点
- 大目标(面积 > 10000 像素²):30-50 个顶点
超过 50 个顶点,我建议你检查一下是不是标注得太细了。除非是极其复杂的轮廓(比如树叶边缘),否则 50 个点足够描述任何物体。
经验值:一个 512×512 的图像,平均每个目标 20-25 个顶点,标注质量和效率的平衡最好。这是我做了 10 万张图后总结出来的。
4.5 多边形标注的常见错误与避坑
我整理了一份「多边形标注避坑清单」,都是实际项目中踩过的:
| 错误类型 | 表现 | 解决方法 |
|---|---|---|
| 顶点自交 | 多边形内部出现交叉区域 | 标注工具开启自交检测,或使用 Shoelace 公式验证 |
| 顶点冗余 | 直线段上放多个顶点 | 只保留端点,中间点删除 |
| 顶点缺失 | 高曲率区域顶点太少 | 在曲率最大处补点,每 5-10 像素一个 |
| 顺序混乱 | 混用顺时针和逆时针 | 统一约定顺时针,脚本自动校正 |
| 边缘溢出 | 顶点超出目标真实边界 | 放大图像到 200% 后再标注 |
我曾经因为「边缘溢出」这个错误,导致一批标注数据全部返工。当时标注员在 100% 视图下标注,结果顶点都飘到背景里去了。后来我强制要求标注时至少放大到 200%,这个问题就再没出现过。
4.6 多边形标注的知识体系
下面这张图,是我对多边形标注核心知识的总结。你可以把它当作一个快速参考:
4.7 实践建议
最后,分享几个我在实际项目中用到的工具和流程:
- 标注前先做模板:对常见物体(车辆、行人、交通标志)预先定义顶点数量范围,标注员照着模板画,一致性会好很多。
- 用脚本做质量检查:我写了一个小脚本,自动检查顶点数量、顺序、自交情况。标注完成后跑一遍,能过滤掉 80% 的低质量标注。
- 定期做校准:每周抽 50 张图,让两个标注员独立标注同一张图,然后计算顶点位置的 IoU。如果 IoU 低于 0.85,说明标注标准需要重新对齐。
一个小技巧:如果你用 Labelme 或 CVAT 做标注,可以开启「自动吸附」功能。它会自动把顶点吸附到物体边缘,能省不少时间。但注意,吸附阈值别设太大,否则容易吸到背景上去。
多边形标注看起来简单,但真正做好,需要理解顶点与轮廓的关系,也需要在实践中不断积累手感。希望这些经验能帮你少走一些弯路。