在计算机视觉领域,数据集标注是模型训练的基础——没有高质量的标注数据,再强大的算法也无从谈起。而 LabelMe 和 LabelImg 作为两款最主流的开源图像标注工具,几乎是所有CV初学者的入门必备。

很多新手会混淆这两款工具:有人用 LabelImg 去做语义分割标注,有人用 LabelMe 画简单矩形框,反而降低了效率。其实核心区别很简单:LabelImg 专注矩形框标注,适合目标检测任务;LabelMe 支持多形态标注,适合语义分割、实例分割等精细标注场景

这篇博客将从「工具定位→环境安装→完整操作→格式解析→技巧避坑」,手把手教你掌握两款工具的使用,无论你是CV新手,还是需要快速上手标注任务的开发者,看完这篇就能直接落地实操。

一、工具前置认知:LabelMe vs LabelImg 核心区别

在开始操作前,先明确两款工具的适用场景,避免用错工具走弯路,具体区别如下(新手必看):

对比维度

LabelImg

LabelMe

核心功能

专注2D矩形框(Bounding Box)标注

支持多边形、矩形、圆形、点、线段等多种标注形态

适用场景

目标检测(如YOLO、Faster R-CNN等模型)

语义分割、实例分割、姿态估计、关键点检测等

输出格式

默认Pascal VOC(XML),可一键切换YOLO(TXT)

默认JSON格式,需转换为掩码图(PNG)用于模型训练

特点

轻量、启动快、操作简单,适合大规模快速标注

功能丰富、标注精细,支持复杂场景,可自定义扩展

总结:做目标检测,用 LabelImg 效率最高;做分割类任务,用 LabelMe 最适配。两款工具可单独使用,也可根据项目需求搭配使用。

二、环境准备:通用前置条件(两款工具通用)

两款工具均基于 Python 开发,因此无论使用哪款,都需要先搭建 Python 环境,新手推荐用 Anaconda 搭建虚拟环境,避免与其他项目依赖冲突。

2.1 安装 Anaconda(推荐)

  1. 前往 Anaconda 官网,下载对应操作系统(Windows/macOS/Linux)的版本,默认安装即可(安装时勾选“Add Anaconda to PATH”,方便后续调用)。

  2. 安装完成后,Windows 打开「Anaconda Prompt」,macOS/Linux 打开「终端」,输入 conda --version,出现版本号即安装成功。

2.2 创建并激活虚拟环境

建议创建一个专门的标注环境,避免依赖冲突,命令如下(所有系统通用):

# 创建名为 label_env 的虚拟环境(Python 3.6-3.10 兼容性最好)
conda create --name=label_env python=3.8
# 确认安装(输入 y 回车)
# 激活环境
conda activate label_env
# 激活成功后,命令行前会显示 (label_env)

后续安装和启动两款工具,都需在这个激活的虚拟环境中操作。

三、LabelImg 详细使用教程(目标检测标注首选)

LabelImg 是目标检测标注的“神器”,操作简单、轻量化,支持主流标注格式,无需后期手动转换,新手可快速上手。

3.1 安装 LabelImg

在激活的虚拟环境中,有两种安装方式,新手推荐第一种,快捷高效。

方式一:Pip 一键安装(推荐)

# 直接安装 labelimg
pip install labelimg
# 可选:用国内清华源加速(下载更快,避免超时)
pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple

方式二:源码安装(进阶,适合二次开发)

# 克隆 GitHub 仓库
git clone https://github.com/HumanSignal/labelImg.git
# 进入仓库目录
cd labelImg
# 安装依赖
pip install pyqt5 lxml
# 编译资源文件(仅需一次)
pyrcc5 -o libs/resources.py resources.qrc
# 启动程序
python labelImg.py

安装验证

在虚拟环境中输入 labelimg 并回车,若弹出 LabelImg 图形界面,说明安装成功。

3.2 LabelImg 完整操作流程(新手实操)

