1. 为什么需要自定义语义分割数据集
当你想要识别图片中特定物体的精确轮廓时,现成的公开数据集往往无法满足需求。比如你想区分农田里的不同作物,或者识别工业场景中的特定零件,这时候就需要构建自己的语义分割数据集。Deeplabv3+作为当前最先进的语义分割框架之一,对数据格式有着特定要求,而Labelme恰好是最适合个人开发者使用的标注工具。
我在处理农业遥感图像时就遇到过这个痛点。公开数据集里的"植物"类别根本无法区分玉米和小麦,只能自己动手标注。整个过程最耗时的不是模型训练,而是前期数据准备——从原始图片标注到生成Deeplabv3+可识别的PNG掩码,中间要经历多次格式转换。下面我就把踩坑后总结的最佳实践分享给大家。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 标注工具的选择与使用技巧
2.1 Labelme的安装与基础操作
推荐使用Anaconda快速搭建Python3.7环境:
bash复制conda create -n labelme python=3.7
conda activate labelme
pip install labelme
启动标注界面只需执行:
bash复制labelme
右键菜单中最重要的三个功能:
- Create Polygon:绘制多边形轮廓
- Edit Polygon:调整已有标注点
- Create Rectangle:快速标注矩形区域(适合规则物体)
实测标注效率提升技巧:
- 对同类物体标注时,按空格键可复用当前标签
- 使用Ctrl+Z撤销错误标注
- 对对称物体可先标注一半,然后复制粘贴再水平翻转
2.2 高级标注策略
对于复杂场景,建议采用分层标注法:
- 第一轮粗标:用大多边形快速覆盖所有目标区域
- 第二轮精修:逐个调整边缘至像素级精度
- 第三轮校验:开启"View -> Show Labels"检查是否有漏标
处理遮挡关系的黄金法则:
- 被遮挡物体按实际可见部分标注
- 在标签名称中添加"occluded"后缀(如"car_occluded")
- 同一物体的不同部分应使用相同标签名
3. 数据格式转换全流程
3.1 JSON到PNG的转换原理
Labelme生成的JSON文件其实包含三个关键信息:
- 原始图片的Base64编码
2
