从散图到可训练数据集:用 Labelme 一个下午完成图像标注全流程

发布时间:2026/11/3 1:26:58
从散图到可训练数据集:用 Labelme 一个下午完成图像标注全流程

从散图到可训练数据集:用 Labelme 一个下午完成图像标注全流程

【免费下载链接】labelmeImage annotation with Python. Supports polygon, rectangle, circle, line, point, and AI-assisted annotation.项目地址: https://gitcode.com/gh_mirrors/la/labelme

图是攒了一堆,可模型还饿着肚子——因为标注一个字都没标。Labelme 是一个基于 Python 与 Qt 的桌面图像标注工具,干的就是这件事:把散落的照片逐张标注、按图存成 JSON,再经一条命令批量转成 VOC 或 COCO 数据集,直接对接训练流程。整个过程不需要写一行代码。

先判断它适不适合你的项目

上手之前花一分钟确认边界:

  • 开源协议是 GPL-3.0-only。只在自己团队内部标数据,完全没问题;一旦基于它做二次开发还要把软件分发出去,就得按 GPL 条款走,拿不准就问一句法务。
  • 64 位 macOS、Windows、Linux 都能跑,Python 要求 3.12 及以上。
  • 可标的形状有五种:多边形、矩形、圆形、线条、点;另支持图像级 flags,整张图挂一个类别标记,分类和质检场景用得上。
  • 产物是逐图的 JSON;再经仓库自带的转换脚本,可得到 VOC 的 XML 与分割掩码,或 COCO 的annotations.json。

你的任务落在这几种形状里,训练框架吃 VOC 或 COCO,它就没问题。

安装 Labelme 并打开第一个目录

git clone https://gitcode.com/gh_mirrors/la/labelme cd labelme pip install -e .

装完别急着标自己的图。examples 示例目录 里备好了目标检测、语义分割、分类、视频标注等成套样例,先用现成的练手感最省事:

labelme examples/instance_segmentation/data_annotated

窗口打开后先认一遍地盘:左侧竖条是按形状分组的创建工具,中间是画布,右侧从上到下是 Label List(全局可用标签)、Polygon Labels(当前图内的标注)、File List(整个目录的文件清单)。标题栏写着"当前第几张 / 共几张",你随时知道自己标到哪。

上图中多边形已经闭合,标签对话框正等着填类别名,对话框下方还预填了上一次用过的标签。

标出第一个多边形

就着打开的这张沙发照片标第一个人物,这是最核心的工作流。

点左侧Create Polygons进入标注模式,光标变成十字。沿人物轮廓逐点单击,每落一个点,画布上就多出一个绿色小圆点,折线把各点依次连起来,实时描出你当前的进度。别急着闭合——发现前一个点偏了,按Ctrl+Z退掉它再点一次就行。

绕回到起点附近,双击(或按 Enter)闭合。这时屏幕上会弹出一个标签对话框,输入类别名(比如person),点 OK,多边形立刻换成该标签对应的颜色和填充色。最后Ctrl+S保存,窗口状态里能看到保存动作完成的提示。一张图上的第一个人物,到这一步就算真正落袋了。

保存的到底是什么:图旁的同名 JSON

很多人标完第一张就去翻目录,其实答案很简单:每张图的标注就是它旁边那个同名的.json文件,和图片同目录。保存时它被新建或覆盖,打开看一下,shapes数组里每个形状都有label、顶点坐标points、group_id,外加图片自身的imagePath、宽高和文件大小——信息量足以还原图上任何一个形状。

回看右侧 File List,带勾选标记的图就是已经有标注的;没勾选的说明还没标。每保存一次,对应图旁的 JSON 就多一分完整。批量标注时,这个清单就是你的进度表。

一条命令转成 VOC 或 COCO 数据集

标注攒够一批后,用 examples 目录 里现成的脚本把整个标注目录一次转掉:

cd examples/instance_segmentation ./labelme2voc.py data_annotated data_dataset_voc --labels labels.txt ./labelme2coco.py data_annotated data_dataset_coco --labels labels.txt

前者产出 VOC 结构:JPEGImages、Annotations(矩形框的 XML)、SegmentationClass等掩码目录;后者产出JPEGImages加一个annotations.json,bbox 字段就在里面。两种结构主流训练框架都认。

转换只是前半程,后半程是校验。打开生成目录里的 Visualization 图片逐张看:掩码是否贴住了目标、每个类别的颜色是否对得上标签表。

这张就是转换后的像素级可视化:每个类别一种颜色,右下角图例给出数值与类别的对应,方便逐像素核对。发现某个多边形偏了,回 Labelme 里改掉、重存、再跑一遍脚本——来回一次只要几十秒,闭环成本很低。

从"能用"到"顺手"

想标得快一些,有三件事值得先做。

把标签清单预置到项目里:在图片目录放一个labels.txt,每行一个合法标签,启动时加--labels labels.txt载入,再配--validate-label exact强制校验,拼错或漏写的标签在对话框里就会被挡下。换一批图片时,带着同一份labels.txt重新开目录,标签体系就复用了。

键盘流是熟练后的默认状态:Ctrl+S保存、Ctrl+Z撤销、Delete删掉选中形状,D和A切下一张、上一张,Ctrl+F让画面适应窗口。标到几十张之后你会发现,鼠标只在落顶点时才需要动。

目标轮廓大又规则时,顶部工具栏的 AI-Assisted Annotation 面板能省掉大部分描边时间:选一个 SAM 系列模型,在图上点一下,它就自动产出多边形或掩码,你只负责修边。视频场景同理,用D键逐帧推进,每帧各存各的 JSON。

图中 File List 是一串连续帧,当前帧上标好了 track 和 car,按D就推进到下一帧继续。

标错了、想复用、要保质量,怎么办

标错了怎么回退?Ctrl+Z是万能后悔药:画多边形时每按一次退掉最后一个顶点,画完了就退掉整个形状;Delete则把选中形状整个删掉,改标签选Ctrl+E打开标签编辑。

质量怎么保证?源头靠--validate-label exact把拼写问题挡在对话框里;过程靠 File List 的勾选标记追踪进度;交付前重跑一次转换脚本抽查 Visualization 即可。批量标注最怕的就是错误在最后一刻集中暴露,前两步能把它压散。

分类任务也要画形状吗?不用。flags 面板可以直接给整张图挂标签,整图即样本,适合分类和质检。

给自己布置一个可验收的小作业

挑一张自己的图,完整走一遍"标注 → 保存 → 转换 → 校验":标两三个形状,Ctrl+S落盘,看一眼同名的.json是否生成;把它放进一个标注目录,跑一次labelme2voc.py或labelme2coco.py,打开产物目录确认JPEGImages、Annotations或annotations.json都在,Visualization 里掩码也贴得住。再对照你的训练脚本读目录的方式,确认字段对得上。

全部对上了,这套流程就算真正跑通;剩下的,只是把同样的动作重复到整个数据集上。

【免费下载链接】labelmeImage annotation with Python. Supports polygon, rectangle, circle, line, point, and AI-assisted annotation.项目地址: https://gitcode.com/gh_mirrors/la/labelme

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考