4、标注工具LabelImg:安装、界面与格式切换

做目标检测,数据标注是绕不开的一步。我见过不少新手,模型选得挺新,代码也跑得溜,结果卡在标注上——要么格式不对,要么效率太低。说白了,标注工具就是你和数据之间的桥梁。今天咱们就聊聊最常用的那个:LabelImg。

本章核心:学会安装LabelImg、熟悉界面布局、掌握PascalVOC与YOLO格式的切换、熟练使用快捷键。学完你就能独立完成一个数据集的标注工作了。

4.1 LabelImg是什么?为什么选它?

LabelImg是一个开源的图像标注工具,用Python + Qt写的。它支持两种主流格式:PascalVOC(XML文件)和YOLO(TXT文件)。我个人习惯用它,原因很简单:轻量、免费、跨平台,而且社区活跃,遇到问题基本都能搜到答案。

你可能会问:「现在不是有LabelStudio、CVAT这些更炫的工具吗?」没错,那些工具功能确实多,但LabelImg的优势在于——开箱即用,没有学习曲线。我刚开始做项目时,团队里有人推荐CVAT,结果部署就花了两天。后来换回LabelImg,十分钟搞定。嗯,有时候简单就是最好的。

4.2 安装LabelImg

安装方式分三种,我按推荐程度排个序:

方式 命令/步骤 适用场景
pip安装(推荐) pip install labelimg Windows / Linux / macOS通用
源码安装 git clone + python labelImg.py 需要自定义功能时
Windows exe 下载打包好的exe文件 不想装Python环境

我的建议:直接用pip安装。我在项目里试过源码安装,虽然能改界面,但日常标注完全用不上那些定制功能。别给自己找麻烦。

安装完成后,终端输入 labelimg 就能启动。如果报错,多半是Python版本问题——LabelImg要求Python 3.6以上。我曾经在Python 3.5的环境下折腾了半天,最后发现是版本不兼容。你想想看,这种坑踩一次就够了。

4.3 界面介绍

启动后你会看到一个简洁的界面。别被它「简陋」的外表骗了,该有的功能一个不少。我把它分成五个区域:

  1. 菜单栏(顶部):文件操作、格式切换、视图设置都在这里。
  2. 工具栏(左侧):打开目录、保存、创建矩形框、编辑标签等核心操作。
  3. 图像显示区(中央):你标注的图片会显示在这里,支持缩放和平移。
  4. 标签列表(右侧):显示当前图片的所有标注框和对应的标签名。
  5. 文件列表(右下):当前目录下的所有图片,点击即可切换。

我第一次用的时候,找了半天「保存」按钮——其实它就在左侧工具栏第二个图标。说白了,LabelImg的界面设计遵循「少即是多」的原则,每个按钮都有明确的用途,没有多余的装饰。

注意:启动后默认是PascalVOC格式。如果你要做YOLO训练,记得先切换格式,否则生成的XML文件YOLO读不了。我见过有人标注了500张图,最后发现格式不对……那感觉,别提了。

4.4 PascalVOC与YOLO格式切换

这是本章的重点。两种格式的区别,我用一张表说清楚:

对比项 PascalVOC YOLO
文件格式 XML TXT
坐标表示 左上角(xmin,ymin) + 右下角(xmax,ymax) 中心点(x_center,y_center) + 宽高(width,height)
坐标归一化 像素值 相对值(0~1之间)
每张图片文件数 1个XML文件 1个TXT文件
标签存储 标签名直接写在XML里 用类别ID(数字)表示

切换方法很简单:点击菜单栏 View → Change Save Dir,然后选择YOLO格式。或者直接用快捷键 Ctrl+Y。切换后,保存的文件就会从XML变成TXT。

为什么会这样设计?PascalVOC格式更「人类可读」,你打开XML能看到标签名、坐标、甚至图片尺寸。而YOLO格式是为模型设计的——数字计算更快,文件更小。说白了,一个给人看,一个给机器看。

关键点:YOLO格式的坐标是归一化的。公式是:
x_center = (xmin + xmax) / 2 / image_width
y_center = (ymin + ymax) / 2 / image_height
width = (xmax - xmin) / image_width
height = (ymax - ymin) / image_height

所有值都在0~1之间。这也是为什么YOLO训练时不关心图片原始尺寸——它只看相对位置。

