YOLOv11训练自己的数据集

一、原始模型预测

1、模型下载

        进github官网下载yolov11版本源码ultralytics/ultralytics: Ultralytics YOLO 🚀,也可直接点击我的资源连接进行源码下载【免费】YOLOv11源码及yolov11n.pt权重文件资源-优快云下载

2、环境配置

        需要配置conda虚拟环境,以及torch等深度学习必备环境,网上也有很多教程,这里就不过多叙述(如果有朋友确实需要环境配置教程,可以在评论区留言,可以再补发一个完整的环境配置教程),当环境配置好后,进入终端环境输入pip install -r requirements.txt,安装必要的库。

3、模型预测

        完成上述工作,我们就可以进行模型预测了,在主目录下构建文件夹weights,将权重文件放在里面,为了后续更方便的进行推理及参数调整,在主目录下构建predict.py,代码如下,可直接运行,会生成runs/detect/predict/bus.jpg文件。如果能进行预测,那么就说明环境配置基本没问题了,后面我们就可以训练自己的数据集了。

from ultralytics import YOLO
# 加载训练好的模型,改为自己的路径
model = YOLO('weights/yolo11n.pt')  #修改为训练好的路径
source = 'ultralytics/assets/bus.jpg' #修改为自己的图片路径及文件名
# 运行推理,并附加参数
model.predict(source, save=True)

二、训练自己的数据集

1、数据集标注

        这部分内容我在之前的博客就详细撰述了,主要采用labelimg进行标注,具体内容参考这篇使用LabelImg标注YOLO目标检测数据格式——LabelImg详细使用教程-优快云博客

2、数据集制作

然后使用如下脚本将数据集按8:1:1划分为训练集、验证集和测试集。

import os
import shutil
import random

def split_dataset(image_dir, label_dir, output_dir, train_ratio=0.8, val_ratio=0.1, test_ratio=0.1, seed=42):
    random.seed(seed)

    # 获取所有图片文件
    images = [f for f in os.listdir(image_dir) if f.endswith(".jpg")]
    images.sort()  # 保证顺序一致

    # 打乱顺序
    random.shuffle(images)

    total = len(images)
    train_end = int(total * train_ratio)
    val_end = train_end + int(total * val_ratio)

    splits = {
        "train": images[:train_end],
        "val": images[train_end:val_end],
        "test": images[val_end:]
    }

    # 创建输出目录结构
    for split in splits.keys():
        os.makedirs(os.path.join(output_dir, split, "images"), exist_ok=True)
        os.makedirs(os.path.join(output_dir, split, "labels"), exist_ok=True)

    # 拷贝文件
    for split, file_list in splits.items():
        for img_file in file_list:
            base_name = os.path.splitext(img_file)[0]
            label_file = base_name + ".txt"

            # 拷贝图片
            src_img = os.path.join(image_dir, img_file)
            dst_img = os.path.join(output_dir, split, "images", img_file)
            shutil.copy(src_img, dst_img)

            # 拷贝标签
            src_label = os.path.join(label_dir, label_file)
            if os.path.exists(src_label):
                dst_label = os.path.join(output_dir, split, "labels", label_file)
                shutil.copy(src_label, dst_label)

    print(f"数据集划分完成!共 {total} 张图片")
    for split, file_list in splits.items():
        print(f"{split}: {len(file_list)} 张")

if __name__ == "__main__":
    image_dir = "images"        # 原始图片路径
    label_dir = "annotation"    # 原始标签路径
    output_dir = "dataset"      # 输出路径

    split_dataset(image_dir, label_dir, output_dir)

参照如下格式创建文件夹在主目录中即可。

3、配置相关参数

3.1 数据集路径配置

在ultralytics/cfg/datasets文件夹中复制一个voc的yaml文件,也可以完全按照我的格式来进行。其中nc是对应的类别数。

将ultralytics/cfg/models/11/yolo11n.yaml中的nc也对应修改。

3.2 训练参数配置

在主目录中创建train.py文件,对应代码如下:

import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLO
if __name__ == '__main__':
  model = YOLO('ultralytics/cfg/models/11/yolo11n.yaml')
  model.load('weights/yolo11n.pt')  #注释则不加载
  results = model.train(
    data='ultralytics/cfg/datasets/CeyMo.yaml',  #数据集配置文件的路径
    epochs=10,  #训练轮次总数
    batch=32,  #批量大小,即单次输入多少图片训练
    imgsz=640,  #训练图像尺寸
    workers=8,  #加载数据的工作线程数
    device= 0,  #指定训练的计算设备,无nvidia显卡则改为 'cpu'
    optimizer='SGD',  #训练使用优化器,可选 auto,SGD,Adam,AdamW 等
    amp= True,  #True 或者 False, 解释为:自动混合精度(AMP) 训练
    cache=False  # True 在内存中缓存数据集图像,服务器推荐开启
)

成功运行:

3.3 结果分析

训练完成之后会在runs里面生成对应的文件,包括权重文件,mAP、召回率及精度等图像数据。

三、总结

        通过本文,我们完成了从 环境配置 → 模型预测 → 数据集制作 → 参数配置 → 模型训练与结果分析 的完整流程,已经能够让你顺利跑通 YOLOv11 的训练。后续我会逐步更新 YOLOv11 改进思路、注意力机制、损失函数优化以及真实场景案例,带大家从入门走向进阶。

        目前专栏正处于 早鸟阶段,欢迎大家提前订阅支持,享受更优惠的学习体验,也可以在评论区交流你遇到的问题。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JH_vision

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值