YOLO11环境部署 || 从检测到训练

简介

YOLO(ultralytics)是一种实时目标检测算法,通过将目标检测任务转化为回归问题,能够在一次前向传播中同时预测图像中的所有目标类别和位置,实现快速而准确的目标检测。

下面我将详细阐述如何从下载代码,推理图片到训练模型。

1.下载代码

所有命令都是基于python环境下的,你首先需要确保你已经安装了python

你可以通过命令:

python --version

来检验你安装的python版本。

如果你仅仅只需要使用它的推理功能而不需要训练模型,你可以pip直接下载ultralytics 的包从而不需要下载代码,但是我建议下载代码并从代码安装ultralytics

两种下载方式:
如果你安装了git:

git clone https://github.com/ultralytics/ultralytics.git

下载压缩包:
进入官网https://github.com/ultralytics/ultralytics (能进但有点慢)

然后解压进入文件夹。

2.创建虚拟环境(下方所有代码使用终端cmd)

创建虚拟环境需要conda,你可以查看这篇文章从0到1的conda环境变量配置下载配置conda环境。

2.1创建并进入一个python3.10的虚拟环境

conda create --name YOLO11 python=3.10   //创建环境
conda activate YOLO11  	//进入环境

进入环境后左边有环境名称,比如我的环境名称为003:
在这里插入图片描述

2.2安装ultralytics

进入YOLO的文件夹:

cd E:\<你的路径>\ultralytics-main
pip install -e .

这段命令会安装你下载的ultralytics,安装完成后你就会发现包会有一个路径,就表示安装成功了:

pip list          //查看安装包

3.安装pytorch

3.1查看显卡支持

如果有nvidia显卡,可以查看支持的CUDA:
CUDA Version是驱动支持的最高版本

nvidia-smi

请添加图片描述

3.2进入pytorch官网查看支持版本

例如如果你的cuda version是12.8,就可以安装12.6的torch,如果驱动太旧,可以更新驱动安装,建议安装最新且性能更优。
在这里插入图片描述

3.3选择合适的版本

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118   //cuda11.8
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124	//cuda12.4
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126	//cuda12.6

如果下载慢可以用下面的国内源:

pip3 install torch torchvision torchaudio --extra-index-url https://pypi.tuna.tsinghua.edu.cn/simple --find-links https://download.pytorch.org/whl/cu126	//cuda12.6
pip3 install torch torchvision torchaudio --extra-index-url https://pypi.tuna.tsinghua.edu.cn/simple --find-links https://download.pytorch.org/whl/cu118	//cuda11.8
pip3 install torch torchvision torchaudio --extra-index-url https://pypi.tuna.tsinghua.edu.cn/simple --find-links https://download.pytorch.org/whl/cu124	//cuda12.4

如果只是CPU,不使用显卡:

pip3 install torch torchvision torchaudio

安装完成后可以进行验证

4.验证,推理

创建一个python文件进行推理:

from ultralytics import YOLO
import os
import torch
from pathlib import Path

