当前位置: 首页 > article >正文

Labelme标注完别急着训练!手把手教你批量把JSON转成YOLO能吃的TXT格式

Labelme标注数据转YOLO格式实战指南从原理到批量处理当你用Labelme完成数百张图片的标注满心欢喜准备开始YOLO模型训练时却发现训练脚本报错——原来YOLO无法直接读取Labelme生成的JSON文件。这不是代码问题而是格式不匹配的典型情况。本文将带你深入理解两种格式的本质区别并提供可立即投入使用的完整解决方案。1. 为什么需要格式转换JSON与YOLO TXT的本质差异Labelme生成的JSON文件是一个结构化的标注容器它保存了完整的标注元数据。打开一个典型的Labelme JSON文件你会看到这样的结构{ version: 5.0.1, flags: {}, shapes: [ { label: cat, points: [[125, 342], [256, 410]], shape_type: rectangle } ], imagePath: example.jpg, imageWidth: 640, imageHeight: 480 }而YOLO需要的TXT格式则极为精简每行表示一个物体标注格式为类别索引 中心x坐标 中心y坐标 宽度 高度关键差异对比表特征Labelme JSONYOLO TXT数据结构层级化嵌套平面文本坐标表示绝对像素值归一化相对值(0-1)标注类型支持多种形状仅矩形框图像信息包含完整元数据仅保留必要标注提示YOLO格式的归一化坐标计算方法是中心点x坐标 (x_min x_max)/2 / 图像宽度2. 核心转换逻辑解析与代码实现转换过程本质上是从JSON中提取关键信息并重新编码的过程。我们需要处理两种主要标注类型矩形标注(rectangle)直接取两个对角点多边形标注(polygon)计算所有点的最小外接矩形以下是通过Python实现的核心转换函数def json_to_yolo(json_path, output_dir, class_list): with open(json_path) as f: data json.load(f) img_w data[imageWidth] img_h data[imageHeight] annotations [] for shape in data[shapes]: label shape[label] if label not in class_list: continue class_id class_list.index(label) points shape[points] # 处理不同形状的标注 if shape[shape_type] rectangle: x1, y1 points[0] x2, y2 points[1] elif shape[shape_type] polygon: x_coords [p[0] for p in points] y_coords [p[1] for p in points] x1, x2 min(x_coords), max(x_coords) y1, y2 min(y_coords), max(y_coords) else: continue # 转换为YOLO格式 x_center ((x1 x2) / 2) / img_w y_center ((y1 y2) / 2) / img_h width (x2 - x1) / img_w height (y2 - y1) / img_h annotations.append(f{class_id} {x_center:.6f} {y_center:.6f} {width:.6f} {height:.6f}) # 保存结果 txt_name os.path.splitext(os.path.basename(json_path))[0] .txt with open(os.path.join(output_dir, txt_name), w) as f: f.write(\n.join(annotations))3. 批量处理实战从单文件到完整数据集实际项目中我们需要处理的是成百上千个JSON文件。以下脚本实现了完整的批量转换流程import os import json from tqdm import tqdm def batch_convert(json_dir, output_dir, class_list): os.makedirs(output_dir, exist_okTrue) json_files [f for f in os.listdir(json_dir) if f.endswith(.json)] print(fFound {len(json_files)} JSON files to process) for json_file in tqdm(json_files): json_path os.path.join(json_dir, json_file) json_to_yolo(json_path, output_dir, class_list) print(fConversion complete! Results saved to {output_dir}) # 配置参数 CLASSES [person, car, dog] # 替换为你的类别 JSON_DIR /path/to/json_folder # JSON文件目录 OUTPUT_DIR /path/to/output # 输出目录 # 执行转换 batch_convert(JSON_DIR, OUTPUT_DIR, CLASSES)常见问题处理清单类别不匹配当JSON中的标签不在class_list中时脚本会自动跳过并提示坐标越界通过max(0, value)确保归一化坐标不会小于0空标注文件没有有效标注的图片会生成空TXT文件特殊字符处理自动处理文件名中的空格等特殊字符注意运行前请确保所有JSON文件与对应图片位于同一目录且文件名一致仅扩展名不同4. 高级技巧与质量检查完成基础转换后还需要进行质量验证。推荐使用以下方法检查转换结果可视化检查脚本import cv2 import random def visualize_yolo(image_path, txt_path, class_names): image cv2.imread(image_path) h, w image.shape[:2] with open(txt_path) as f: lines f.readlines() for line in lines: class_id, x, y, bw, bh map(float, line.strip().split()) x1 int((x - bw/2) * w) y1 int((y - bh/2) * h) x2 int((x bw/2) * w) y2 int((y bh/2) * h) color (random.randint(0,255), random.randint(0,255), random.randint(0,255)) cv2.rectangle(image, (x1,y1), (x2,y2), color, 2) cv2.putText(image, class_names[int(class_id)], (x1,y1-5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 1) cv2.imshow(Preview, image) cv2.waitKey(0) cv2.destroyAllWindows()数据集完整性检查清单确保每个JSON都有对应的图片文件验证转换后的TXT文件非空有标注的图片检查类别索引是否正确映射抽样可视化确认标注框位置准确确认归一化坐标值都在[0,1]范围内对于大型项目可以考虑使用以下优化策略并行处理使用Python的multiprocessing加速批量转换增量处理记录已处理文件避免重复转换自动验证编写脚本自动统计各类别的实例数量5. 工程化实践将转换流程集成到训练管道在实际项目中数据格式转换应该成为训练管道的一个标准化环节。以下是推荐的工程实践目录结构规范dataset/ ├── images/ # 原始图片 ├── labels_json/ # Labelme生成的JSON ├── labels_yolo/ # 转换后的YOLO格式 ├── train.txt # 训练集列表 └── val.txt # 验证集列表自动化脚本示例#!/bin/bash # convert.sh - 自动化转换脚本 JSON_DIR./labels_json YOLO_DIR./labels_yolo CLASSES(person car bicycle) # 执行转换 python convert.py --input $JSON_DIR --output $YOLO_DIR --classes ${CLASSES[]} # 生成训练/验证集划分 python split_dataset.py --images ./images --labels $YOLO_DIR --output .与训练脚本的集成# train.py 片段 class CustomDataset: def __init__(self, img_dir, label_dir, classes): self.img_dir img_dir self.label_dir label_dir self.classes classes def __getitem__(self, idx): img_path self.img_files[idx] txt_path os.path.join(self.label_dir, os.path.splitext(os.path.basename(img_path))[0] .txt) # 读取和处理YOLO格式标注...在处理特别大的数据集时可以考虑先将YOLO格式转换为更高效的二进制格式如TFRecord以加速训练时的数据加载。

