ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Labelme 图像标注实战:10 分钟从一张图片到可训练的标注数据集

Labelme 图像标注实战:10 分钟从一张图片到可训练的标注数据集

Labelme 图像标注实战:10 分钟从一张图片到可训练的标注数据集

【免费下载链接】labelmeImage annotation with Python. Supports polygon, rectangle, circle, line, point, and AI-assisted annotation.项目地址: https://gitcode.com/gh_mirrors/la/labelme

手上有一批图片,喂给训练框架之前,得先画上框、分割和类别标签。Labelme 是一个 Python + Qt 的图像标注工具:界面里标,JSON 直接落盘,自带脚本还能把整个目录批量转成 VOC 或 COCO 数据集。下面把完整流程走一遍,从空白画面到能验收的目录,大约十分钟。

五种形状加 flags,先认清它能标什么

五种基础形状加图像级 flags,保存即 JSON,下游可对接两种主流数据集格式:

  • 五种基础形状:多边形、矩形、圆形、线条、点
  • 图像级 flags:整图打标,适合分类、质检场景
  • 保存形式:一图一 JSON,写在图片同目录
  • 下游转换:批量转 VOC(XML / 掩码)或 COCO(单个annotations.json)
  • 平台要求:64 位 macOS / Windows / Linux,Python 3.12 起

安装并打开示例目录练手

先克隆再安装,装好就能拿仓库自带示例开练:

git clone https://gitcode.com/gh_mirrors/la/labelme cd labelme && pip install -e .

装完后用仓库里现成的示例图开练:

labelme examples/bbox_detection/data_annotated

这条命令直接打开目标检测示例目录,仓库还带了语义分割等现成例子可换着练。换成自己的数据,不带参数启动labelme,点左侧Open Dir,指向自己的图片文件夹。打开后标题栏给出当前图 序号/总数,右边 File List 挂着全部待标图,标到第几张心里有数。

五步标出第一个多边形

从选工具到落盘只要五步:

  1. 点左侧工具栏的Create Polygons,切到标注模式
  2. 沿物体轮廓逐点单击,每个点落下一个绿色顶点,已落的点连成折线,边点边预览
  3. 快回到起点时,用双击或 Enter 完成闭合
  4. 弹出对话框,输入类别名(如person);上次的标签会被预填,也可以直接从候选里挑
  5. 最后按Ctrl+S,标注立刻写进图片同目录的 JSON

此刻多边形刚闭合,标签对话框已打开,预填了上一次用的标签,选个类别名确认即可。

同名 .json 里存了什么

先给结论:每张图标完,旁边多出一个同名.json,信息足以还原其中任何一个形状:

  • shapes:数组,装着该图全部形状
  • label/points:形状的类别名与顶点坐标
  • group_id:形状之间的分组
  • imagePath、宽高、文件大小:图片自身信息

右侧 File List 里带勾的图表示已标过;每存一次就新建或覆盖对应 JSON。

两条命令转出 VOC 和 COCO 数据集

转换脚本就在 examples 示例目录 里,两条命令各吃一整个标注目录:

./labelme2voc.py data_annotated data_dataset_voc --labels labels.txt ./labelme2coco.py data_annotated data_dataset_coco --labels labels.txt

两种输出结构差异明显:VOC 是散文件,每张图一个 XML 放在Annotations/下,另有SegmentationClass等掩码目录;COCO 则是单个annotations.json汇总全部标注。转完别急着进训练,先翻输出目录里的 Visualization 图:掩码有没有贴住物体、类别颜色对不对,一眼可见。标错就回 Labelme 修好,再重跑一次。

像素级对法在这里:一张图里每类一种颜色,右下角图例写明数值到类别的映射。

批量标注的三个提速点

下面三招都针对连标几十张图的情况:

  • 快捷键:Ctrl+S保存、Ctrl+Z撤销、Delete删除选中形状;D/A前后切图,Ctrl+F适应窗口——连标几十张时手基本不用离开键盘
  • 预置标签:图片目录放一份labels.txt(一行一个标签),启动时带--labels参数载入;再开--validate-label exact,标签只能来自这份名单,拼写漂移从源头掐掉
  • AI 辅助与逐帧标注:顶部 AI-Assisted Annotation 面板选好 SAM 系列模型,图上点一下就有现成的多边形/掩码,适合先出大轮廓再手修;视频数据按帧标,D/A推进帧序,每帧各自落一个 JSON

视频示例里当前帧已标出 track 和 car,按 D 键继续下一帧。

协议、存储、导出三个问题

Q:开源协议是什么,商用有没有问题?

GPL-3.0-only,不是 MIT。团队内部做标注没有限制;要把它二次开发后的软件交给别人用,须按 GPL 条款办事,拿不准先问法务。

Q:标注结果存哪儿?

图片旁边同名的.json,标一张存一张;File List 里打勾即已标完。

Q:边界框导出成什么形态?

转 VOC 时框写进Annotations/下的 XML;转 COCO 时进annotations.json的bbox字段。多边形、掩码在两种格式下都会额外产出一套分割标注。

交付前对照这份验收清单

  • 用自己的数据完整走一遍「标注 → 保存 → 转换 → 可视化」
  • 数据目录放了labels.txt并开启 strict 标签校验
  • 批量转换后抽查了至少几张 Visualization 图
  • 产物目录结构对得上训练脚本里写死的路径

【免费下载链接】labelmeImage annotation with Python. Supports polygon, rectangle, circle, line, point, and AI-assisted annotation.项目地址: https://gitcode.com/gh_mirrors/la/labelme

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进