def detect_images():
    # ======================= 配置区 =======================
    # 模型配置
    model_config = {
        'model_path': r'E:\git-project\YOLOV11\ultralytics-main\weights\yolo11l.pt',  # 本地模型路径
        'download_url':'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11l.pt'  # 如果没有模型文件可在此处下载URL
    }
    
    # 路径配置
    path_config = {
        'input_folder': r'E:\git-project\YOLOV11\ultralytics-main\picture',
        'output_folder': r'E:\git-project\YOLOV11\ultralytics-main\predict',
        'auto_create_dir': True  # 自动创建输出目录
    }

    # 推理参数
    predict_config = {
        'conf_thres': 0.25,     # 置信度阈值
        'iou_thres': 0.45,      # IoU阈值
        'imgsz': 640,           # 输入分辨率
        'line_width': 2,        # 检测框线宽
        'device': 'cuda:0' if torch.cuda.is_available() else 'cpu'  # 自动选择设备
    }
    # ====================== 配置结束 ======================

    try:
        # 验证输入目录
        if not Path(path_config['input_folder']).exists():
            raise FileNotFoundError(f"输入目录不存在: {path_config['input_folder']}")

        # 自动创建输出目录
        if path_config['auto_create_dir']:
            Path(path_config['output_folder']).mkdir(parents=True, exist_ok=True)

        # 加载模型(带异常捕获)
        if not Path(model_config['model_path']).exists():
            if model_config['download_url']:
                print("开始下载模型...")
                YOLO(model_config['download_url']).download(model_config['model_path'])
            else:
                raise FileNotFoundError(f"模型文件不存在: {model_config['model_path']}")

        # 初始化模型
        model = YOLO(model_config['model_path']).to(predict_config['device'])
        print(f"✅ 模型加载成功 | 设备: {predict_config['device'].upper()}")

        # 执行推理
        results = model.predict(
            source=path_config['input_folder'],
            project=path_config['output_folder'],
            name="exp",
            save=True,
            conf=predict_config['conf_thres'],
            iou=predict_config['iou_thres'],
            imgsz=predict_config['imgsz'],
            line_width=predict_config['line_width'],
            show_labels=True,
            show_conf=True
        )

        # 统计信息
        success_count = len(results)
        save_dir = Path(results[0].save_dir) if success_count > 0 else None
        print(f"\n🔍 推理完成 | 处理图片: {success_count} 张")
        print(f"📁 结果目录: {save_dir.resolve() if save_dir else '无'}")

        # 显示首张结果(可选)
        if success_count > 0:
            results[0].show()

    except Exception as e:
        print(f"\n❌ 发生错误: {str(e)}")
        print("问题排查建议:")
        print("1. 检查模型文件路径是否正确")
        print("2. 确认图片目录包含支持的格式(jpg/png等)")
        print("3. 查看CUDA是否可用(如需GPU加速)")
        print("4. 确保输出目录有写入权限")

if __name__ == "__main__":
    detect_images()

注意更改路径为你安装目录model_path(模型路径),input_folder(输入图片文件夹,把图片放入文件夹推理文件夹所有图片),output_folder(输出图片文件夹),下载权重文件可能需要网络需求。

对于YOLO11的权重文件我已上传资源,可以自行下载https://download.csdn.net/download/2301_79442295/90333333

验证如图:
请添加图片描述
证明安装正确,可以推理。

5.训练

YOLO11虽然有已经训练好的模型,但是YOLO 的官方预训练模型(如 COCO 数据集训练的模型)只能识别通用类别(如人、车、动物等)。如果你的任务需要检测特殊物体(如工业零件、医疗图像、特定商品等),必须训练自己的模型,才能实现检测效果。

