news 2026/4/2 6:39:39

YOLO-v5入门教程:labels标签格式与COCO数据集解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
YOLO-v5入门教程:labels标签格式与COCO数据集解析

YOLO-v5入门教程:labels标签格式与COCO数据集解析

1. 引言

1.1 YOLO-v5 简介

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎。作为该系列的迭代版本之一,YOLOv5在保持实时性的同时进一步提升了检测精度和易用性,广泛应用于工业检测、自动驾驶、安防监控等多个领域。

YOLOv5并非官方YOLO团队发布,而是由Ultralytics公司基于PyTorch框架实现并开源的一套高效目标检测系统。其模块化设计、轻量级结构以及出色的训练效率,使其成为当前实际项目中部署最广泛的YOLO变体之一。

1.2 镜像环境说明

本文所涉及的开发环境基于YOLO-V5 深度学习镜像构建,预装了以下核心组件:

  • PyTorch 1.8+(CUDA支持)
  • Ultralytics YOLOv5 官方代码库
  • OpenCV、NumPy、Pandas 等常用视觉处理库
  • Jupyter Notebook 可视化开发环境

该镜像支持通过Jupyter或SSH方式访问,用户可快速启动目标检测任务的开发、训练与推理流程。

提示:如需使用该环境,请参考 CSDN星图镜像广场 获取YOLO-V5镜像并一键部署。


2. YOLOv5 的 labels 标签格式详解

2.1 标签文件的基本结构

在YOLOv5中,每张图像对应的标注信息以.txt文件形式存储,文件名与图像文件一致(仅扩展名不同),内容采用归一化的边界框表示法。

每个.txt文件包含若干行,每一行代表一个目标对象,格式如下:

<class_id> <x_center> <y_center> <width> <height>

其中五个字段均为归一化后的浮点数,取值范围为 [0, 1]:

字段含义归一化方式
class_id类别索引(从0开始)整数,无需归一化
x_center边界框中心点x坐标相对于图像宽度
y_center边界框中心点y坐标相对于图像高度
width边界框宽度相对于图像宽度
height边界框高度相对于图像高度

例如:

0 0.458333 0.325000 0.166667 0.250000 1 0.750000 0.500000 0.300000 0.400000

表示图像中有两个目标:第一个是类别0(如人),中心位于图像水平方向约45.8%处;第二个是类别1(如车),位于右侧区域。

2.2 实际案例解析

假设有一张分辨率为640x480的图像,其中包含一个类别为“dog”(class_id = 2)的目标,其原始边界框为:

  • 左上角:(100, 80)
  • 右下角:(300, 280)

计算步骤如下:

  1. 计算中心点:

    • x_center = (100 + 300) / 2 = 200
    • y_center = (80 + 280) / 2 = 180
  2. 计算宽高:

    • width = 300 - 100 = 200
    • height = 280 - 80 = 200
  3. 归一化:

    • x_center_norm = 200 / 640 ≈ 0.3125
    • y_center_norm = 180 / 480 = 0.375
    • width_norm = 200 / 640 ≈ 0.3125
    • height_norm = 200 / 480 ≈ 0.4167

最终标签写入.txt文件的内容为:

2 0.3125 0.375 0.3125 0.4167

2.3 数据目录组织规范

YOLOv5要求训练数据遵循特定目录结构。典型布局如下:

dataset/ ├── images/ │ ├── train/ │ │ ├── img1.jpg │ │ └── img2.jpg │ └── val/ │ ├── img3.jpg │ └── img4.jpg ├── labels/ │ ├── train/ │ │ ├── img1.txt │ │ └── img2.txt │ └── val/ │ ├── img3.txt │ └── img4.txt └── data.yaml

data.yaml文件定义数据集配置:

train: ./dataset/images/train val: ./dataset/images/val nc: 80 # 类别数量 names: ['person', 'bicycle', 'car', ...] # COCO类名列表

3. COCO 数据集格式解析

3.1 COCO 数据集概述

COCO(Common Objects in Context)是由微软发布的大型目标检测、分割和关键点识别数据集。它包含超过20万张图像和150万个实例标注,涵盖80个常见物体类别。

COCO标注文件为JSON格式,结构复杂但信息丰富,适用于多任务学习场景。

3.2 JSON 结构核心字段

一个典型的instances_val2017.json文件包含以下顶级字段:

字段描述
info数据集元信息(版本、贡献者等)
licenses图像授权信息
images图像列表(ID、文件名、尺寸等)
annotations所有标注实例(边界框、类别、分割轮廓等)
categories类别定义(ID、名称、超类)
示例片段(简化):
{ "images": [ { "id": 397133, "file_name": "000000397133.jpg", "width": 352, "height": 500 } ], "annotations": [ { "id": 1768, "image_id": 397133, "category_id": 18, "bbox": [174.29, 82.35, 50.14, 90.23], "area": 4523.5, "iscrowd": 0 } ], "categories": [ {"id": 1, "name": "person", "supercategory": "human"}, {"id": 18, "name": "dog", "supercategory": "animal"} ] }

说明:

  • bbox[x_min, y_min, width, height]格式(非归一化)
  • category_id对应类别编号
  • iscrowd=1表示群体标注(如人群),通常忽略

3.3 COCO 转 YOLOv5 标签格式

由于YOLOv5使用归一化坐标且无嵌套结构,需将COCO JSON转换为多个.txt文件。

以下是转换脚本的核心逻辑(Python实现):

import json import os from pathlib import Path def coco_to_yolo(json_path, output_dir, image_dir): with open(json_path, 'r') as f: data = json.load(f) # 建立 image_id 到图像信息的映射 image_info = {img['id']: img for img in data['images']} # 创建输出目录 Path(output_dir).mkdir(parents=True, exist_ok=True) # 处理每个标注 for ann in data['annotations']: image_id = ann['image_id'] if image_id not in image_info: continue img = image_info[image_id] img_width = img['width'] img_height = img['height'] # 解析边界框 x_min, y_min, bbox_w, bbox_h = ann['bbox'] # 转换为中心点 + 宽高 x_center = (x_min + bbox_w / 2) / img_width y_center = (y_min + bbox_h / 2) / img_height width = bbox_w / img_width height = bbox_h / img_height class_id = ann['category_id'] - 1 # COCO类别从1开始,YOLO从0开始 # 写入对应txt文件 txt_file = os.path.join(output_dir, f"{img['file_name'].split('.')[0]}.txt") with open(txt_file, 'a') as f: f.write(f"{class_id} {x_center:.6f} {y_center:.6f} {width:.6f} {height:.6f}\n") # 使用示例 coco_to_yolo( json_path='/path/to/instances_train2017.json', output_dir='./dataset/labels/train/', image_dir='./dataset/images/train/' )

注意:COCO的category_id从1开始,而YOLOv5从0开始,因此需要减1对齐。


4. 实践操作指南

4.1 使用 Jupyter 进行可视化调试

可通过浏览器访问Jupyter Notebook界面进行数据探索:

  1. 启动镜像后,打开http://<your-ip>:8888
  2. 导航至/root/yolov5/目录
  3. 新建.ipynb文件,加载图像与标签进行可视化验证

示例代码:

import cv2 import matplotlib.pyplot as plt def plot_label(image_path, label_path, names): img = cv2.imread(image_path) h, w = img.shape[:2] with open(label_path, 'r') as f: for line in f.readlines(): parts = list(map(float, line.strip().split())) class_id, x_center, y_center, bw, bh = parts # 反归一化 x1 = int((x_center - bw/2) * w) y1 = int((y_center - bh/2) * h) x2 = int((x_center + bw/2) * w) y2 = int((y_center + bh/2) * h) cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2) cv2.putText(img, names[int(class_id)], (x1, y1-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2) plt.figure(figsize=(10, 8)) plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) plt.axis('off') plt.show() # 调用示例 plot_label('zidane.jpg', 'zidane.txt', ['person', 'bicycle', 'car', 'motorcycle'])

4.2 SSH 方式远程开发

若使用终端操作,可通过SSH连接服务器执行命令:

ssh root@<server_ip> -p 22 cd /root/yolov5/ python detect.py --source https://ultralytics.com/images/zidane.jpg --weights yolov5s.pt

结果将保存在runs/detect/exp/目录下。

4.3 快速运行 Demo 示例

首先进入YOLOv5项目目录:

cd /root/yolov5/

然后运行以下Python代码进行推理:

import torch # 加载预训练模型(可选:yolov5n/s/m/l/x) model = torch.hub.load("ultralytics/yolov5", "yolov5s") # 默认使用yolov5s # 设置输入源(支持URL、本地路径、OpenCV帧等) img = "https://ultralytics.com/images/zidane.jpg" # 执行推理(自动处理批处理、缩放、归一化) results = model(img) # 处理结果 results.print() # 控制台打印检测结果 results.show() # 显示带框图像 results.save() # 保存结果到 runs/detect/exp/

输出示例:

zidane.jpg: 640x480 4 persons, 1 tie, Done. (0.012s)

5. 总结

5.1 关键要点回顾

  1. YOLOv5标签格式:使用归一化的(class_id, x_center, y_center, w, h)表示法,每个图像对应一个.txt文件。
  2. 目录结构规范:必须正确组织images/labels/子目录,并配置data.yaml
  3. COCO数据集特点:JSON格式存储,包含丰富的元信息,适合大规模训练。
  4. 格式转换必要性:将COCO转为YOLOv5格式时,需完成坐标系转换、类别ID调整和文件拆分。
  5. 开发环境优势:使用预置镜像可省去环境配置时间,直接进入开发阶段。

5.2 最佳实践建议

  • 在转换数据前,先抽样检查原始标注质量;
  • 使用脚本自动化生成data.yaml和划分训练/验证集;
  • 推荐使用labelmeCVAT等工具辅助标注,并导出为COCO格式再转换;
  • 训练前务必验证.txt文件是否与图像匹配,避免因路径错误导致训练失败。

获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/22 8:53:10

如何批量上传文档?MinerU自动化脚本编写实战教程

如何批量上传文档&#xff1f;MinerU自动化脚本编写实战教程 1. 引言&#xff1a;智能文档处理的现实挑战 在科研、金融、法律等专业领域&#xff0c;每天都会产生大量PDF、扫描件、PPT和图表类文档。传统的人工阅读与信息提取方式效率低下&#xff0c;难以满足现代工作流对自…

作者头像 李华
网站建设 2026/3/29 9:35:37

提示词怎么写?麦橘超然高效描述模板分享

提示词怎么写&#xff1f;麦橘超然高效描述模板分享 在使用“麦橘超然 - Flux 离线图像生成控制台”进行AI绘画时&#xff0c;提示词&#xff08;Prompt&#xff09;的质量直接决定了生成图像的艺术表现力和细节还原度。许多用户在初次尝试时常遇到画面模糊、构图混乱或风格偏…

作者头像 李华
网站建设 2026/4/2 1:35:50

性能翻倍!Qwen3-Reranker优化技巧让检索速度提升6倍

性能翻倍&#xff01;Qwen3-Reranker优化技巧让检索速度提升6倍 1. 引言&#xff1a;智能检索的瓶颈与突破路径 在当前信息密度持续增长的背景下&#xff0c;传统检索系统正面临“高召回、低精度”的普遍困境。基于关键词匹配&#xff08;如BM25&#xff09;或向量相似度计算…

作者头像 李华
网站建设 2026/4/2 15:24:40

DeepSeek-R1本地化优势解析:数据不出域的隐私安全部署案例

DeepSeek-R1本地化优势解析&#xff1a;数据不出域的隐私安全部署案例 1. 引言&#xff1a;为何需要本地化部署的轻量级推理模型 随着大语言模型在企业服务、智能办公和教育场景中的广泛应用&#xff0c;数据隐私与安全合规逐渐成为技术选型的核心考量。尤其在金融、医疗、政…

作者头像 李华
网站建设 2026/4/1 1:52:09

Meta-Llama-3-8B-Instruct商业案例:中小企业应用指南

Meta-Llama-3-8B-Instruct商业案例&#xff1a;中小企业应用指南 1. 引言&#xff1a;为何中小企业需要本地化大模型&#xff1f; 随着生成式AI技术的快速演进&#xff0c;越来越多的中小企业开始探索如何将大语言模型&#xff08;LLM&#xff09;应用于客户服务、内部知识管…

作者头像 李华
网站建设 2026/3/30 9:22:56

YOLO26内存泄漏检测:长期运行稳定性优化方案

YOLO26内存泄漏检测&#xff1a;长期运行稳定性优化方案 在深度学习模型的部署与训练过程中&#xff0c;尤其是基于YOLO系列的目标检测任务中&#xff0c;长时间运行下的内存泄漏问题已成为影响系统稳定性的关键瓶颈。尽管YOLO26&#xff08;即Ultralytics YOLOv8.4.2版本&…

作者头像 李华