相关文章:

Labelme标注完别急着训练!手把手教你批量把JSON转成YOLO能吃的TXT格式

Labelme标注数据转YOLO格式实战指南:从原理到批量处理 当你用Labelme完成数百张图片的标注,满心欢喜准备开始YOLO模型训练时,却发现训练脚本报错——原来YOLO无法直接读取Labelme生成的JSON文件。这不是代码问题,而是格式不匹配的…...

终极指南:如何用QtAdb图形化工具轻松管理Android设备

终极指南:如何用QtAdb图形化工具轻松管理Android设备 【免费下载链接】QtAdb 项目地址: https://gitcode.com/gh_mirrors/qt/QtAdb 如果你曾经为复杂的adb命令头疼,或者厌倦了在终端中反复输入同样的调试指令,那么QtAdb就是为你量身定…...

OpCore-Simplify:从8小时到30分钟,智能OpenCore EFI配置的终极指南

OpCore-Simplify:从8小时到30分钟,智能OpenCore EFI配置的终极指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 在开源系统…...

AI编程新范式:用Nomic-Embed-Text-V2-MoE生成代码语义描述与检索

AI编程新范式:用Nomic-Embed-Text-V2-MoE生成代码语义描述与检索 1. 引言 你有没有过这样的经历?面对一个庞大的代码库,想找一个“处理用户登录验证”的函数,却记不清它具体叫什么名字,只能靠模糊的记忆在文件间来回…...

Adobe Illustrator效率脚本:10个自动化工具让设计师工作效率提升300%

Adobe Illustrator效率脚本:10个自动化工具让设计师工作效率提升300% 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 为什么设计师总在重复相同的操作?调整画…...

SecGPT-14B模型量化部署:为OpenClaw节省50%显存占用