训练建议: 想要训练模型,显卡是必不可少的,如果使用CPU进行训练,显卡一个小时的训练CPU可能需要10个小时;同时训练需要数据集,YOLO系列采用的是txt文本数据集,你可以从数据集网站上下载(例如我常用的workflows数据集https://app.roboflow.com/ ,这可能需要点魔法),也可以通过标注网站对自己的图片进行标注。下面我以workflows上下载的数据集为例进行训练。

5.1训练集

训练集结构如下

├── 训练集名称
│   ├── train
│   │   ├── images
│   │   └── labels
│   ├── val
│   │   ├── images
│   │   └── labels
│   └── test
│       ├── images
│       └── labels

主文件夹下有三个文件(train,val,test),每个文件夹下有images和labels
特别注意:images中的每张图片名称要与labels每个标注相对应,例如cat1.png的标注名称必须是cat1.txt,不然无法匹配,建议按照train8:val1:test1分配图片。

特别注意:标注文件txt中如果有标注多个种类一定要与下方data.yaml文件中names相对应,如果是下载的训练集可以忽略,如果是自己标注需要顺序匹配,例如假如names: [‘cat’, ‘dog’]有两类那么图片中cat的类别为0,dog类别为1,框cat的为0,框dog的为1,注意和data.yaml文件names的顺序一致就行

比如下面标注表示图片有一个dog
在这里插入图片描述

这个表示标注对应的图片有一个cat,一个dog
在这里插入图片描述

5.1.1下载训练集

训练集建议图片要超过100张,不然训练效果较差,图片越多训练效果越好
在这里插入图片描述
选择训练集,我这里选了一个检测路标的数据集,然后fork这个项目
在这里插入图片描述
然后进行预处理(比如将图片增强对比度、翻转、剪切、灰度调整、旋转等,也可以不预处理直接继续)。
在这里插入图片描述

点击create创建:
在这里插入图片描述

下载数据集,选择标注格式为YOLOv11,zip格式:
在这里插入图片描述
在这里插入图片描述

下载解压完成后文件如下:
在这里插入图片描述
可以看到文件夹下有test,train,valid三个文件夹和data.yaml文件,详细解释:
train(训练集):用于模型的训练,即通过反向传播调整模型权重。数据量通常最大(如占总数据的70-80%)。每个图像需有对应的标注文件(如.txt格式的边界框和类别信息)。

valid/val(验证集):在训练过程中监控模型性能,防止过拟合(如通过早停机制)。用于调整超参数(如学习率、批次大小)或选择模型结构。不参与训练,仅在每个epoch后评估指标(如mAP、损失值)。数据量通常为10-20%,需与训练集分布一致但不重叠。

test(测试集):最终评估模型在“未见数据”上的泛化性能。反映模型在真实场景中的表现。
仅在训练完成后使用一次,确保评估结果无偏。数据量通常为10-20%,严格与训练集、验证集无重叠。
每个文件夹下有images(图片)labels(标注)两个文件夹。

特别注意的是三个部分的图片一定不能有重复部分,如果一图多用你就会发现训练结果宇宙无敌好(mAP直接爆表),但实际上是一坨,就相当于考试出原题,考满分,然后感叹考试简单。

将data.yaml拖出到ultralytics-main文件夹下,原来的data.yaml文件如下:

train: ../train/images
val: ../valid/images
test: ../test/images

nc: 3
names: ['No entry sign', 'Pedestrian sign', 'Stop sign']

修改yaml文件,修改为绝对路径,删除不需要部分(比如我的路径如下,注意是 / 不是\):

train: E:/git-project/YOLOV11/ultralytics-main/Road sign detector.v1i.yolov11/train/images
val: E:/git-project/YOLOV11/ultralytics-main/Road sign detector.v1i.yolov11/valid/images
test: E:/git-project/YOLOV11/ultralytics-main/Road sign detector.v1i.yolov11/test/images

nc: 3
names: ['No entry sign', 'Pedestrian sign', 'Stop sign']

5.2创建训练脚本

yaml文件改好后就在ultralytics-main目录下新建一个train.py文件:

import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLO

if __name__ == '__main__':
    model = YOLO('yolo11.yaml')
    model.load('yolo11n.pt') # 是否加载预训练权重

    model.train(data='data.yaml', #替换数据集的Yaml文件地址
                cache=False,
                imgsz=640,
                epochs=100,        #训练轮数
                single_cls=False,  # 是否是单类别检测
                batch=16,
                close_mosaic=0,
                workers=0,
                device='0',      #选择'cpu'或者'0'
                optimizer='SGD', # using SGD
                #resume='runs/train/exp/weights/last.pt', # 续训设置last.pt的地址
                amp=True,
                project='runs/train',
                name='exp',
                )
    
    metrics = model.val()  # 运行验证并返回评估指标

参数及意义:
1.model = YOLO(‘yolo11.yaml’)是模型的网络结构,新手不建议更改,保持原样即可。
2.model.load(‘yolo11n.pt’) 预训练权重,如果想要快速得到较好的模型就使用,有yolo11n.pt,yolo11s.pt,yolo11m.pt,yolo11l.pt,yolo11x.pt可以选择,但是对继续训练的提升不大,理论上如果模型越大训练时间越长效果越好,比如x>l>m>s>n,但是如果使用x的话实测4060跑起来有点困难,新手建议使用yolo11n.pt。
3.data=‘data.yaml’,替换成yaml文件的地址,如果train.pydata.yaml在相同目录(在ultralytics-main)下就填这个。
4.epochs=100,训练轮数,理论上轮数越大效果越好,可以按需填,一般100就差不多。
5.single_cls=False, 是否是单类别检测,看data.yaml文件中nc的值,文中nc: 3表示类别三种,如果nc:1就填true。
6.device=‘0’,使用什么训练(是GPU还是CPU),填'0'或者'cpu'分别表示用显卡和用cpu计算。
7.resume=‘runs/train/exp/weights/last.pt’, 训练出来的模型效果不好可以续训,设置好上次训练出的权重文件的地址就行,实测不一定有提升或者提升有上限,初次训练就注释掉。
8.其它参数意义不大或者对新手不建议更改,就不阐述了。

完成后保存执行文件(注意在虚拟环境下,在ultralytics-main目录下):

python train.py

5.1.2标注图片训练

训练集建议图片要超过100张,不然训练效果较差,图片越多训练效果越好

可以从网上下载相关图片进行标注,常见的标注软件如Labelimg,Labelme,还有MakeSense.ai等免费标注网站进行标注,标注后格式输出为txt文件。

5.3训练情况

如下(我这里设置了训练10轮次):



结果保存在runs\train\exp文件夹下,可以看到有weights文件夹,里面有best.pt(最好)和last.pt(最差)文件:
在这里插入图片描述
同时还包括PR曲线图片,训练过程图片等衡量训练效果的图片,至于怎么衡量训练效果我这里不再阐述。

5.4检验训练效果

使用新训练的best.pt推理网上下载的图片,可以看到能够推理。
请添加图片描述

目前,关于YOLOv11的具体资料非常有限,尚未有官方发布的模型或详细的部署指南。对于较新的YOLO版本如YOLOv8,在C++中的部署已经有了较为成熟的方案和支持材料[^1]。 然而,假设存在YOLOv11并希望了解其在C++环境下的部署方法,可以推测该过程会类似于其他YOLO系列模型的部署流程。通常情况下,部署步骤包括但不限于: ### 准备工作 #### 获取预训练模型文件 确保拥有YOLOv11的目标检测权重文件以及配置文件(如果适用)。这些文件可以从官方发布渠道获取或者自行训练得到。 #### 安装必要的依赖库 安装OpenVINO工具包或其他支持推理加速的框架,比如ONNX Runtime,并确认已正确设置开发环境变量以便于后续编译链接操作[^3]。 ### 加载模型与初始化 ```cpp #include <openvino/openvino.hpp> using namespace ov; // 初始化Runtime实例 Core ie; auto model = ie.read_model("path_to_yolov11.xml"); // XML代表网络结构描述 CompiledModel compiled_model = ie.compile_model(model, "CPU"); InferRequest infer_request = compiled_model.create_infer_request(); ``` ### 数据预处理 针对输入图片执行标准化、缩放等预处理动作以匹配模型预期格式。 ```cpp cv::Mat img = cv::imread(image_path); if (img.empty()) { throw std::runtime_error("Image not found!"); } // Resize and normalize the input image according to YOLOv11 requirements. cv::resize(img, img, cv::Size(input_width, input_height)); img.convertTo(img, CV_32F, 1.0 / 255); // Normalize pixel values between [0., 1.] // Convert HWC -> CHW layout required by most deep learning models including YOLO variants. std::vector<cv::Mat> channels(3); split(img, channels); for(auto& channel : channels){ channel = channel.reshape(1, {input_channels, input_height}); } ``` ### 执行推断请求 调用`infer()`函数来启动一次前向传播计算,从而获得预测结果。 ```cpp // Prepare tensor from preprocessed data... Tensor input_tensor = wrap_mat(channels[0]); // Simplified example; actual implementation may vary. // Set input tensor into inference request object before running it. infer_request.set_input_tensor(input_tensor); infer_request.infer(); // Retrieve output tensors after completion of forward pass. const Tensor& detections = infer_request.get_output_tensor(); ``` ### 后处理及可视化 解析输出张量的内容,提取边界框坐标和其他相关信息;最后绘制矩形标记到原始图像上展示识别效果。 需要注意的是上述代码片段仅为示意性质,具体实现细节需参照实际使用的YOLOv11文档说明调整参数设定和接口调用方式。由于缺乏具体的YOLOv11资源,以上内容基于现有YOLO家族成员的一般做法进行了合理猜测。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值