4.5 快捷键操作

标注是个重复性工作,效率全靠快捷键。我刚开始用手动点按钮,一天标200张就累得不行。后来把快捷键背熟了,一天能标600张。你想想看,差距就在这里。

下面是我最常用的快捷键,按使用频率排序:

快捷键 功能 我的使用场景
W 创建矩形框 标注新目标时,按W然后拖拽
A / D 上一张 / 下一张图片 切换图片,比鼠标点快3倍
Ctrl+S 保存 每标完一张图就按一次,养成习惯
Ctrl+Z 撤销 画错了?一键撤销,不用删框重画
Delete 删除选中框 框选错了目标,直接删
Ctrl+Y 切换YOLO格式 开始标注前先切好格式
Ctrl+R 重置缩放 放大后想回到原始视图
空格 标记为已检查 确认当前图片标注无误

我的习惯:左手放在键盘左侧(W、A、D、Ctrl区域),右手握鼠标。这样左手负责快捷键,右手负责画框,效率最高。你可以试试看,一开始可能不习惯,但用半小时后就回不去了。

4.6 标注流程实战

说了这么多,咱们走一遍完整的标注流程。假设你要标注一个「行人检测」数据集:

  1. 准备图片:把所有图片放在一个文件夹里,比如 images/。
  2. 启动LabelImg:终端输入 labelimg。
  3. 打开图片目录:点击 Open Dir,选择 images/ 文件夹。
  4. 设置保存目录:点击 Change Save Dir,选择另一个文件夹(比如 labels/)。
  5. 切换格式:按 Ctrl+Y 切换到YOLO格式。
  6. 创建标签列表:点击菜单 Edit → Create RectBox,输入标签名(比如 person)。
  7. 开始标注:按 W,在图片上拖拽框出行人,松开后选择标签。
  8. 保存:按 Ctrl+S,生成对应的TXT文件。
  9. 下一张:按 D 切换到下一张图片,重复步骤7-8。

嗯,就这么简单。但有几个细节要注意:

  • 框要贴边:矩形框尽量紧贴目标边缘,不要留太多背景。我见过有人框得松松垮垮,模型学到的特征里一半是背景,精度直接掉10个点。
  • 遮挡目标也要标:如果行人被汽车挡住了一半,照样要框出来。模型需要学会识别遮挡情况。
  • 小目标要放大标:图片里远处的小人,用滚轮放大后再框。我曾经因为偷懒,小目标框得不准,结果模型对小目标的召回率惨不忍睹。

避坑指南:我曾经犯过一个低级错误——标注完一批数据后,发现TXT文件里全是0 0 0 0 0。查了半天,原来是忘记切换YOLO格式了,保存的还是XML。后来LabelImg自动把XML转成了TXT,但坐标全是0。所以,开始标注前一定要确认格式。

4.7 知识结构总览

下面这张图帮你梳理本章的知识体系:

LabelImg知识结构图 LabelImg 标注工具知识结构 LabelImg 安装方式 界面布局 格式切换 快捷键操作 pip安装 源码安装 exe安装 菜单栏 工具栏 图像显示区 标签列表 PascalVOC YOLO格式 Ctrl+Y切换 W 创建框 A/D 切换图 Ctrl+S 保存 Delete 删除 标注流程总结 准备图片 → 启动LabelImg → 打开目录 → 切换YOLO格式 → 创建标签列表 → 按W画框 → Ctrl+S保存 → D下一张

4.8 常见问题与避坑

最后,我把这些年遇到的高频问题列出来,你遇到了直接对照着查:

问题 原因 解决方法
启动报错 No module named 'PyQt5' 缺少Qt依赖 pip install PyQt5
保存后找不到TXT文件 没有切换YOLO格式 按Ctrl+Y切换,重新保存
标签列表为空,无法选择 没有创建标签 点击 Edit → Create RectBox 添加标签
图片显示不全 图片太大或缩放异常 按Ctrl+R重置缩放
标注框无法拖动调整 鼠标模式不对 点击工具栏的「Edit」模式,再拖动框边缘

嗯,以上就是LabelImg的全部核心内容。工具本身不复杂,但用好它需要养成习惯——先切格式、再标注、勤保存。我刚开始也嫌麻烦,后来吃过亏才老实了。你记住这三个词,能省掉80%的麻烦。