3、LabelImg高级功能:自动保存、快捷键设置、标签管理、批量操作

说实话,很多人用LabelImg就是打开、画框、保存、下一张。这样用当然没问题,但效率嘛……我见过一个学员标注500张图用了整整两天,手都点酸了。其实LabelImg藏着不少好东西,用好了能省一半时间。今天我就把这些压箱底的功能翻出来,一个个说清楚。

3.1 自动保存:别再手动Ctrl+S了

我刚开始做标注的时候,有个坏习惯——画完一张图就猛按Ctrl+S。后来项目量大了,一天要标几百张,手指头都快抽筋了。后来我发现,LabelImg其实自带自动保存功能。

怎么开启?很简单,在菜单栏找到 ViewAuto Save mode,勾上就行。或者直接按快捷键 Ctrl+Shift+A

我的小技巧:自动保存默认是每切换一张图就保存一次。我个人习惯是配合「自动下一张」一起用,画完框直接按 WD 切换到下一张,标注文件自动就存好了。全程不用碰鼠标去点保存按钮。

你可能会问:「万一标错了怎么办?」嗯,这个问题问得好。自动保存确实会覆盖之前的标注,所以我建议你搭配版本管理工具(比如Git)来用。我自己的做法是每标完100张就手动备份一次,防止手滑。

3.2 快捷键设置:把常用操作绑在指尖

LabelImg默认的快捷键其实够用,但每个人的习惯不一样。比如我习惯用 W 画框,但有人觉得 R 更顺手。好在LabelImg支持自定义快捷键。

设置入口:菜单栏 FileSettingsShortcuts

这里我列一下我最常用的快捷键配置,供你参考:

功能 默认快捷键 我改成的键 说明
创建矩形框 W W 这个不改,W最顺手
下一张图片 D Space(空格) 空格键按起来更爽
上一张图片 A Shift+Space 防止误触
删除选中框 Delete Ctrl+D Delete键太远了
保存 Ctrl+S Ctrl+S 保留默认,但开了自动保存后很少用
放大/缩小 Ctrl++ / Ctrl+- 滚轮 鼠标滚轮缩放更自然
注意:改快捷键的时候,别跟系统快捷键冲突。我曾经把 Ctrl+C 改成了别的功能,结果复制粘贴全废了,折腾了半天才改回来。建议你先在脑子里过一遍常用操作,再动手改。

3.3 标签管理:别让标签列表变成垃圾堆

做YOLO项目最怕什么?标签混乱。我见过一个项目,光「car」就有 carCarCARcars 四种写法。训练的时候模型直接懵了——同一个东西,标签名不一样,它怎么学?

LabelImg的标签管理功能,就是用来治这个毛病的。

在菜单栏 EditLabel List 里,你可以看到当前项目用到的所有标签。这里有几个实用操作:

  • 添加标签:Add,输入标签名。建议统一用小写字母,比如 personcardog
  • 删除标签:选中一个标签,点 Remove。注意,这个操作会删除所有使用该标签的标注框!
  • 重命名标签:选中标签,点 Rename。比如把 Car 改成 car,所有标注框的标签名都会同步更新。
我的血泪教训:有一次我忘了统一标签名,训练出来的模型把「Car」识别成「car」的概率只有60%。后来我写了个Python脚本,把XML文件里的标签名全部替换了一遍。从那以后,我每次开始标注前,都会先建好一个标准的标签列表文件(classes.txt),然后导入到LabelImg里。

怎么导入标签列表?FileOpen Dir 选择图片文件夹后,再点 Change Save Dir 选择标注文件保存位置。然后在 EditLabel List 里,点 Load,选择你的 classes.txt 文件。这样所有标签就自动加载好了,画框时直接选,不用手打。

3.4 批量操作:一次搞定一堆图

批量操作是LabelImg里最容易被忽略的功能。我刚开始也不知道,后来项目催得紧,才硬着头皮研究出来的。

批量修改标签名:这个前面提到了,在标签列表里重命名,所有标注框一起改。比如你发现「bicycle」拼错了,改成「bike」,所有XML文件里的标签名都会变。

批量删除标签:在标签列表里删除某个标签,所有包含这个标签的标注框都会被删掉。慎用!我建议先备份再操作。

批量调整标注框:这个功能藏得比较深。在 ViewAuto Labeling 里,你可以设置一些规则,比如「所有框的宽度不能小于10像素」。但说实话,这个功能我用得不多,因为自动调整有时候会误伤。

批量导出格式:LabelImg默认保存为Pascal VOC格式(XML文件)。但YOLO需要的是TXT文件。别慌,LabelImg支持批量转换。在 FileExport 里,选择 YOLO 格式,然后选择保存目录。它会自动把当前文件夹里所有XML文件转换成YOLO格式的TXT文件。

一个小技巧:如果你需要频繁在VOC和YOLO格式之间切换,可以写个批处理脚本。我自己的做法是:标注时用VOC格式(因为LabelImg原生支持),训练前用脚本批量转成YOLO格式。这样既保留了原始标注数据,又能灵活适配不同的训练框架。

3.5 避坑指南:我踩过的那些坑

最后,分享几个我实际项目中遇到的坑,你遇到了可以少走弯路:

  • 坑一:自动保存和手动保存混用,导致文件冲突。解决方案:要么全自动,要么全手动,别混着来。
  • 坑二:快捷键改得太花哨,结果自己都记不住。建议只改3-5个最常用的,其他的保持默认。
  • 坑三:标签名用了中文。YOLO对中文支持不太好,训练时容易报编码错误。老老实实用英文吧。
  • 坑四:批量操作前没备份。我曾经一键删除了所有「car」的标注,结果发现删错了……从那以后,每次批量操作前,我都会把整个标注文件夹复制一份。

好了,LabelImg的高级功能就这些。说实话,这些功能看着不起眼,但用好了真的能省不少时间。你想想看,别人标1000张图要两天,你用这些技巧可能一天就搞定了。剩下的时间,喝杯咖啡,或者研究研究模型调参,不香吗?