SecGPT-14B模型量化部署:为OpenClaw节省50%显存占用 1. 为什么需要量化SecGPT-14B 当我第一次尝试在本地部署SecGPT-14B模型来驱动OpenClaw时,显存不足的问题立刻给了我当头一棒。我的RTX 3090显卡24GB显存,在加载完整模型后几乎被占满&…...

OpenFBX:5分钟快速掌握轻量级FBX文件解析方案

OpenFBX:5分钟快速掌握轻量级FBX文件解析方案 【免费下载链接】OpenFBX Lightweight open source FBX importer 项目地址: https://gitcode.com/gh_mirrors/op/OpenFBX OpenFBX是一款轻量级开源FBX导入工具,能够高效解析FBX格式文件,支…...

终极实战:vant-weapp组件库从0.x到最新版深度迁移指南

终极实战:vant-weapp组件库从0.x到最新版深度迁移指南 【免费下载链接】vant-weapp 轻量、可靠的小程序 UI 组件库 项目地址: https://gitcode.com/gh_mirrors/va/vant-weapp Vant Weapp作为轻量、可靠的小程序UI组件库,经历了从0.x到最新版的重大…...

vant-weapp版本升级技术指南:从0.x到最新版的平滑迁移方案

vant-weapp版本升级技术指南:从0.x到最新版的平滑迁移方案 【免费下载链接】vant-weapp 轻量、可靠的小程序 UI 组件库 项目地址: https://gitcode.com/gh_mirrors/va/vant-weapp 引言 在小程序开发过程中,组件库的版本升级是一项常见但具有挑战…...

天际特别版模组管理:从冲突诊断到性能优化的全流程解决方案

天际特别版模组管理:从冲突诊断到性能优化的全流程解决方案 【免费下载链接】skyrimse The TES V: Skyrim Special Edition masterlist. 项目地址: https://gitcode.com/gh_mirrors/sk/skyrimse 在《上古卷轴V:天际 特别版》的模组化游戏体验中&a…...

WindowResizer完整指南:如何突破Windows窗口限制自由调整大小

WindowResizer完整指南:如何突破Windows窗口限制自由调整大小 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 你是否曾经遇到过某些应用程序窗口无法调整大小的困扰&am…...

Mirage Flow智能代码补全:提升VS Code开发效率300%

Mirage Flow智能代码补全:提升VS Code开发效率300% 作为一名在代码世界里摸爬滚打了十多年的老程序员,我经历过从记事本写代码到现代IDE的完整进化史。这些年,我试用过无数号称能“提升效率”的工具,但真正让我感到惊艳、甚至改变…...

BiliTools哔哩哔哩工具箱2026终极指南:跨平台资源管理完整解决方案

BiliTools哔哩哔哩工具箱2026终极指南:跨平台资源管理完整解决方案 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/Bili…...

TradingAgents-CN终极指南:3步构建你的AI量化交易分析系统

TradingAgents-CN终极指南:3步构建你的AI量化交易分析系统 【免费下载链接】TradingAgents-CN 基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版 项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN TradingAgents-CN是一个基…...

为什么你的Windows桌面需要Rainmeter?5个终极个性化定制秘籍

为什么你的Windows桌面需要Rainmeter?5个终极个性化定制秘籍 【免费下载链接】rainmeter Desktop customization tool for Windows 项目地址: https://gitcode.com/gh_mirrors/ra/rainmeter 想象一下,你的Windows桌面是否还停留在默认的蓝色背景和…...

OpenClaw+Phi-3-vision-128k-instruct:3步搭建个人知识图谱系统

OpenClawPhi-3-vision-128k-instruct:3步搭建个人知识图谱系统 1. 为什么选择这个组合? 上个月整理研究资料时,我发现自己陷入了一个典型的知识工作者困境:电脑里堆满了PDF、网页书签和零散的笔记,但真正需要调用某个…...

颠覆传统下载体验:3步解锁全平台资源获取

颠覆传统下载体验:3步解锁全平台资源获取 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 在数字内容爆炸的时代&a…...

s2-pro语音后处理集成:合成结果自动降噪+响度标准化Pipeline教程

