文章

LabelMe使用简介

LabelMe使用简介

LabelMe使用简介

LabelMe 是基于 Python + Qt 的图形化图像标注工具,支持多边形、矩形等形状,标注结果保存为 *.json。多数 YOLO 训练流程需再转为 images/ + labels/*.txt + dataset.yaml;本文介绍安装、基本标注流程,以及 LabelMe → YOLO 的常用转换工具与选型。

参考与延伸阅读


目录


1. LabelMe 是什么

LabelMe 是一款基于 Python + Qt 的图形化图像标注工具,支持多边形、矩形、圆、线、点等形状,也可配合 SAM、YOLO-World 等做辅助标注。标注结果通常保存为与图片同名的 *.json,属于训练前的中间格式——多数深度学习框架不会直接读取 JSON,往往需要再转为 YOLO、COCO、VOC 等格式。

能力说明
常用形状多边形(polygon)、矩形(rectangle)等
输出每张图一个 JSON;可选内嵌 imageData(Base64)
官方导出开源版提供 VOCCOCO 等示例;不含与 pip 包捆绑的官方批量「转 YOLO」脚本
与 YOLO需自写脚本、经 COCO 中转,或使用下文 labelme2yolo 等第三方工具

2. 相关资源

类型链接说明
开源主仓库https://github.com/wkentaro/labelme安装说明、示例、Issue
Releases(免装 Python)https://github.com/wkentaro/labelme/releasesWindows / macOS 等独立可执行包
官方站点 / 文档https://labelme.io产品文档、部分 Pro 功能说明
导出 YOLO(文档)https://labelme.io/docs/export-to-yolo描述 labelmetk export-to-yolo;完整步骤多为 Pro;多边形常转为外接框
实例分割示例https://github.com/wkentaro/labelme/tree/main/examples/instance_segmentation导出 COCO 等
语义分割示例https://github.com/wkentaro/labelme/tree/main/examples/semantic_segmentation导出 VOC 等

社区 LabelMe → YOLO 工具(非 wkentaro 官方维护,使用前请核对许可与输出格式):

项目链接特点
labelme2yolo(PyPI,Rust)https://github.com/GreatV/labelme2yolo · https://pypi.org/project/labelme2yolo命令行 labelme2yolo;支持 bbox / polygon;可划分 train / val / test
Labelme2YOLO(Python)https://github.com/rooneysh/Labelme2YOLO脚本 labelme2yolo.py;支持检测与 --seg 分割
其它在 PyPI 检索 labelme2yolo维护状态不一,需与所用 YOLO 版本对齐

3. 下载与安装

3.1 推荐:pip(跨平台)

环境建议:Python 3.8+(若后续要训练 YOLO,可与 PyTorch / Ultralytics 共用同一虚拟环境)。

1
2
3
4
pip install labelme

# 安装最新开发版(可选)
# pip install git+https://github.com/wkentaro/labelme.git

启动:

1
2
3
4
5
labelme
# 打开指定目录
labelme /path/to/images
# 打开单张图
labelme /path/to/image.jpg

3.2 独立可执行文件(免配置 Python)

Releases 下载对应系统的安装包或压缩包,解压后运行 Labelmelabelme.exe

3.3 Conda(可选)

1
2
3
4
conda create -n labelme python=3.10
conda activate labelme
pip install labelme
# 或:conda install labelme -c conda-forge

4. 基本使用(标注流程)

  1. 启动 labelme,菜单 File → Open Dir 打开图片目录(或命令行传入目录)。
  2. 创建形状:左侧选择 Create Polygons(多边形)或 Create Rectangle(矩形);在图上依次点击顶点,右键或 Enter 结束当前形状。
  3. 填写类别:在弹出框中输入 label(如 personcar);名称需与后续训练配置中的类别名一致,注意大小写与空格。
  4. 保存Ctrl+SFile → Save,同目录生成 图片名.json
  5. 切换图片D 下一张、A 上一张(不同版本快捷键可能略有差异,以界面提示为准)。
  6. 撤销Ctrl+Z 撤销误操作。

目录习惯(建议):

  • 每张图:xxx.jpgxxx.json 放在同一目录
  • JSON 内 imagePath 指向相对或绝对图片路径;
  • 若移动图片或改目录结构,需同步更新 imagePath,否则转换脚本可能找不到图。

JSON 核心字段示例:

1
2
3
4
5
6
7
8
9
10
11
12
{
  "imagePath": "example.jpg",
  "imageHeight": 480,
  "imageWidth": 640,
  "shapes": [
    {
      "label": "person",
      "shape_type": "polygon",
      "points": [[x1, y1], [x2, y2]]
    }
  ]
}

5. LabelMe 与 YOLO:为什么要转换

格式用途
标注侧LabelMe *.json人工标注、可读、多边形方便
训练侧(如 Ultralytics)images/ + labels/*.txt + dataset.yamlyolo detect train / yolo segment train

检测任务标签每行一般为:<class_id> <x_center> <y_center> <width> <height>(坐标相对图像宽高,取值 0~1)。
多边形在转检测时通常取外接矩形;转分割时需保留顶点序列(具体格式随 YOLO 版本而定)。

官方开源包:README 提供 VOC / COCO 导出示例,没有捆绑「一键转 YOLO txt」。
官方文档中的 labelmetk export-to-yolo 属于 LabelMe 产品线能力,与开源 pip 包能力范围不同,使用前请阅读 https://labelme.io/pricing 与对应文档。


6. LabelMe → YOLO:常用工程与用法

6.1 PyPI:labelme2yolo(GreatV / Rust)

安装:

1
pip install labelme2yolo

典型用法(将 *.json 放在同一目录下):

1
2
3
4
5
6
7
8
# 默认 bbox,自动划分 train/val(比例见 --help)
labelme2yolo --json_dir /path/to/labelme_json_dir

# 指定验证集比例;输出为多边形(YOLOv5/v8 分割)
labelme2yolo --json_dir /path/to/labelme_json_dir --val_size 0.2 --output_format polygon

# 同时划分 test 集
labelme2yolo --json_dir /path/to/labelme_json_dir --val_size 0.15 --test_size 0.15

产出目录示例:

1
2
3
4
/path/to/labelme_json_dir/YOLODataset/
  dataset.yaml
  images/train/  images/val/  [images/test/]
  labels/train/  labels/val/  [labels/test/]

更多参数见:https://github.com/GreatV/labelme2yolo

6.2 GitHub:rooneysh/Labelme2YOLO(Python)

仓库:https://github.com/rooneysh/Labelme2YOLO

克隆后安装依赖(以仓库内 requirements.txt 为准),在仓库目录执行:

1
2
3
git clone https://github.com/rooneysh/Labelme2YOLO.git
cd Labelme2YOLO
pip install -r requirements.txt

labelme2yolo.py 常用参数:

参数含义
--json_dir存放 LabelMe *.json 的目录(默认只扫描该层,不递归子文件夹)
--val_size验证集比例,默认 0.1;如 0.2 表示 20% 用于验证
--json_name仅转换单个 json(可选)
--seg转为 YOLO 实例分割 数据集(输出目录为 YOLODataset_seg

用法 1:自动划分 train / val

1
python labelme2yolo.py --json_dir /path/to/labelme_json_dir --val_size 0.2

用法 2:已手动分出 train/val/ 子目录

将 json 分别放入 json_dir/train/json_dir/val/ 后执行:

1
python labelme2yolo.py --json_dir /path/to/labelme_json_dir

用法 3:分割任务

1
python labelme2yolo.py --json_dir /path/to/labelme_json_dir --val_size 0.2 --seg

产出结构:

1
2
3
4
5
6
7
{json_dir}/YOLODataset/           # 检测
  dataset.yaml
  images/train/  images/val/
  labels/train/  labels/val/

{json_dir}/YOLODataset_seg/        # 使用 --seg 时
  ...

训练示例(Ultralytics YOLOv8,需另行安装 ultralytics):

1
2
3
4
5
# 检测(建议 data= 使用 dataset.yaml 的绝对路径)
yolo detect train data=/path/to/YOLODataset/dataset.yaml model=yolov8n.pt epochs=100 imgsz=640

# 分割
yolo segment train data=/path/to/YOLODataset_seg/dataset.yaml model=yolov8n-seg.pt epochs=100 imgsz=640

注意: 若 json 分散在多层子目录中,需先将 json 与图片整理到单层目录,或自行编写汇总脚本,再调用上述工具。


7. 工具选型简表

场景建议
只做标注安装官方 labelme,图片与 json 同目录保存
快速转 YOLO、可选 polygon/bbox、数据量较大PyPI labelme2yolo(Rust,速度较快)
需要 --seg、习惯 Python 脚本rooneysh/Labelme2YOLO
必须走 COCO 生态LabelMe 官方示例导出 COCO,再用 COCO→YOLO 工具链
整图分类(无框)常直接按文件夹分 class,不必经过 labelme2yolo

8. 常见问题

现象处理
labelme 命令找不到确认 pip install labelme 使用的 Python 与终端一致;或尝试 python -m labelme
转换后找不到图片检查 json 中 imagePath;训练时 dataset.yaml 路径建议写绝对路径
类别 id 混乱统一 shapes[].label 拼写;多数转换脚本按 label 集合生成 id,宜事先约定类别表
子文件夹中的 json 未被转换部分脚本只扫描单层目录 → 将 json 汇总到同一层,或换用支持递归的工具
多边形变成矩形检测任务常见(外接框);要保留轮廓可用分割模式或 --output_format polygon
界面无法启动 / 显示异常可尝试 Releases 独立包;Linux 下注意安装 Qt 相关系统依赖

9. 小结

LabelMe 负责 JSON 标注YOLO 训练 需要 dataset.yaml + 归一化标签 txt。开源 pip 包不自带批量转 YOLO,工程上常用 PyPI labelme2yolorooneysh/Labelme2YOLO。标注时保持 图片与 json 同目录、label 命名统一,转换前核对 imagePathtrain/val 划分方式,即可顺畅对接 Ultralytics 等训练流程。

本文由作者按照 CC BY 4.0 进行授权