YOLOv12训练自己的数据集——利用Google Colab环境和Roboflow工具

YOLOv12训练自己的数据集——利用Google Colab环境和Roboflow工具

引言

2025年2月18日,YOLOv12作为一种前沿的计算机视觉模型架构正式发布,由布法罗大学和中科院大学的Yunjie Tian、Qixiang Ye和David Doermann在论文《YOLOv12: Attention-Centric Real-Time Object Detectors》中提出。YOLOv12以注意力机制为核心设计,在Microsoft COCO数据集上实现了更低的推理延迟和更高的均值平均精度(mAP),成为实时目标检测领域的又一里程碑。官方代码已开源于 GitHub,支持用户对其进行微调和训练。

论文详解请参考这篇文章《YOLOv12 - 注意力机制驱动的实时目标检测新篇章》——论文详解

YOLOv12源码及权重下载——YOLOv12

本文将详细介绍如何在自定义数据集上训练YOLOv12模型,包括数据集准备、模型训练和推理验证的全流程。您将学习如何利用Google Colab环境和Roboflow工具,基于一个示例数据集(集装箱检测)完成YOLOv12的训练,并获得可用于实际应用的目标检测模型。


YOLOv12简介

YOLOv12通过引入区域注意力(Area Attention)和残差高效层聚合网络(R-ELAN),显著提高了检测精度,同时保持了实时性。以下是其在COCO数据集上的主要性能指标(见论文Table 1):

模型分辨率 (像素)mAP50:95 (%)T4 GPU延迟 (ms)参数量 (M)FLOPs (G)
YOLOv12-N64040.61.642.66.5
YOLOv12-S64048.02.619.321.4
YOLOv12-M64052.54.8620.267.5
YOLOv12-L64053.76.7726.488.9
YOLOv12-X64055.211.7959.1199.0

这些结果表明,YOLOv12在不同规模下均优于YOLOv11、YOLOv10等前代模型,且相较于RT-DETR等端到端检测器,计算量和参数量更少,速度更快。

fig1


训练准备

在开始训练之前,您需要准备自定义数据集并配置训练环境。以下是具体步骤:

步骤1:安装YOLOv12及依赖项

我们将在Google Colab中运行训练过程。打开Roboflow提供的YOLOv12训练笔记本(可从GitHub或Roboflow获取完整代码),并按以下步骤安装依赖:

# 克隆YOLOv12仓库
!git clone https://github.com/sunsmarterjie/yolov12
%cd yolov12

# 安装必要的Python包
!pip install roboflow supervision flash-attn --upgrade -q
!pip install -r requirements.txt
!pip install -e .
!pip install --upgrade flash-attn
  • YOLOv12:核心模型代码,目前需从源代码构建,因尚未发布pip包。
  • supervision:用于后处理模型预测结果。
  • Roboflow:用于下载和管理数据集。
  • flash-attn:优化注意力机制的计算效率,YOLOv12依赖此库。

步骤2:准备自定义数据集

您需要一个带有标注的目标检测数据集。如果没有现成数据集,可参考Roboflow的《Getting Started with Roboflow》指南创建。本文以开源的集装箱检测数据集(Yard Management System, version 11)为例:

  1. 下载数据集
    • 创建免费Roboflow账户并获取API密钥。
    • 在Colab中运行以下代码下载数据集:
from google.colab import userdata
from roboflow import Roboflow

ROBOFLOW_API_KEY = userdata.get('ROBOFLOW_API_KEY')
rf = Roboflow(api_key=ROBOFLOW_API_KEY)
project = rf.workspace("roboflow-universe-projects").project("yard-management-system")
version = project.version(11)
dataset = version.download("yolov8")
  1. 调整数据集格式
    • YOLOv12使用与YOLOv8兼容的TXT标注格式,但需要修改data.yaml文件以适配路径。运行以下代码:
!sed -i '$d' {dataset.location}/data.yaml
!sed -i '$d' {dataset.location}/data.yaml
!sed -i '$d' {dataset.location}/data.yaml
!sed -i '$d' {dataset.location}/data.yaml
!echo -e "test: ../test/images\ntrain: ../train/images\nval: ../valid/images" >> {dataset.location}/data.yaml

此步骤移除原始文件中可能不兼容的行,并添加正确的训练、验证和测试集路径。


模型训练

步骤3:训练YOLOv12模型

配置好数据集后,我们可以开始训练。YOLOv12提供五种预训练权重(yolov12n.ptyolov12s.ptyolov12m.ptyolov12l.ptyolov12x.pt),可根据计算资源选择。本例使用yolov12s.pt,建议至少训练250个epoch。

运行以下代码:

from ultralytics import YOLO

model = YOLO('yolov12s.yaml')
results = model.train(
    data=f'{dataset.location}/data.yaml',
    epochs=250
)
  • 参数说明
    • data:指向调整后的data.yaml文件。
    • epochs:训练轮数,论文建议600个epoch,但250个epoch已可获得较好结果。
    • 默认使用SGD优化器,初始学习率0.01,线性衰减至0.0001(见论文Table 7)。

