【跟我学YOLO】(1)YOLO11 环境配置与推理
1. YOLO11 简介
1.1 概述
YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,最初于 2015 年推出。
YOLO11 由 Ultralytics 团队在 2024年9月30日发布,在之前 YOLO 版本的基础上进行了显著的架构和训练方法的改进,具有快速、准确和易于使用的特点,成为图像分类、目标检测、跟踪、实例分割和姿态估计任务的最佳选择。Ultralytics 创始人兼CEO Glenn Jocher 指出,它代表了计算机视觉领域的一次质的飞跃。
YOLO11 的主要优点包括:
- 性能增强:在 COCO 数据集上,YOLO11m 比 YOLO8m 使用 22% 更少的参数,却实现了更高的平均精度(mAP),计算效率更高。
- 速度提升:推理速度比 YOLOv10 快约 2%,为实时应用提供了更好的支持。
- 多功能性:支持目标检测、实例分割、图像分类、姿态估计、定向目标检测(OBB)和目标跟踪等多种任务。
- 增强的特征提取:改进的骨干网络和颈部架构设计,能够更准确地捕捉图像中的复杂细节。
- 优化的训练方法:增强了模型的适应性,使其更容易应用于不同规模的项目,并在准确性和性能之间保持了最佳平衡。
- 跨环境的适应性:可以无缝部署在各种环境中,包括边缘设备、云平台和支持NVIDIA GPU的系统,确保了最大的灵活性。
YOLO11 的网络结构和创新点包括:
- C3k2机制:这是一种新的卷积机制,它在网络的浅层将c3k参数设置为False,类似于YOLO11中的C2f结构。
- C2PSA机制:这是一种在C2机制内部嵌入的多头注意力机制,类似于在C2中嵌入了一个PSA(金字塔空间注意力)机制。
- 深度可分离卷积(DWConv):在分类检测头中增加了两个DWConv,这种卷积操作减少了计算量和参数量,提高了模型的效率。
- 自适应锚框机制:自动优化不同数据集上的锚框配置,提高了检测精度。
- EIoU损失函数:引入了新的EIoU(Extended IoU)损失函数,考虑了预测框与真实框的重叠面积,长宽比和中心点偏移,提高了预测精度。
1.2 模型架构
YOLOv11 的架构旨在优化速度和准确性,并建立在YOLOv8,YOLOv9和YOLOv10等早期YOLO版本中引入的改进之上。
1. 骨干(backbone)
(1)卷积块(Conv block)
(2)瓶颈层(Bottle neck)
(3)C2F块(CSP-Focus,跨阶段部分聚焦)
C2F块源自CSP网络,特别关注效率和特征图保存。CSP模块是一种网络结构设计,旨在通过跨阶段的部分连接来增强特征学习能力,同时减少计算量。C2F块包含一个 Conv块,然后将输出分成两半,通过一系列瓶颈层进行处理,最后将每个层输出与最后的Conv块相连。有助于增强特征图连接,而无需冗余信息。
(4)C3K2块
YOLO11 增加了 C3K2块来处理主干不同阶段的特征提取,它是早期版本中 CSP 瓶颈的演变。C3K2在C3模块的基础上进行了优化,进一步提升了特征提取的效率和能力。这种设计使得C3K2能够在保持模型稳定性的同时,提高模型的运行速度,并可能通过增加特征提取的深度来间接提升精度。
C3K2使用C3K块来处理信息,实现保持速度和精度之间的平衡。它在开始和结束时有2个Conv块,随后是一系列C3K块,最后是Conv块输出和最后一个C3K块输出,并以最后一个Conv块结束。
2. 颈部(neck):空间金字塔池化快速(SPFF)和上采样
YOLO11保留了SPFF模块(Spatial Pyramid Pooling Fast),该模块旨在以不同的尺度汇集图像不同区域的特征。这提高了网络捕获不同大小物体的能力,特别是小物体,这对早期的YOLO版本来说是一个挑战。
SPFF使用多个最大池化操作(具有不同的内核大小)来聚合多尺度上下文信息。该模块可确保即使是很小的物体也能被模型识别,因为它有效地结合了不同分辨率的信息。SPFF的加入确保了YOLOv11可以保持实时速度,同时增强了其在多个尺度上检测物体的能力。
3. 注意力机制:C2PSA模块
YOLO11增加了跨阶段部分空间注意力(C2PSA)模块,引入了注意力机制。该模块是在SE(Squeeze-and-Excitation)注意力机制的基础上进行叠加和改进的。通过强调特征图中的空间相关性,提高了模型对图像中重要区域的关注度,例如较小或部分遮挡的对象。
(1)位置敏感注意力
该类封装了将位置敏感注意力和前馈网络应用于输入张量的功能,增强了特征提取和处理功能。该层包括用Attention层处理输入层,并将输入和Attention层输出连接,然后通过前馈神经网络,然后是Conv Block,然后是Conv Block,没有激活,然后将Conv Block输出和第一个接触层输出连接。
(2)C2PSA
C2PSA 使用两个 PSA(部分空间注意力)模块,它们在特征图的不同分支上操作,然后连接起来,类似于C2F块结构。这种设置确保模型专注于空间信息,同时保持计算成本和检测精度之间的平衡。C2PSA模块通过在提取的特征上应用空间注意力来细化模型选择性地关注感兴趣区域的能力。
4. 检测头(Head):检测和多尺度预测
YOLO11 使用多尺度预测头来检测不同大小的物体,输出三种不同尺度(低、中、高)的检测框。
检测头从三个特征图(通常来自P3、P4和P5)输出预测,对应于图像中的不同粒度级别。这种方法确保了小物体被更精细地检测到(P3),而较大的物体被更高级别的特征捕获(P5)。
1.3 使用方法
YOLO11的训练过程包括数据准备、数据增强、超参数优化和模型训练几个阶段。它使用混合精度训练技术,在不降低模型精度的情况下,加快了训练速度,并减少了显存的占用。
在部署方面,YOLO11支持导出为不同的格式,如ONNX、TensorRT和CoreML,以适应不同的部署平台。它还采用了多种加速技术,如半精度浮点数推理(FP16)、批量推理和硬件加速,以提升推理速度。
YOLO系列实时目标检测器的最新迭代版本,它以尖端的准确性、速度和效率重新定义了可能实现的性能。在之前YOLO版本取得的显著进步基础上,YOLO11在架构和训练方法上进行了重大改进,使其成为各种计算机视觉任务中的通用选择。除了传统的目标检测外,YOLO11 还支持目标跟踪、实例分割、姿态估计、OBB定向物体检测(旋转目标检测)等视觉任务。
2. YOLO11 项目和模型下载
YOLO11 官方下载:GitHub - ultralytics/YOLO11
Ultralytics 官方文档: YOLO11 使用指南(中文版)
2.1 下载 YOLO11 项目
YOLO11 开源网址:GitHub - ultralytics/YOLO11
- 方法一:克隆 repo。
>>> git clone https://github.com/ultralytics/ultralytics
- 方法二:直接从 GitHub 网页下载压缩文件。
没有安装 git 的同学,可以在 GitHub 网站的 YOLO11 项目页面,点击绿色的 “<>Code”,选择 “Download ZIP”,可以下载 YOLO11 项目的压缩包。
- 方法三:从 国内镜像下载。
YOLO11 - Gitee 镜像
2.2 下载 YOLO11 模型
使用 YOLO11 进行推理,首先要下载 YOLO11 预训练模型。使用 YOLO11 训练自己的模型,也常用 YOLO11 预训练模型作为初始模型。
在 YOLO/GitHub 项目仓,提供了检测(Detection)、分类(Classification)、分割(Segmentation)、姿态估计(Pose)、定向边界框检测(OBB)、跟踪(Track)等任务的预训练模型。
YOLO11 有多个不同规模的模型,从小到大依次是:YOLO11n、YOLO11s、YOLO11m、YOLO11l、YOLO11x。这些模型与各种操作模式兼容,包括推理、验证、训练和导出,便于在部署和开发的不同阶段使用。
以检测任务为例,如下图所示,点击所需的模型即可下载相应的预训练模型。
以分类任务为例,如下图所示,点击所需的模型即可下载相应的预训练模型。
说明:YOLO11在运行时如果在本地没有检测到预训练模型,,将会自动从网络下载并保存,但下载速度可能很慢甚至连接失败(视网络条件和限制),因此推荐先将 YOLO11 预训练模型下载到本地。
本文选择检测任务模型 YOLO11n,参数约 6M。下载完成后,将模型文件保存在 YOLO11 项目的根目录路径下,即 “.\YOLO11\YOLO11n.pt”。
3. 虚拟环境的创建与配置
说明:本文所有内容都是基于 python 环境实现的,因此先要确保已经安装了 python 开发环境。推荐使用 python3.8 或以上版本,并安装 PyTorch1.8 或以上版本。
3.1 创建虚拟环境
虚拟环境可以将YOLO11训练所需的依赖包和其他项目的依赖包隔离开来,避免版本冲突,更加便于管理。
推荐使用 miniconda 搭建Python环境,其安装和使用可以参见:【youcans的深度学习 01】安装环境详解之 miniconda。
(1)创建虚拟环境。
创建名称为 YOLO11 的 Python 环境,Python 版本为3.8。
conda env list
conda create -n YOLO11 python=3.8
(2)在所选择的 Python 环境下,安装 YOLO11 项目所需的依赖(安装项目所需的库)。
项目中的 requirements.txt 文件已经详细列出了所需的库及版本。
# Ultralytics requirements
# Usage: pip install -r requirements.txt
# Base ----------------------------------------
matplotlib>=3.2.2
numpy>=1.21.6
opencv-python>=4.6.0
Pillow>=7.1.2
PyYAML>=5.3.1
requests>=2.23.0
scipy>=1.4.1
torch>=1.7.0
torchvision>=0.8.1
tqdm>=4.64.0
# Logging -------------------------------------
# tensorboard>=2.4.1
# clearml
# comet
# Plottcondaing ------------------------------------
pandas>=1.1.4
seaborn>=0.11.0
# Export --------------------------------------
# coremltools>=6.0 # CoreML export
# onnx>=1.12.0 # ONNX export
# onnxsim>=0.4.1 # ONNX simplifier
# nvidia-pyindex # TensorRT export
# nvidia-tensorrt # TensorRT export
# scikit-learn==0.19.2 # CoreML quantization
# tensorflow>=2.4.1 # TF exports (-cpu, -aarch64, -macos)
# tflite-support
# tensorflowjs>=3.9.0 # TF.js export
# openvino-dev>=2022.3 # OpenVINO export
# Extras --------------------------------------
psutil # system utilization
thop>=0.1.1 # FLOPs computation
# ipython # interactive notebook
# albumentations>=1.0.3
# pycocotools>=2.0.6 # COCO mAP
# roboflow
打开 miniconda Prompt,激活刚才创建的 Python 环境 YOLO11,pip 安装所需的库。
conda activate YOLO11
pip install -r requirements.txt
由于安装 YOLO11 项目所需的第三方库内容很多,如果下载太慢,可以指定下载源,也可以从已有的虚拟环境中复制 Lib\site-package 中的内容,但要检查版本能否满足本项目中的 requirements.txt 的要求。
对于未安装的库或版本不满足要求的库,可以手动安装,例如:
pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple
3.2 安装 YOLO11
- 在线安装
YOLO11 提供了命令行执行方式,但是需要按照要求来进行安装:
pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple
这种方式安装方便,但对网络有一定要求,而且不方便对源码的修改(修改后容易出错),因此并不推荐。
- 离线安装
将 2.1 节所下载的项目文件复制到 Python 项目文件夹,如 “C:\Python\Yolo\Yolo11_main”;如果下载的是压缩文件,解压到 Python 项目文件夹。
打开 miniconda Prompt,激活创建的 Python 环境 Yolo11,切换到本项目文件夹,pip 安装 Yolo11。注意安装命令中的 “-e” 和 “.” 之间有一个空格。
conda activate Yolo11
cd C:\Python\Yolo\Yolo11_main
pip install -e .
3.3 安装测试
安装完成后,在 miniconda Prompt 直接输入 “yolo help”,系统给出 Yolo 的帮助信息如下图所示,说明安装成功。
yolo help
3.4 配置 Pycharm 编辑器
(1)使用 PyCharm 编辑器打开下载的 YOLO11 项目。
(2)在 PyCharm 的菜单 “文件-设置-项目-Python 解释器(python interpreter)” 中,为项目配置 Python 环境。
(3)配置 PyCharm 终端(Terminal)。
打开 miniconda Prompt 文件,鼠标右键点击属性,查看 “目标位置”,复制其中的 “cmd.exe” 及后面的内容。将复制的路径填入 PyCharm 设置中的 “Settings-Tools-Terminal-Shell path”,如下图所示。
(4)安装项目依赖(如果之前通过 miniconda prompt 已安装完成,则此处不需要再安装)。
pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple
配置完成后,在 PyCharm 的命令行窗口,激活 YOLO11 虚拟环境,输入 “yolo help” 。如下图所示,系统给出 YOLO11 的帮助提示信息,说明配置成功。
4. Yolo11 检测图片
4.1 CLI 方式运行
YOLO11 支持使用命令行接口(command line interface, CLI)对模型进行训练、验证或运行推断。
YOLO11 命令行接口(CLI)方便在各种任务和版本上训练、验证或推断模型,不需要定制或代码,可以使用 yolo 命令从终端运行所有任务。
语法:
yolo task=detect mode=train model=YOLO11n.yaml args...
classify predict YOLO11n-cls.yaml args...
segment val YOLO11n-seg.yaml args...
export YOLO11n.pt format=onnx args...
使用 miniconda Prompt 命令行,或在 PyCharm 的命令行窗口,都可以以CLI 方式运行 “yolo predict” 命令进行物体检测任务,具体操作步骤如下:
-
使用 miniconda Prompt 命令行,激活 YOLO11 虚拟环境,输入如下命令对指定图片进行检测。
-
在 PyCharm 的命令行窗口,激活 YOLO11 虚拟环境,输入如下命令对指定图片进行检测。
conda activate YOLO11
yolo predict model=“.\YOLO11n.pt” source=“./data/images/bus.jpg”
注意:
(1)必须先激活 YOLO11 虚拟环境。
(2)当前路径必须是 YOLO11 项目所在的目录,例如 “C:\Python\PythonProjects\YOLO11”。
(3)预训练模型 Yolo11n.pt 必须保存在模型配置参数 “model” 指定的路径。例如,如果模型保存在 “.\model\Yolo11n.pt”,则将模型配置参数修改为 “model=.\model\Yolo11n.pt”。
(4)待检测的图片必须保存在 “source” 指定的路径,可以是图像路径、视频文件、目录、URL 或用于摄像头设备 ID。例如,可以指定网络地址,读取待检测图片。
yolo predict model=“.\YOLO11n.pt” source=“https://ultralytics.com/images/bus.jpg”
(5)检测结果默认保存在 “.\runs\detect\predict” 目录下,也可以在命令中使用 “project” 参数,指定保存预测结果的项目目录名称。
(6)完整的写法是:
yolo task=detect mode=predict model=“.\YOLO11n.pt” source=“./data/images/bus.jpg”
在命令行窗口显示的运行结果如下。
(base) C:\Users\huang>cd C:\python\yolo\yolo11_main
(base) C:\Python\Yolo\Yolo11_main>conda activate yolo11
(yolo11) C:\Python\Yolo\Yolo11_main>yolo predict model=".\YOLO11n.pt" source="./data/images/bus.jpg"
Ultralytics 8.3.71 🚀 Python-3.8.20 torch-2.4.1+cpu CPU (13th Gen Intel Core(TM) i5-13500H)
YOLO11n summary (fused): 238 layers, 2,616,248 parameters, 0 gradients, 6.5 GFLOPs
image 1/1 C:\Python\Yolo\Yolo11_main\data\images\bus.jpg: 384x640 2 persons, 1 tie, 79.1ms
Speed: 0.0ms preprocess, 79.1ms inference, 0.0ms postprocess per image at shape (1, 3, 384, 640)
Results saved to runs\detect\predict
检测结果保存在 Yolo11 项目的子目录路径 “.\runs\detect\predict” 下,如下图所示。
4.2 Python 程序运行
YOLO11 也提供了 Python 接口的调用方式。它提供了加载和运行模型以及处理模型输出的函数。该界面设计易于使用,以便用户可以在他们的项目中快速实现目标检测。
使用预训练模型 YOLO11n.pt 进行推理的 Python 程序如下。
from ultralytics import YOLO
# 加载预训练的YOLO模型
model = YOLO("./yolo11n.pt",task = "detect")
# 使用模型对图像执行对象检测
result = model(source="./ultralytics/assets/bus.jpg", save=True)
运行程序,就实现对指定图像文件的检测,并将检测结果保存到文件夹 “./runs/detect/predict”。
Python 程序运行结果与 CLI 方式是相同的。
4.3 分割任务和分类任务
YOLO11 默认执行检测任务,也可以提供指定参数 TASK 实现分割、分类、姿势、定位任务。注意需要下载或使用对应任务的预训练模型,例如:分割任务模型 YOLO11n-seg.pt,分类任务模型 YOLO11n-cls.pt。
yolo TASK MODE ARGS
Where TASK (optional) is one of ('detect', 'segment', 'classify', 'pose', 'obb')
MODE (required) is one of ('train', 'val', 'predict', 'export', 'track', 'benchmark')
ARGS (optional) are any number of custom 'arg=value' pairs like 'imgsz=320' that override defaults.
See all ARGS at https://docs.ultralytics.com/usage/cfg or with 'yolo cfg'
- 分割任务(“segment)
from ultralytics import YOLO
# 加载预训练的YOLO模型,分割任务
model = YOLO("./YOLO11n-seg.pt",task = "segment")
# 使用模型对图像执行对象检测
result = model(task="segment", source="./ultralytics/assets/Mask01.jpg", save=True)
- 分类任务(“classify”)
from ultralytics import YOLO
# 加载预训练的YOLO模型,分类任务
model = YOLO("./YOLO11n-cls.pt",task = "classify")
# 使用模型对图像执行对象检测
result = model(task="classify", source="./ultralytics/assets/Mask01.jpg", save=True)
分割任务和分类任务的运行结果如下。
5. 参数说明
model:传入的 model.yaml 文件或者 model.pt 文件,只传 yaml 文件则参数随机初始化
data:训练数据集的配置yaml文件
epochs:训练轮次,默认100
patience:早停训练观察的轮次,默认50
batch:训练批次,默认16
imgsz:训练图片大小,默认640
save:保存训练过程和训练权重,默认开启
save_period:训练过程中每x个轮次保存一次训练模型,默认-1(不开启)
cache:是否采用 ram 进行数据载入,设置True会加快训练速度
device:运行的设备,device=0 为 CUDA,device = cpu 为 CPU
workers:载入数据的线程数,默认为8,一般设为4 以免线程报错
project:项目文件夹的名,默认为 runs 且依次累加
name:用于保存训练文件夹名,默认为 exp 且依次累加
exist_ok:是否覆盖现有保存文件夹,默认 False
pretrained:是否加载预训练权重,默认 False
optimizer:优化器选择,默认 SGD,可选[SGD, Adam, AdamW,RMSProP]
verbose:是否打印详细输出
seed:随机种子,用于复现模型,默认 0
deterministic:设为 True,保证实验的可复现性
single_cls:将多类数据训练为单类,把所有数据当作单类训练,默认 False
image_weights:使用加权图像选择进行训练,默认 False
rect:使用矩形训练,默认 False
cos_lr:使用余弦学习率调度,默认 False
close_mosaic:最后x个轮次禁用马赛克增强,默认10
resume:断点训练,默认 False
lr0:初始化学习率,默认 0.01
lrf:最终学习率,默认 0.01
label_smoothing:标签平滑参数,默认 0.0
dropout:使用dropout正则化(仅对训练进行分类),默认 0.0
【本节完】
版权声明:
欢迎关注『youcans动手学模型』系列
转发请注明原文链接:
【跟我学YOLO】(1)YOLO11 环境配置与基本应用
Copyright 2025 youcans
Crated:2025-02