核心流程:启动工具→设置参数→加载图片→标注矩形框→保存标注→切换下一张,全程可视化操作,步骤如下:

步骤1:启动工具并设置基础参数

  1. 启动:虚拟环境中输入 labelimg,打开界面(默认英文,可在 View 菜单中勾选“Chinese”切换中文)。

  2. 加载图片文件夹:点击菜单栏「Open Dir」,选择存放原始图片的文件夹(建议将所有待标注图片放在同一个文件夹,方便管理)。

  3. 设置保存目录:点击「Change Save Dir」,选择一个专门存放标注文件的文件夹(建议与原始图片分开存放,避免文件混乱)。

  4. 切换标注格式:界面底部有「PascalVOC」和「YOLO」两个按钮,根据模型需求切换(默认 PascalVOC,生成 XML 文件;YOLO 模型选 YOLO,生成 TXT 文件)。

步骤2:开始标注(核心操作)

  1. 创建矩形框:点击左侧工具栏「Create RectBox」(或按快捷键 W),进入标注模式。

  2. 绘制矩形框:在图片中目标物体上,按下鼠标左键拖拽,绘制一个刚好包裹目标的矩形框(不宜过大或过小,尽量贴合目标边缘),松开鼠标。

  3. 输入标签:松开鼠标后,会弹出标签输入框,输入目标类别(如“car”“person”“cat”),点击「OK」(同类目标标签必须完全一致,如统一用“car”,不要混用“Car”“cars”)。

  4. 编辑标注:若矩形框位置偏差,可点击左侧「Edit RectBox」,拖动矩形框或边角调整大小;若标注错误,按 Del 键删除当前标注。

步骤3:保存与批量标注

  1. 保存标注:单张图片标注完成后,点击「Save」(或按快捷键 Ctrl+S),会自动生成对应格式的标注文件(XML/TXT),文件名与原始图片一致。

  2. 切换下一张:点击「Next Image」(或按快捷键 D),可加载下一张图片;若勾选 View 菜单中的「Auto Save mode」,切换图片时会自动保存当前标注,无需手动点击。

  3. 批量标注:重复步骤2-3,直至所有图片标注完成,标注文件会自动保存到之前设置的保存目录中。

3.3 标注格式解析(关键,适配模型训练)

LabelImg 最便捷的优势的是“一键切换格式”,无需手动转换,两种主流格式解析如下:

1. PascalVOC 格式(XML 文件,默认)

可读性强,存储了图片尺寸、目标坐标、标签等完整信息,可直接用于 Faster R-CNN 等模型,核心内容如下:

<annotation>
  &lt;filename&gt;car_01.jpg&lt;/filename&gt;  <!-- 原始图片文件名 -->
  &lt;size&gt;                          <!-- 图片尺寸 -->
    <width&gt;1920&lt;/width&gt;           <!-- 宽度 -->
    <height>1080&lt;/height&gt;         <!-- 高度 -->
    <depth>3</depth&gt;              <!-- 通道数(RGB为3) -->
  </size>
  &lt;object&gt;                         <!-- 标注的目标 -->
    <name&gt;car&lt;/name&gt;              <!-- 目标标签 -->
    &lt;bndbox&gt;                      <!-- 矩形框坐标(像素值) -->
      &lt;xmin&gt;100&lt;/xmin&gt;            <!-- 左上角x坐标 -->
      &lt;ymin&gt;200&lt;/ymin&gt;            <!-- 左上角y坐标 -->
      &lt;xmax&gt;400&lt;/xmax&gt;            <!-- 右下角x坐标 -->
      &lt;ymax&gt;500&lt;/ymax&gt;            <!-- 右下角y坐标 -->
    </bndbox>
  </object>
</annotation>

2. YOLO 格式(TXT 文件)

专为 YOLO 模型设计,存储归一化后的相对坐标(范围 0~1),无需手动转换,核心格式如下:

每行代表一个目标,格式:class_id x_center y_center width height

  • class_id:类别索引(从0开始,需提前定义类别列表,如0=car、1=person);

  • x_center、y_center:矩形框中心点的归一化坐标;

  • width、height:矩形框宽度和高度的归一化值;

示例(TXT 文件内容):0 0.25 0.35 0.15 0.20,LabelImg 会自动计算归一化坐标,无需手动计算。

3.4 LabelImg 实用技巧与避坑指南

  • 快捷键高效操作(必记):W=创建矩形框、D=下一张、A=上一张、Del=删除标注、Ctrl+S=保存、Ctrl+Z=撤销;

  • 标签统一:标注前先定义好所有类别(如“cat”“dog”),避免大小写、单复数混乱(如“Cat”和“cat”会被识别为两个类别);

  • 闪退问题(Python 3.10+):若打开后绘制矩形框闪退,需修改两个文件(路径:虚拟环境目录\Lib\site-packages\libs):

    • canvas.py:第526、530、531行,将坐标值改为int类型(如 int(left_top.x()));

    • shape.py:第131行,将 painter.drawText 后的坐标改为int类型(如 int(min_x), int(min_y))。

四、LabelMe 详细使用教程(分割类标注首选)

LabelMe 功能比 LabelImg 更丰富,支持多边形、点、线段等多种标注形态,核心用于语义分割、实例分割等需要精细勾勒目标轮廓的场景,标注结果需转换为掩码图后用于模型训练。

4.1 安装 LabelMe

同样在激活的虚拟环境中操作,推荐 Pip 一键安装,步骤如下:

# 先安装界面依赖 PyQt5(避免后续报错)
pip install pyqt5
# 安装 LabelMe
pip install labelme
# 可选:清华源加速
pip install labelme pyqt5 -i https://pypi.tuna.tsinghua.edu.cn/simple

安装验证

虚拟环境中输入 labelme 并回车,弹出 LabelMe 图形界面,即安装成功。

注意:LabelMe 版本过高可能导致后续格式转换报错,若出现 ValueError: Too many dimensions 错误,可参考下文“避坑指南”解决,无需降级版本。

4.2 LabelMe 完整操作流程(新手实操)

核心流程:启动工具→加载图片→选择标注工具→勾勒目标轮廓→保存JSON→格式转换,重点在于“精细勾勒”和“格式转换”,步骤如下:

步骤1:启动工具并加载图片

  1. 启动:虚拟环境中输入 labelme,打开界面(默认英文,可在 Edit→Preferences 中切换中文)。

  2. 加载图片:有两种方式,一是点击「Open」加载单张图片,二是点击「Open Dir」加载整个图片文件夹(批量标注推荐)。

步骤2:选择标注工具并勾勒轮廓(核心操作)

LabelMe 提供多种标注工具,常用的有3种,根据场景选择:

  • Create Polygons(多边形工具,最常用):用于语义/实例分割,勾勒目标完整轮廓,快捷键 P

  • Create Rectangles(矩形工具):用于简单目标框选,类似 LabelImg,快捷键 R

  • Create Points(点工具):用于关键点检测(如人脸关键点、姿态关键点),快捷键 O

以最常用的「多边形标注」为例,操作如下:

  1. 点击左侧「Create Polygons」,或按快捷键 P,进入标注模式;

  2. 在目标物体边缘,依次点击鼠标左键,绘制多边形顶点(点越密集,轮廓越精细);

  3. 撤销错误顶点:按 Ctrl+Z 撤销上一个顶点;

  4. 闭合轮廓:当最后一个顶点与第一个顶点重合时,会自动闭合多边形,此时弹出标签输入框,输入目标标签(如“leaf”“tumor”),点击「OK」;

  5. 编辑轮廓:点击左侧「Edit Polygons」,可拖动顶点调整轮廓位置,或添加/删除顶点(右键顶点可删除)。

步骤3:保存标注文件