s2-pro语音后处理集成:合成结果自动降噪响度标准化Pipeline教程 1. 引言与背景 s2-pro作为Fish Audio开源的专业级语音合成模型镜像,已经为众多开发者提供了高质量的文本转语音服务。但在实际应用中,我们常常会遇到两个关键问题&#xff1a…...

Chord - Ink Shadow 技术解析:LSTM与Transformer在序列建模上的对比

Chord - Ink & Shadow 技术解析:LSTM与Transformer在序列建模上的对比 如果你对AI模型如何理解文字、语音这类序列数据感兴趣,那你可能听说过LSTM和Transformer这两个名字。它们就像是处理序列问题的两代“主力军”,各自在技术发展史上留…...

BiliTools:跨平台资源管理的开源解决方案

BiliTools:跨平台资源管理的开源解决方案 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools 在数字内容爆炸…...

3个维度解析Ryujinx:开源Switch模拟器的技术实现与实战应用

3个维度解析Ryujinx:开源Switch模拟器的技术实现与实战应用 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 在游戏开发与逆向工程领域,开源项目往往成为技术创新…...

5个步骤掌握Unitree机器人仿真开发:从ROS控制到Gazebo环境实践指南

5个步骤掌握Unitree机器人仿真开发:从ROS控制到Gazebo环境实践指南 【免费下载链接】unitree_ros 项目地址: https://gitcode.com/gh_mirrors/un/unitree_ros 如何快速实现四足机器人仿真?在机器人开发过程中,您是否遇到过物理环境搭…...

看BEYOND REALITY Z-Image如何生成电影级人像:高清作品案例大赏

看BEYOND REALITY Z-Image如何生成电影级人像:高清作品案例大赏 你有没有想过,用AI生成一张人像照片,能逼真到什么程度?是那种一眼就能看出“AI味”的塑料感,还是无限接近真实胶片摄影的细腻质感?今天&…...

设计工作流效率工具:提升设计师生产力的自动化解决方案

设计工作流效率工具:提升设计师生产力的自动化解决方案 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 副标题:基于脚本自动化实现68%效率提升的专业指南 一…...

3大突破性架构让AI开发者轻松驾驭GPU算力

3大突破性架构让AI开发者轻松驾驭GPU算力 【免费下载链接】cutlass CUDA Templates and Python DSLs for High-Performance Linear Algebra 项目地址: https://gitcode.com/GitHub_Trending/cu/cutlass 在高性能计算领域,开发者常常面临三大痛点:…...

BilibiliDown:3分钟学会B站视频下载,从此告别缓冲卡顿

BilibiliDown:3分钟学会B站视频下载,从此告别缓冲卡顿 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/g…...

MacOS极速体验OpenClaw:星图平台Qwen3.5-9B镜像一键部署

MacOS极速体验OpenClaw:星图平台Qwen3.5-9B镜像一键部署 1. 为什么选择云端沙盒体验OpenClaw 作为一个长期折腾本地AI部署的技术爱好者,我深刻理解在MacOS上配置开发环境的痛苦。从Homebrew版本冲突到Python虚拟环境权限问题,每次新工具上手…...

洛雪音乐音源完整指南:三步解锁全网高品质免费音乐

洛雪音乐音源完整指南:三步解锁全网高品质免费音乐 【免费下载链接】lxmusic- lxmusic(洛雪音乐)全网最新最全音源 项目地址: https://gitcode.com/gh_mirrors/lx/lxmusic- 想要在洛雪音乐中免费收听全网音乐资源吗?lxmusic-开源项目为你提供了最…...

3个步骤快速上手Kazumi:打造您的个性化番剧播放中心

3个步骤快速上手Kazumi:打造您的个性化番剧播放中心 【免费下载链接】Kazumi 基于自定义规则的番剧采集APP,支持流媒体在线观看,支持弹幕,支持实时超分辨率。 项目地址: https://gitcode.com/gh_mirrors/ka/Kazumi 您是否厌…...

KeySequence:嵌入式USB HID键盘序列控制库

1. 项目概述KeySequence 是一款面向嵌入式 USB HID 键盘设备的轻量级序列控制库,专为 Arduino(如 Leonardo、Micro、Pro Micro)与 ESP32(特别是 ESP32-S3)平台设计。其核心目标并非替代底层 HID 协议栈,而是…...