news 2026/4/21 15:56:11

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/4/18 1:59:02

Sambert多情感TTS优化:降低延迟的7个技巧

Sambert多情感TTS优化&#xff1a;降低延迟的7个技巧 1. 引言 1.1 Sambert 多情感中文语音合成-开箱即用版 随着AI语音技术的发展&#xff0c;高质量、低延迟的文本转语音&#xff08;TTS&#xff09;系统在智能客服、有声读物、虚拟助手等场景中变得愈发重要。Sambert-HiFi…

作者头像 李华
网站建设 2026/4/16 22:27:46

Image-to-Video在电商详情页的动态展示

Image-to-Video在电商详情页的动态展示 1. 引言 1.1 业务场景描述 在电商平台中&#xff0c;商品详情页是用户决策的关键环节。传统的静态图片展示虽然能够呈现产品外观&#xff0c;但在吸引用户注意力、提升沉浸感和促进转化方面存在局限。随着消费者对视觉体验要求的不断提…

作者头像 李华
网站建设 2026/4/18 23:53:49

开发者入门必看:AI读脸术OpenCV DNN镜像实战测评

开发者入门必看&#xff1a;AI读脸术OpenCV DNN镜像实战测评 1. 技术背景与应用场景 随着人工智能在计算机视觉领域的深入发展&#xff0c;人脸属性分析已成为智能安防、用户画像、互动营销等场景中的关键技术之一。其中&#xff0c;性别识别与年龄估计作为基础的人脸语义理解…

作者头像 李华
网站建设 2026/4/17 22:19:33

Qwen2.5推理延迟高?GPU利用率优化部署教程

Qwen2.5推理延迟高&#xff1f;GPU利用率优化部署教程 1. 背景与问题定位 1.1 Qwen2.5-0.5B-Instruct 模型简介 Qwen2.5 是阿里云推出的最新一代大语言模型系列&#xff0c;覆盖从 0.5B 到 720B 参数的多个版本。其中 Qwen2.5-0.5B-Instruct 是专为轻量级指令理解任务设计的…

作者头像 李华
网站建设 2026/4/17 22:24:13

FST ITN-ZH大模型镜像解析|轻松搞定中文数字日期转换

FST ITN-ZH大模型镜像解析&#xff5c;轻松搞定中文数字日期转换 在语音识别、自然语言处理和文本规整的实际工程中&#xff0c;一个常被忽视但至关重要的环节是逆文本标准化&#xff08;Inverse Text Normalization, ITN&#xff09;。尤其是在中文场景下&#xff0c;用户输入…

作者头像 李华
网站建设 2026/4/16 16:57:21

YOLOv8实战案例:交通违章检测系统部署

YOLOv8实战案例&#xff1a;交通违章检测系统部署 1. 引言 1.1 业务场景描述 在城市交通管理中&#xff0c;实时监控与违章行为识别是提升道路安全和执法效率的关键环节。传统人工巡检方式成本高、响应慢&#xff0c;难以应对复杂多变的交通场景。随着AI视觉技术的发展&…

作者头像 李华