单张图片标注完成后,点击「Save」(或按 Ctrl+S),会生成一个与原始图片同名的 .json 文件,该文件包含了标注的所有信息(顶点坐标、标签、图片尺寸等)。

注意:JSON 文件不能直接用于模型训练,需转换为像素级的掩码图(PNG格式)。

4.3 标注结果格式转换(关键步骤)

LabelMe 标注后生成的 JSON 文件,需转换为掩码图(Label Mask)才能用于分割模型训练,分为「单文件转换」和「批量转换」两种方式。

方式1:单文件转换(适合少量标注)

在虚拟环境中,执行以下命令,将单个 JSON 文件转换为掩码图:

# 格式:labelme_json_to_dataset 你的JSON文件路径
labelme_json_to_dataset ./annotations/car_01.json

执行后,会生成一个同名文件夹,里面包含5个文件,核心是 label.png(掩码图),每个像素值对应一个类别,用于模型训练。

方式2:批量转换(适合大量标注,推荐)

当有大量 JSON 文件时,手动转换效率低,可使用 LabelMe 源码中的 labelme2voc.py 脚本批量转换,步骤如下:

  1. 克隆 LabelMe 源码:git clone https://github.com/wkentaro/labelme

  2. 进入源码目录:cd labelme

  3. 创建 labels.txt 文件:在源码目录中,新建 labels.txt,写入所有标注类别(每行一个,第一行写 __ignore__,第二行写 _background_,后续写自定义类别),示例: __ignore__ _background_ car person cat

  4. 执行批量转换命令: # 格式:python labelme2voc.py 输入JSON目录 输出目录 --labels labels.txt python labelme2voc.py ./json_dir ./output_dir --labels labels.txt

  5. 转换完成后,输出目录中会生成 JPEGImages(原始图片)和 SegmentationClass(掩码图),可直接用于模型训练。

4.4 LabelMe 实用技巧与避坑指南

  • 带洞目标标注:若目标内部有空洞(如甜甜圈、带孔零件),先标注外部轮廓(标签为目标类别),再标注内部空洞轮廓(标签设为 _background_),转换后空洞会被识别为背景;

  • 格式转换报错解决:若出现「ValueError: Too many dimensions: 3 > 2」,无需降级 LabelMe,只需修改转换脚本,将 lbl = utils.shapes_to_label(...) 改为 lbl, ins = utils.shapes_to_label(...)(lbl 为类别掩码,ins 为实例掩码);

  • 中文乱码(Windows):查看转换后的可视化图片时,若标签中文乱码,找到 LabelMe 安装目录下的label_file.py,在第36行左右,修改文件读取编码为 UTF-8;

  • 快捷键高效操作:P=多边形标注、R=矩形标注、O=点标注、Ctrl+Z=撤销、Ctrl+S=保存、D=下一张、A=上一张。

五、总结与拓展建议

LabelImg 和 LabelMe 都是开源免费、功能强大的标注工具,核心区别在于适用场景:

  • 目标检测(画矩形框):优先用 LabelImg,轻量、高效,无需手动转换格式;

  • 分割类任务(画轮廓):优先用 LabelMe,标注精细,支持多种形态,转换后可直接用于模型训练。

对于新手来说,建议先掌握 LabelImg 的基础操作,完成简单的目标检测标注任务,再学习 LabelMe 的多边形标注和格式转换,逐步提升标注效率和精度。

拓展建议:

  1. 标注规范:标注前制定统一的标签规范,避免标签混乱,提升数据集质量;

  2. 批量处理:当数据集规模较大时,可结合脚本(如 Python 批量重命名图片),搭配两款工具的批量功能,提升标注效率;

  3. 问题排查:若遇到安装或操作报错,可查看工具的 GitHub Issues 或官方文档,大部分常见问题都有解决方案。

最后,标注是一个“细致活”,高质量的标注才能训练出高精度的模型。希望这篇教程能帮你快速上手 LabelImg 和 LabelMe,少走弯路,高效完成标注任务~

 

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