ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

LabelMe 图像分类标注实战:基于 --flags 的图像级类别标注指南

LabelMe 图像分类标注实战:基于 --flags 的图像级类别标注指南 数据标注计算机视觉桌面应用【免费下载链接】labelmeImage annotation with Python. Supports polygon, rectangle, circle, line, point, and AI-assisted annotation.项目地址https://gitcode.com/gh_mirrors/la/labelme点击查看免费下载导读图像分类标注不需要画框、画多边形只需要为整张图片打上一个类别标签例如“cat”“dog”。本文以 labelme 仓库中的 classification 示例 为骨架完整讲解如何用 labelme 的--flags机制完成图像级分类标注从flags.txt的编写、命令行启动到 JSON 标注文件的解析、GUI 交互行为再到与实例分割等形状标注流程的差异与进阶用法正则驱动的--label-flags动态规则。读完本文你将掌握一套可复制、可运行的图像分类标注工作流并能理解其底层实现原理。一、示例概览用 Flags 表达图像级类别在 examples/classification 目录下官方提供了最简化的分类标注示例flags.txt声明可用的类别标签flag列表data_annotated/0001.jpg与0001.json一张猫图片及其标注结果flagcat: truedata_annotated/0002.jpg与0002.json一张狗图片及其标注结果flagdog: true。与实例分割示例examples/instance_segmentation不同分类示例的 JSON 中shapes为空数组——不标注任何几何形状类别信息全部存放在flags字段中。这正是“图像分类”与“目标检测 / 实例分割”在标注层面的本质区别前者给整张图打标签后者给图中的每个目标画形状。二、启动命令与 flags.txt 的编写官方 README 给出的启动命令只有一行labelme data_annotated --flags flags.txt其中data_annotated是待标注图片目录--flags flags.txt指定类别定义文件。示例中的 flags.txt 内容如下__ignore__ cat dog每行一个 flag 名。第一行__ignore__是保留项勾选后表示“跳过/忽略”该图不参与分类常用于过滤质量不合格的样本。后面每一行就是一个候选类别例如cat、dog。类别名称支持任意自定义字符串如bus、person、defect_ok实际使用中可按业务命名。--flags 参数解析规则源码级验证--flags参数在 labelme/main.py 中定义帮助信息写明其接受两种形式逗号分隔列表如--flags cat,dog文件路径每行一个 flag如--flags flags.txt。具体解析由_parse_list_arg完成labelme/main.pydef _parse_list_arg(value: str, /) - list[str]: if os.path.isfile(value): with open(value, encodingutf-8) as f: return [line.strip() for line in f if line.strip()] return [line.strip() for line in value.split(,) if line.strip()]可以看到当参数值是一个存在的文件时按行读取、自动去除首尾空白与空行否则按逗号切分。因此两种写法的效果等价# 写法一文件 labelme data_annotated --flags flags.txt # 写法二内联逗号列表 labelme data_annotated --flags cat,dog三、标注结果解析JSON 中的 flags 字段完成标注并保存后每张图对应一个 JSON 文件。示例中 0001.json 的完整内容为{ version: 4.0.0, flags: { __ignore__: false, cat: true, dog: false }, shapes: [], imagePath: 0001.jpg, imageData: null, imageHeight: 480, imageWidth: 640 }0002.json 则对应dog: true, cat: false。逐字段说明字段含义分类示例中的取值version标注文件格式版本4.0.0flags图像级布尔标志字典勾选的类别为true其余为falseshapes形状标注列表点、矩形、多边形等[]分类标注不画形状imagePath关联的图片文件名0001.jpgimageData内嵌图片 base64 数据默认nullnullimageHeight/imageWidth图片像素尺寸480/640flags字段的语义是**“本图属于哪些类别”**分类任务通常只勾选一个互斥但机制本身支持多选如cat: true, dog: true表示图中同时存在猫和狗。下游训练代码只需解析flags字典中值为true的键即可得到该图的类别标签。若未安装 labelme CLI 环境也可直接用 Python 读取import json with open(data_annotated/0001.json, encodingutf-8) as f: data json.load(f) labels [k for k, v in data[flags].items() if v] print(labels) # [cat]四、GUI 中的 Flags 交互行为启动后labelme 会在标注界面中为flags.txt里的每个 flag 渲染一个复选框checkbox位置位于标签输入对话框Label Dialog区域。其底层实现在 labelme/_widgets/_label_dialog.py对话框初始化时通过compile_label_flags编译 flags 规格labelme/_widgets/_label_dialog.py用户在文本框中输入类别名时_update_flags会按当前文本动态刷新复选框labelme/_widgets/_label_dialog.py每个复选框对应一个布尔状态确认后写入 shape / 图像级flags字典。注意一个细节分类标注中即使不输入任何 label 文本仅勾选cat复选框同样能提交一条有效标注labelme/_widgets/_label_dialog.py 的 OK 按钮启用逻辑只要求“label 被锁定或文本框非空”而分类场景下类别信息由 flags 承载。这也是示例中 JSON 的shapes为空、类别全在flags里的原因。五、与形状标注实例分割流程的区别将分类示例与 examples/instance_segmentation/README.md 对比可以清晰看到两种标注范式的差异维度分类标注实例分割标注标注单位整张图片图中每个目标对象标注方式勾选 flags 复选框绘制多边形 / 矩形等形状类别载体JSON 的flags字段每个 shape 的label字段shapes内容空数组[]一个或多个形状定义典型下游任务图像分类CNN 分类器目标检测、分割如 labelme2voc / labelme2coco 转换分类任务中一个 shape 都没有因此不需要在画布上做任何几何操作只需为每张图片勾选类别并保存标注速度非常快。六、进阶正则驱动的动态 Flags--label-flags--flags提供的是全局固定的候选类别列表而 labelme 还提供--label-flags参数让 flag 集合随标签名动态变化。该参数同样定义在 labelme/main.py接受内联 YAML 映射或 YAML/JSON 文件键为正则表达式、值为该正则匹配的标签应显示的 flag 列表例如labelme data_annotated \ --label-flags {person-\d: [male, tall], dog-\d: [black, brown, white], .*: [occluded]}其核心实现位于 labelme/_label_flags.pycompile_label_flags将键编译为正则对象并对非法模式做容错——非字符串键、无法编译的正则如cat(会被记录警告后跳过保证应用不因用户配置错误而崩溃labelme/_label_flags.pyget_default_flags根据当前标签名匹配到的正则返回对应的默认 flag 字典labelme/_label_flags.pyapply_default_flags在加载标注时为每个 shape 应用默认 flagslabelme/_label_flags.py。该行为有专门单元测试覆盖见 tests/unit/_label_flags_test.py例如{^cat$: [occluded, truncated]}会为标签cat生成{occluded: False, truncated: False}的默认复选框而非法模式如cat(、非字符串键2024、bytes 键会被静默丢弃tests/unit/_label_flags_test.py。对纯分类场景--flags已足够--label-flags更适合目标检测 / 实例分割中“同一类目标拥有不同属性”如行人性别、车辆颜色、遮挡与否的细粒度标注。七、配置文件中的 flags 项除了命令行参数flags与label_flags也出现在用户配置文件默认~/.labelmerc可通过--config覆盖中见 labelme/_config/default_config.yamlflags: # 全局 flag 列表等价于 --flags label_flags: # 标签正则 - flag 列表等价于 --label-flags命令行参数会作为配置覆盖项与配置文件合并labelme/main.py因此两种配置途径可以混用把团队共用的类别写进配置文件把临时类别通过--flags内联传入。关于配置架构的完整设计可参考 docs/adr/0001-settings-architecture.md。八、完整实战流程下面是一条端到端的分类标注流水线准备图片目录将待分类图片放入一个目录例如data_annotated/编写 flags.txt首行保留__ignore__后续每行一个类别__ignore__ cat dog启动标注labelme data_annotated --flags flags.txt逐图勾选类别为每张图片勾选正确的类别复选框__ignore__用于剔除无效样本然后保存默认自动保存可在配置中通过auto_save控制见 labelme/_config/default_config.yaml导出标注遍历目录下所有*.json读取flags中为true的键作为类别标签组装成训练数据集如{image_path: label}的 CSV 或 TFRecord供下游分类模型使用。九、小结图像分类标注在 labelme 中是一个“轻量”但完整的流程通过--flags或配置文件中的flags项声明类别候选GUI 中勾选复选框写入 JSON 的flags字段shapes保持为空下游按布尔值为true的键读取类别。其底层由 labelme/_label_flags.py 的编译、匹配、应用三段式实现支撑并配有单元测试与官方示例examples/classification无论是快速标注实验数据还是搭建正式的分类数据集生产管线都可以直接参考本文流程落地。赞分享数据标注计算机视觉桌面应用【免费下载链接】labelmeImage annotation with Python. Supports polygon, rectangle, circle, line, point, and AI-assisted annotation.项目地址https://gitcode.com/gh_mirrors/la/labelme点击查看免费下载相关推荐基于Labelme和ResNet的图像分类实战指南从标注到智能识别还在为图像数据集标注耗费大量时间标注好的数据不知道怎么用于模型训练别担心今天我就带你用Labelme标注工具和ResNet深度学习模型从零开始打造一个图数据标注计算机视觉桌面应用10分钟搞定图像标注与分类LabelmeResNet实战指南10分钟搞定图像标注与分类LabelmeResNet实战指南 你还在为数据集标注耗费大量时间标注好的数据不知道如何用于训练本文将带你使用Labelme数据标注计算机视觉桌面应用零基础到实战Labelme图像标注ResNet分类全流程解密还在为图像分类项目的数据准备头疼吗 手动标注几百张图片、整理数据格式、训练模型……每个环节都可能让你抓狂。别担心今天就用最接地气的方式带你从零开始构建数据标注计算机视觉桌面应用上一篇在umijs/dumi中编写组件Demo的最佳实践下一篇深入解析redb嵌入式键值存储引擎的设计原理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表