2. 标注工具入门:Labelme安装与配置、界面介绍、基本操作流程

做图像分割,第一步就是搞定标注工具。我见过太多人一上来就研究算法,结果数据标注环节卡了半个月。说白了,标注是地基,地基不稳,后面全是白费功夫。

今天咱们就聊聊 Labelme 这个工具。它是我个人最常用的标注工具之一,轻量、开源、跨平台,特别适合做语义分割和实例分割的标注。嗯,咱们直接上手。

2.1 Labelme 是什么?

Labelme 是一个基于 Python 的图像标注工具。它用起来很简单——打开图片,沿着物体边缘画点,保存成 JSON 文件。就这么三步。

你可能会问:为什么不用 LabelImg?那个不是更流行吗?

没错,LabelImg 确实很火,但它主要做目标检测的矩形框标注。而 Labelme 支持多边形标注,能精确勾勒出物体的轮廓。做分割任务,多边形是刚需。

核心概念:Labelme 生成的 JSON 文件里,存储的是每个标注对象的 多边形顶点坐标类别标签。后续训练时,我们会把这些坐标转成 mask 掩码图。

2.2 安装与配置

安装 Labelme 非常简单。我建议直接用 pip 安装,省心。

# 推荐使用 Python 3.6 以上版本
pip install labelme

如果你用的是 Anaconda 环境,也可以创建一个虚拟环境来装:

conda create -n labelme python=3.8
conda activate labelme
pip install labelme

安装完成后,在终端输入 labelme 就能启动。我第一次用的时候,敲完命令等了两秒没反应,还以为装错了。其实它启动需要一点时间,别急。

小技巧:如果你在 macOS 上遇到权限问题,试试 pip install --user labelme。我在公司配新电脑时就踩过这个坑。

2.3 界面介绍

Labelme 的界面非常简洁。打开后你会看到:

  • 左侧工具栏:包含打开文件、保存、撤销、删除等按钮
  • 中央画布:显示当前图片,标注操作都在这里完成
  • 右侧文件列表:显示当前文件夹下的所有图片
  • 底部状态栏:显示当前鼠标坐标、缩放比例等信息

说实话,我第一次打开时觉得这界面也太简陋了。但用久了你会发现,这种极简设计反而高效——没有花里胡哨的功能干扰你,专注做标注。

2.4 基本操作流程

咱们走一遍完整流程。我以标注一张包含「猫」和「狗」的图片为例。

第一步:打开图片

点击左侧工具栏的 Open Dir 按钮,选择存放图片的文件夹。右侧文件列表会显示所有图片。双击任意一张,它就会出现在中央画布上。

注意:Labelme 默认只显示常见图片格式(jpg、png、bmp 等)。如果你的图片是 tiff 格式,需要先转换一下。我曾经因为这个问题折腾了半小时,后来才发现是格式不兼容。

第二步:创建多边形标注

点击左侧的 Create Polygons 按钮(或者按快捷键 Ctrl+N),鼠标会变成十字形。然后沿着物体边缘依次点击,每个点都会形成一个顶点。

举个例子,标注一只猫:

  1. 从猫的耳朵开始,点击第一个点
  2. 沿着猫的轮廓,每隔一段距离点击一次
  3. 绕完一圈后,双击鼠标左键,自动闭合多边形
  4. 弹出对话框,输入标签名称,比如 "cat"

嗯,这里要注意:点不要点得太密,否则文件会很大;也不要太稀疏,否则轮廓不准确。我个人习惯是每隔 10-15 像素点一个点,边缘弯曲的地方加密一些。

第三步:保存 JSON 文件

标注完一张图后,点击 Save 按钮(或按 Ctrl+S)。Labelme 会自动生成一个同名的 JSON 文件,保存在图片所在的文件夹里。

比如图片叫 cat_dog.jpg,保存后就会生成 cat_dog.json

{
  "version": "4.5.6",
  "flags": {},
  "shapes": [
    {
      "label": "cat",
      "points": [
        [120, 45],
        [135, 40],
        [150, 50],
        ...
      ],
      "group_id": null,
      "shape_type": "polygon",
      "flags": {}
    },
    {
      "label": "dog",
      "points": [
        [300, 200],
        [320, 195],
        ...
      ],
      "group_id": null,
      "shape_type": "polygon",
      "flags": {}
    }
  ],
  "imagePath": "cat_dog.jpg",
  "imageData": null
}

你看,JSON 的结构很清晰。每个 shapes 对象代表一个标注,包含标签名和顶点坐标。这就是我们后续要解析的数据。

避坑指南:我曾经犯过一个低级错误——标注完忘记保存,直接关了软件。结果半小时的标注全没了。所以我的建议是:每标完一张图,立刻保存。养成习惯。

2.5 核心流程示意图

下面这张图展示了 Labelme 标注的核心流程,从打开图片到生成 JSON,一目了然。

打开图片 Open Dir → 选择图片 创建多边形 Create Polygons → 描边 保存 JSON Save → 生成 .json 输出:JSON 文件 包含多边形顶点 + 类别标签 Labelme 标注核心流程

2.6 常用快捷键

用熟了之后,快捷键能大幅提升效率。我整理了一份常用快捷键表:

快捷键 功能 说明
Ctrl+N 创建多边形 开始标注新物体
Ctrl+Z 撤销上一个点 画错时回退,非常实用
Ctrl+S 保存当前标注 每标完一张图立刻按
Ctrl+Del 删除选中标注 标错了直接删掉重来
滚轮 缩放图片 细节标注时放大看
按住右键拖动 平移画布 放大后移动视野

重要提醒:Labelme 的撤销功能只能撤销当前多边形的上一个点,不能撤销整个标注。如果你标到一半想放弃当前物体,按 Esc 键取消即可。

2.7 我的一点经验

最后分享几个小经验:

  • 标注顺序:我习惯先标大物体,再标小物体。比如先标背景中的房子,再标前景的人。这样不容易漏标。
  • 标签命名:尽量用英文小写,不要用中文。因为后续代码处理时,中文可能引起编码问题。我吃过这个亏。
  • 多人协作:如果团队多人标注,建议统一标签名称。比如有人写 "cat",有人写 "Cat",后面合并数据时会很麻烦。

好了,Labelme 的基础操作就这些。说白了,它就是「打开图片 → 画多边形 → 保存 JSON」这三板斧。但别小看这三步,做得规范了,后面的训练流程会顺畅很多。


公众号:蓝海资料掘金营,微信deep3321