注意:训练完成后,model()可能抛出TypeError: argument of type 'PosixPath' is not iterable错误(已提交GitHub issue),但模型权重仍会保存,可继续后续步骤。

训练结果评估

训练完成后,可查看混淆矩阵和训练曲线:

  1. 混淆矩阵
from IPython.display import Image
Image(filename=f'/content/yolov12/runs/detect/train/confusion_matrix.png', width=600)

fig2

  1. 训练曲线
Image(filename=f'/content/yolov12/runs/detect/train/results.png', width=600)

fig3


推理验证

步骤4:使用训练好的模型进行推理

加载训练后的最佳权重,在验证集上运行推理:

import random
import cv2
import supervision as sv

model = YOLO(f"/content/yolov12/runs/detect/train/weights/best.pt")

# 加载验证集
ds = sv.DetectionDataset.from_yolo(
    images_directory_path=f"{dataset.location}/valid/images",
    annotations_directory_path=f"{dataset.location}/valid/labels",
    data_yaml_path=f"{dataset.location}/data.yaml"
)

# 随机选择一张图片进行推理
image_path = random.choice(list(ds.images.keys()))
image = cv2.imread(image_path)

# 运行模型并后处理
results = model(image)[0]
detections = sv.Detections.from_ultralytics(results).with_nms()

# 添加边界框和标签
bounding_box_annotator = sv.BoundingBoxAnnotator()
label_annotator = sv.LabelAnnotator()
annotated_image = bounding_box_annotator.annotate(scene=image, detections=detections)
annotated_image = label_annotator.annotate(scene=annotated_image, detections=detections)

# 显示结果
sv.plot_image(annotated_image)

结果示例
在集装箱数据集上,模型成功识别出集装箱、ID、标志和底盘ID四个类别。

fig4


结论

YOLOv12凭借其注意力中心的架构设计,为实时目标检测提供了新的可能性。本文通过一个集装箱检测示例,展示了如何在自定义数据集上训练YOLOv12,包括环境配置、数据准备、模型训练和推理验证。完整代码已作为笔记本开源,可从Roboflow或GitHub获取。

未来,您可以尝试调整超参数(如论文Table 7中的数据增强配置),或使用更大规模的模型(如YOLOv12-X)以进一步提升性能。更多训练教程可参考Roboflow Notebooks

### 使用YOLOv5训练自定义VOC格式数据集 #### 配置文件设置 为了使YOLOv5能够识别并处理特定的数据集,需要创建一个配置文件(`.yaml`)。此文件用于指定训练验证图像的位置、类别数量及其对应的标签名。 ```yaml # 自定义数据集的YAML配置示例 train: path/to/VOCData/train.txt # 训练集图片列表路径 val: path/to/VOCData/val.txt # 验证集图片列表路径 nc: 7 # 类别总数 names: ["person", "head", "hat", "sleep", "uniform", "mobilePhone", "clothes"] # 各类别的名称 ``` 上述配置指定了训练与验证阶段所使用的图像位置,并明确了该数据集中共有七个不同的目标类别[^3]。 #### 数据预处理步骤 由于原始VOC格式并不完全兼容YOLOv5的要求,因此需对数据做适当转换: 1. **准备标注文件**:确保每张图都有相应的XML标注文件。这些文件应位于各自所属子目录下(如`Annotations`),并与对应图像同名。 2. **生成TXT文件**:编写脚本来解析XML文件并将边界框坐标保存到纯文本文件中。对于每个实例,一行记录其分类ID及归一化后的中心点坐标(x_center, y_center) 宽高(w,h),各数值间以空格分隔。注意这里的坐标系原点位于左上角,且宽度高度均相对于整幅图像尺寸进行了标准化处理[^1]。 3. **划分训练测试集合**:随机选取部分样本作为验证集,其余则构成训练集。分别建立两个文本文件(`train.txt`, `val.txt`)列出所有参与训练或评估过程的照片绝对路径。 4. **安装依赖库**:如果是在本地环境中操作,则可能还需要额外安装PyTorch及相关CUDA工具包来支持GPU加速计算。 #### 可能遇到的问题及解决方案 - **环境搭建困难**:当试图在个人电脑而非云端平台(比如Google Colab)运行项目时可能会面临软件版本冲突等问题。建议参照官方文档仔细核对所需组件清单,并考虑利用虚拟环境隔离不同项目的依赖关系。 - **内存不足错误**:大型数据集可能导致显存溢出。降低批量大小(batch size)或是减少输入分辨率可以帮助缓解这一状况;另外也可以尝试启用混合精度训练(mixed precision training)。 - **模型性能不佳**:这可能是由多种因素引起的,包括但不限于不充分的数据增强策略、不合适的学习率设定等。调整超参数、增加迭代次数往往有助于改善最终效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值