Yolo打标工具 | X-AnyLabeling 中文使用说明:从安装、手工标注到 AI 辅助标注

Yolo打标工具 | X-AnyLabeling 中文使用说明:从安装、手工标注到 AI 辅助标注 本文以X-AnyLabeling v3.3.10为基础运行环境以 Ubuntu 20.04、Python 3.10 为例。不同版本的界面和模型列表可能存在差异使用时应以实际安装版本为准。1. 项目简介X-AnyLabeling 是一个面向计算机视觉数据集制作的桌面标注工具。它不仅能完成常见的矩形框、多边形、旋转框、关键点等人工标注还把目标检测、实例分割、姿态估计、OCR、视觉语言模型等推理能力集成到了标注界面中。传统标注软件通常只负责“画标签”模型推理需要在另外的脚本中完成。X-AnyLabeling 的思路是把两部分放到同一个工作流里先由模型生成候选结果再由人工检查、修改和确认。对于目标数量较多、轮廓复杂或数据规模较大的任务这种方式可以显著减少重复操作。项目仓库https://github.com/CVHub520/X-AnyLabeling本文使用的版本v3.3.10该版本使用 PyQt5 构建桌面界面要求 Python 3.10 及以上。项目使用 GPL-3.0 许可证二次开发和发布时应保留许可证及项目来源信息。2. 项目名称的含义名称可以拆成三部分理解X表示可扩展、跨任务和多模态不局限于单一标注类型。Any强调对多种视觉任务、模型和数据格式的兼容。Labeling项目的核心仍然是数据标注与标注结果管理。它并不是某个模型的专用界面而是一个通用标注平台。模型只是辅助工具最终输出仍然是可用于训练、验证和测试的数据标签。3. 能完成哪些任务X-AnyLabeling v3.3.10 支持的任务覆盖范围较广常用场景如下。3.1 图像分类为整张图片分配一个或多个类别例如猫、狗、鸟等图像分类产品合格与不合格分类场景类别、天气类别和道路类型分类。3.2 目标检测使用水平矩形框标记目标的位置和类别适合 YOLO、Faster R-CNN、RT-DETR 等检测任务。常见标注内容包括类别名称 左上角坐标 右下角坐标3.3 旋转目标检测使用带方向角的旋转框标注目标适用于航拍、遥感、文字、工业零件等目标方向变化较大的场景。常见输出格式包括 DOTA 和 YOLO OBB。3.4 实例分割使用多边形或掩码描述每个目标的完整轮廓。与目标检测相比实例分割不仅知道目标在哪里还知道目标具体占用了哪些像素。3.5 语义分割为图像中的每个像素分配类别。它通常不区分同类目标的不同实例例如所有道路像素属于同一类别。3.6 关键点与姿态估计使用点标记人体关节、手部关节、人脸特征点或工业部件关键位置并可通过分组或骨架关系组织关键点。3.7 OCR 与关键信息提取支持文本检测、文本识别和 KIE 标注可用于票据、表格、证件、包装文字和场景文字数据集制作。3.8 多目标跟踪对视频帧中的同一目标分配一致的跟踪 ID可输出 MOT 等跟踪格式。3.9 图像描述、视觉问答与 Grounding项目还支持图像描述、视觉问答、开放词汇检测和文本提示定位等多模态任务。这类任务通常会使用视觉语言模型生成文字或根据提示词定位目标。4. 工作原理X-AnyLabeling 可以看成四层结构界面层、标注数据层、模型推理层和格式转换层。4.1 界面层界面由 PyQt5 实现主要负责显示图像和视频帧响应鼠标、键盘和菜单操作绘制矩形框、多边形、点、线、圆和旋转框显示文件列表、标签列表和自动标注面板管理保存、导入、导出和配置。用户在画布上的操作最终会转换成内部的 Shape 对象。4.2 标注数据层每个标注对象通常包含以下信息label 类别名称 points 顶点坐标 shape_type 标注形状类型 score 模型预测置信度 group_id 分组编号 description 描述信息 difficult 是否为困难样本 flags 自定义标志 attributes 自定义属性这些信息默认保存在项目自己的 JSON 标注格式中。该格式可视为 X-AnyLabeling 的中间表示也常被称为 XLABEL 格式。一个简化后的标注文件结构如下{version:3.3.10,flags:{},shapes:[{label:person,points:[[120,80],[350,460]],group_id:null,description:null,difficult:false,shape_type:rectangle,flags:{},attributes:{}}],imagePath:000001.jpg,imageData:null,imageHeight:720,imageWidth:1280}4.3 模型推理层自动标注模块负责加载模型配置和权重完成图像预处理、模型推理、结果后处理再把推理结果转换为 Shape 对象显示在画布上。典型流程如下输入图像 ↓ 尺寸缩放、归一化等预处理 ↓ ONNX Runtime 或其他推理后端 ↓ 置信度过滤、NMS、掩码处理等后处理 ↓ 转换为矩形框、多边形、关键点等 Shape ↓ 显示到画布由人工确认或修改v3.3.10 常见的本地推理后端是 ONNX Runtime。CPU 环境安装onnxruntimeGPU 环境安装onnxruntime-gpu。两个包不应在同一个环境中同时安装否则可能出现执行提供器选择错误或动态库冲突。4.4 格式转换层项目内部先使用 XLABEL 组织标注再将其转换为 YOLO、VOC、COCO、DOTA、MOT、MASK、PPOCR 等格式。因此不同格式之间的转换通常遵循源格式 → XLABEL → 目标格式这种方式让界面层只需要维护一种核心数据结构具体训练框架所需的格式由转换器负责生成。5. 项目目录结构v3.3.10 的仓库顶层主要包含以下目录X-AnyLabeling/ ├── anylabeling/ 主程序源码 ├── assets/ README 和文档使用的图片、演示资源 ├── docs/ 中文和英文使用文档 ├── examples/ 各类任务、模型和格式示例 ├── scripts/ 构建、资源生成等脚本 ├── tests/ 测试代码 ├── tools/ 标签转换和辅助工具 ├── pyproject.toml 包信息、依赖和命令入口 ├── requirements*.txt 不同平台与运行环境的依赖列表 ├── README.md 英文项目说明 ├── README_zh-CN.md 中文项目说明 └── LICENSE GPL-3.0 许可证5.1 anylabeling 目录anylabeling/ ├── app.py 程序入口和命令行参数 ├── app_info.py 版本、设备等应用信息 ├── config.py 配置加载与合并 ├── configs/ 默认配置和模型相关配置 ├── resources/ 图标、翻译和 Qt 资源 ├── services/ 独立服务与系统交互逻辑 └── views/ 主窗口、画布、对话框和标注界面项目整体采用界面、服务和配置相对分离的结构views负责界面与交互services负责独立业务服务configs负责默认配置resources保存界面资源app.py负责解析命令行、创建 Qt 应用并打开主窗口。自动标注相关代码位于views/labeling/widgets/auto_labeling附近其中包括模型基类、模型管理器、推理引擎和不同模型适配代码。6. Ubuntu 20.04 安装下面以 CPU 版本为例。即使系统自带 Python 3.8也不建议直接在系统 Python 中安装。单独使用 Conda 环境可以避免 ROS、OpenCV、PyQt 和 ONNX Runtime 之间互相影响。6.1 准备 Miniconda确认 Conda 可以正常使用conda--versionwhichconda若终端提示找不到conda可执行source~/miniconda3/etc/profile.d/conda.sh conda initbashsource~/.bashrc6.2 创建 Python 3.10 环境conda create-nxanylabelingpython3.10-yconda activate xanylabeling python--version预期输出类似Python 3.10.x不要使用 Python 3.14 等过新的版本安装 v3.3.10。项目配置要求 Python 3.10 及以上但部分第三方包不一定已经适配最新 Python。6.3 下载指定版本cd~gitclone--branchv3.3.10--depth1\https://github.com/CVHub520/X-AnyLabeling.gitcd~/X-AnyLabeling检查版本gitdescribe--tags6.4 安装 CPU 版本python-mpipinstall--upgradepip setuptools wheel pipinstall-e.[cpu]这里的-e表示以开发模式安装。仓库代码修改后一般不需要重新安装适合源码运行和后续二次开发。安装完成后检查xanylabeling version xanylabeling checks启动程序xanylabeling6.5 CUDA 11 环境pipinstall-e.[gpu-cu11]CUDA 11 环境下ONNX 与 ONNX Runtime GPU 的版本需要保持兼容。v3.3.10 文档给出的约束为onnx 1.15.0, 1.16.1 onnxruntime-gpu 1.15.0, 1.19.06.6 CUDA 12 环境pipinstall-e.[gpu]安装后可检查 ONNX Runtime 是否识别 CUDApython -PY import onnxruntime as ort print(ort.get_available_providers()) PY正常的 GPU 环境应包含CUDAExecutionProvider若只显示CPUExecutionProvider说明 CUDA、cuDNN、ONNX Runtime GPU 或动态库路径尚未配置正确。7. 第一次启动启动命令conda activate xanylabelingcd~/X-AnyLabeling xanylabeling程序会在用户目录创建配置文件~/.xanylabelingrc该文件用于保存界面语言、最近目录、自动保存、标签排序、文件切换方式等配置。需要恢复默认设置时可以执行xanylabeling --reset-config查看当前配置文件路径xanylabeling config8. 基本界面说明图 1 X-AnyLabeling 主界面示意。中央为标注画布左右区域用于文件、对象、标签和自动标注参数管理。主界面通常由以下区域组成8.1 顶部菜单栏用于打开文件、导入导出标签、切换编辑模式、调用工具、打开设置和帮助信息。8.2 左侧工具栏用于选择绘图方式和编辑状态常见功能包括编辑对象绘制矩形绘制旋转框绘制多边形绘制点和线放大、缩小和移动画布删除、复制和修改对象。8.3 中央画布显示当前图片及所有标注对象。人工标注和模型预测结果最终都会显示在这里。8.4 文件列表显示当前目录中的图片或从视频中提取的帧可用于快速切换、查看标注状态和筛选已标注或未标注图片。8.5 标签与对象列表显示当前图像上的标注对象。可以选择、隐藏、删除对象也可以修改类别、属性、描述和分组信息。8.6 自动标注面板用于选择模型、下载或加载权重、调整置信度阈值、输入提示词并执行推理。不同模型的控件会有所区别。例如 YOLO 检测模型通常提供置信度和 IoU 阈值SAM 类模型则提供正点、负点、矩形框等交互提示。9. 人工标注流程下面以 YOLO 目标检测数据集为例。9.1 准备目录建议先建立清晰的数据目录dataset/ ├── images/ │ ├── 000001.jpg │ ├── 000002.jpg │ └── ... └── labels/标注阶段可以直接打开images目录导出后再按训练框架要求整理目录。9.2 打开图片目录在菜单中选择文件 → 打开图片目录快捷键Ctrl UX-AnyLabeling 支持常见的 JPG、PNG、BMP、WEBP、TIF 等图片格式也支持多级目录。9.3 创建矩形框选择矩形工具在目标左上角按下鼠标拖动到右下角后松开。输入类别名称并确认画布上会生成一个矩形对象。标注时应遵循统一规则框尽量贴合目标边缘不要包含过多背景遮挡目标是否标注应提前确定极小目标和模糊目标应统一处理同一类别使用完全一致的名称避免car、Car、cars混用。9.4 切换图片A上一张 D下一张项目还支持在已标注和未标注图片之间跳转。相关行为可在~/.xanylabelingrc中通过switch_to_checked等字段调整。9.5 保存标签常用保存方式Ctrl S保存当前标注建议开启自动保存避免切换图片或异常退出造成数据丢失。默认情况下每张图片会生成一个同名 JSON 文件例如000001.jpg 000001.json9.6 检查数据每完成一批数据应检查是否有漏标目标类别名称是否一致框是否越界多边形是否自交关键点顺序是否正确空标签是否符合预期图片和标签数量是否匹配。项目中的“数据总览”功能可以统计类别数量、形状数量和数据分布并导出 CSV 报告。10. 自动标注的使用方法图 2 官方示例覆盖检测、分割、OCR、姿态估计、目标跟踪、视觉语言等多类任务。自动标注不是“模型运行完就直接作为最终标签”更合理的工作方式是模型预标注 → 人工检查 → 修正漏检和误检 → 保存确认10.1 选择模型在自动标注面板中选择任务对应的模型。常见选择包括YOLO目标检测、实例分割、姿态估计、旋转框SAM、MobileSAM、EdgeSAM交互式分割Grounding DINO、YOLO-World文本提示检测PP-OCR文字检测与识别Depth Anything深度估计Florence 2 等视觉基础模型描述、定位和多模态任务。模型列表会随版本更新不同模型可能需要额外依赖或单独下载权重。10.2 加载模型配置模型通常由 YAML 配置文件描述内容可能包括type:yolov8name:yolov8nmodel_path:/path/to/model.onnxconfidence_threshold:0.25nms_threshold:0.45classes:-person-car实际字段由对应模型适配器决定。配置文件负责告诉程序使用哪一种模型类权重文件位于哪里类别列表是什么输入尺寸和阈值是多少推理结果应该转换成哪种标注形状。10.3 单张图片推理加载模型后对当前图片执行预测。模型结果会显示到画布中用户可以删除误检框补画漏检目标修改错误类别调整框和多边形边缘根据业务要求过滤低质量目标。10.4 批量推理项目支持对当前任务中的多张图片执行一键预测。批量标注前建议先使用少量图片调试阈值否则错误设置会批量产生大量低质量标签。推荐流程随机选择 2050 张有代表性的图片调整置信度阈值和 NMS 阈值检查大目标、小目标、遮挡和复杂背景确认结果可接受后再执行批量预测批量预测后仍需抽查或逐张复核。10.5 SAM 交互式分割SAM 类模型更适合轮廓复杂的目标。基本操作是给模型提供提示正点告诉模型该位置属于目标负点告诉模型该位置不属于目标矩形框限定目标的大致范围。模型根据提示生成分割掩码确认后转换成多边形标注。对于边界复杂的物体通常比手工逐点绘制更快。11. 标签格式导入与导出X-AnyLabeling 支持多种训练框架常用格式。不同任务需要选择对应的导入或导出选项不能仅根据扩展名判断。11.1 YOLO常见任务包括检测class x_center y_center width height分割class x1 y1 x2 y2 ...旋转框OBB 格式姿态估计框和关键点坐标。YOLO 坐标通常归一化到 01。导出时需要准备类别文件类别文件每行一个名称person car bicycle行号从 0 开始对应类别 ID。11.2 Pascal VOCVOC 使用 XML 文件保存图片尺寸、类别和矩形框坐标适合传统目标检测任务。默认导出目录通常为Annotations/11.3 COCOCOCO 使用一个 JSON 文件管理多张图片、类别和标注支持目标检测、实例分割和关键点任务。导入或导出前通常需要准备类别文件或关键点配置文件。11.4 DOTADOTA 主要用于旋转目标检测每行通常包含四个顶点、类别和困难标志x1 y1 x2 y2 x3 y3 x4 y4 class_name difficult默认导出目录通常为labelTxt/11.5 MASK语义分割可以导入或导出 PNG 掩码。为了确定像素值与类别的对应关系需要准备颜色映射表或灰度映射表。11.6 MOTMOT 格式用于多目标跟踪常见文件包括seqinfo.ini det.txt gt.txt每条标注包含帧号、跟踪 ID、目标框、类别和可见率等信息。11.7 PPOCRPPOCR 格式用于文本检测、识别和关键信息提取。导出后可能包含Label.txt rec_gt.txt crop_img/ class_list.txt ppocr_kie.json12. 命令行工具12.1 查看帮助xanylabeling--helpxanylabelinghelp12.2 查看版本xanylabeling version12.3 环境检查xanylabeling checks12.4 打开指定目录xanylabeling /path/to/images12.5 指定输出目录xanylabeling /path/to/images\--output/path/to/labels12.6 自动保存xanylabeling /path/to/images--autosave12.7 禁止在 JSON 中嵌入图像数据xanylabeling /path/to/images--nodata不保存 Base64 图像数据可以明显减小 JSON 文件体积。12.8 预设类别xanylabeling /path/to/images\--labelsperson,car,bicycle也可以传入类别文件路径。12.9 批量格式转换列出转换任务xanylabeling convert查看某个任务帮助xanylabeling convert xlabel2yolo--help当前转换体系以 XLABEL 为中间格式因此通常需要先将源格式转换为 XLABEL再由 XLABEL 转成目标格式。13. 数据集制作建议标注软件只能提高操作效率数据集质量仍然取决于标注规则和审核流程。13.1 先写标注规范正式标注前应明确类别定义遮挡目标是否标注截断目标是否标注极小目标的最小尺寸模糊目标如何处理框应贴合可见区域还是完整推测区域类别重叠时的优先级多边形需要多精细。13.2 训练集和验证集都需要标签监督学习中训练集用于计算损失并更新模型参数验证集用于计算精度和选择模型因此两者都需要标签。测试集是否公开标签取决于评测方式但本地测试通常也需要标签。13.3 不要先随机划分再批量标注更稳妥的做法是先完成全部标注和质量检查再按场景、视频序列或采集批次划分训练集和验证集。若连续视频帧被随机分散到训练集和验证集可能造成数据泄漏使验证指标虚高。13.4 保留原始 XLABEL 文件即使最终训练使用 YOLO也建议保留 X-AnyLabeling 的原始 JSON。以后需要转换为 COCO、VOC 或其他格式时可以直接从完整标注信息重新导出。13.5 建立审核状态可通过文件列表复选框、标志字段或外部记录区分未标注 已预标注 已人工检查 已复审这比仅根据“是否存在标签文件”判断质量更可靠。14. 自定义模型与二次开发X-AnyLabeling 的模型扩展方式不是直接把任意 ONNX 文件拖进界面而是为模型编写适配器。一个完整适配通常包括新建模型类并继承项目的Model基类定义配置字段和必填参数实现模型加载实现图像预处理实现推理调用实现后处理将结果转换为Shape或AutoLabelingResult在模型类型列表中注册新模型在ModelManager中增加加载逻辑编写对应 YAML 配置。一个模型类的逻辑框架可以概括为classCustomModel(Model):def__init__(self,model_config,on_message):super().__init__(model_config,on_message)# 读取配置并加载模型defpredict_shapes(self,image,image_pathNone):# 1. 图像预处理# 2. 模型推理# 3. 后处理# 4. 转换为 ShapereturnAutoLabelingResult(shapesshapes,replaceTrue)defunload(self):# 释放模型、GPU 显存或其他资源pass二次开发时应优先参考仓库中与自己任务最接近的现有模型而不是从空文件开始。例如自定义 YOLO 检测器可以参考已有 YOLO 模型自定义语义分割模型可以参考 UNet 或其他分割适配器。15. 常见问题15.1pip找不到x-anylabeling错误示例No matching distribution found for x-anylabeling正确的 PyPI 包名是pipinstallx-anylabeling-cvhub[cpu]3.3.10源码安装则执行pipinstall-e.[cpu]15.2 Ubuntu 20.04 默认 Python 3.8 不兼容v3.3.10 要求 Python 3.10 及以上。不要替换系统 Python使用 Conda 创建独立环境conda create-nxanylabelingpython3.10-y15.3 Qt 提示缺少 XCB 库可安装常见依赖sudoaptupdatesudoaptinstall-y\libgl1\libegl1\libxcb-xinerama0\libxcb-cursor0\libxkbcommon-x11-0\libxcb-icccm4\libxcb-image0\libxcb-keysyms1\libxcb-render-util015.4 ROS 环境与 Conda 动态库冲突Ubuntu 20.04 上经常同时安装 ROS Noetic。ROS 会修改PYTHONPATH和LD_LIBRARY_PATH可能与 Conda 中的 Qt、OpenCV、Expat 等库冲突。可以在干净终端中启动bash--noprofile--norcsource~/miniconda3/etc/profile.d/conda.sh conda activate xanylabelingcd~/X-AnyLabeling xanylabeling不建议在同一个终端中同时运行需要 ROS Python 包的程序和 X-AnyLabeling。15.5pyexpat出现 undefined symbol错误示例undefined symbol: XML_SetAllocTrackerActivationThreshold先重装环境中的 Python 与 Expatconda activate xanylabeling condainstall--force-reinstall\python3.10\expat\libexpat\-y测试python-cimport pyexpat; print(pyexpat.EXPAT_VERSION)python-cfrom xml.etree import ElementTree; print(XML OK)如果单独导入正常但启动 PyQt 后仍报错说明进程提前加载了其他版本的libexpat.so.1。可强制预加载 Conda 环境中的库LD_PRELOAD$CONDA_PREFIX/lib/libexpat.so.1xanylabeling也可以制作启动脚本cat~/X-AnyLabeling/start_xanylabeling.shSH #!/bin/bash source $HOME/miniconda3/etc/profile.d/conda.sh conda activate xanylabeling export LD_PRELOAD$CONDA_PREFIX/lib/libexpat.so.1 cd $HOME/X-AnyLabeling exec xanylabeling $ SHchmodx ~/X-AnyLabeling/start_xanylabeling.sh以后执行~/X-AnyLabeling/start_xanylabeling.sh15.6 GPU 环境只能使用 CPU检查python -PY import onnxruntime as ort print(ort.get_available_providers()) PY同时确认没有同时安装两个运行时pip list|greponnxruntimeGPU 环境通常只应保留onnxruntime-gpu15.7 配置损坏或界面无法恢复xanylabeling --reset-config也可以先备份后删除配置mv~/.xanylabelingrc ~/.xanylabelingrc.bak16. 推荐的完整使用流程对于一个普通的目标检测项目可以采用以下流程1. 编写类别和标注规范 2. 清理重复、损坏和无效图片 3. 使用 X-AnyLabeling 打开图片目录 4. 手工标注一小批种子数据 5. 使用种子数据训练初始模型 6. 将模型导出为 ONNX 7. 接入自动标注面板生成预标注 8. 人工修改并审核预标注结果 9. 重新训练模型 10. 迭代预标注和人工审核 11. 完成全部数据后划分训练集、验证集和测试集 12. 从 XLABEL 导出 YOLO、COCO 或其他训练格式 13. 执行标签完整性检查和数据统计这种“人工种子数据—初始模型—模型预标注—人工修正”的循环比从头到尾纯手工标注更高效也比完全相信模型结果更可靠。17. 总结X-AnyLabeling 的核心价值不只是支持很多模型而是把数据浏览、人工标注、模型预标注、格式转换和质量检查集中在同一个桌面程序中。对于小型项目它可以直接替代常见的矩形框或多边形标注软件对于较大的项目它更适合作为人机协同标注平台模型负责生成候选标签人工负责纠错和最终确认。使用时需要注意三点根据项目版本选择合适的 Python、PyQt 和 ONNX Runtime自动标注结果必须经过人工检查不能直接当作高质量真值应保留原始 XLABEL 文件并通过统一规范、复审和数据统计保证标签质量。只要环境依赖稳定、标注规范明确X-AnyLabeling 可以覆盖从普通 YOLO 检测数据集到分割、姿态、OCR 和多模态数据制作的大多数需求。参考资料X-AnyLabeling 项目仓库https://github.com/CVHub520/X-AnyLabelingv3.3.10 源码https://github.com/CVHub520/X-AnyLabeling/tree/v3.3.10中文快速入门https://github.com/CVHub520/X-AnyLabeling/blob/v3.3.10/docs/zh_cn/get_started.md中文用户手册https://github.com/CVHub520/X-AnyLabeling/blob/v3.3.10/docs/zh_cn/user_guide.md命令行工具https://github.com/CVHub520/X-AnyLabeling/blob/v3.3.10/docs/zh_cn/cli.md自定义模型https://github.com/CVHub520/X-AnyLabeling/blob/v3.3.10/docs/zh_cn/custom_model.md模型列表https://github.com/CVHub520/X-AnyLabeling/blob/v3.3.10/docs/zh_cn/model_zoo.md