欢迎关注『youcans动手学模型』系列
本专栏内容和资源同步到 GitHub/youcans
【YOLO 项目实战】(1)YOLO5 环境配置与检测
【YOLO 项目实战】(10)YOLO8 环境配置与推理检测
【YOLO5 项目实战】(10)YOLO8 环境配置与检测
- 1. YOLOv8 简介
- 1.1 YOLO 家族简史
- 1.2 YOLOv8 的特点
- 2. YOLOv8 模型下载与环境配置
- 2.1 下载 YOLOv8 模型
- 2.2 虚拟环境配置
- 2.3 安装 YOLOv8
- 2.4 配置 PyCharm 编译器
- 3. 运行 YOLOv5 推理
- 3.1 下载 YOLOv8 预训练模型
- 3.2 命令行(CLI)接口的模型推理
- 3.3 使用 Python 接口的模型推理
- 3.4 分割任务和分类任务
- 3.5 参数说明
- 4. 修改 YOLOv8 程序
1. YOLOv8 简介
1.1 YOLO 家族简史
YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的约瑟夫-雷德蒙(Joseph Redmon)和阿里-法哈迪(Ali Farhadi)开发。YOLO 于 2015 年推出,因其高速度和高精确度而迅速受到欢迎。
YOLO 开源网址:GitHub - ultralytics/YOLO
YOLOv8 开源网址:GitHub - ultralytics/YOLOv8
- 2016 年发布的YOLOv2 通过纳入批量归一化、锚框和维度集群改进了原始模型。
- 2018 年推出的YOLOv3 使用更高效的骨干网络、多锚和空间金字塔池进一步增强了模型的性能。
- YOLOv4于 2020 年发布,引入了 Mosaic数据增强、新的无锚检测头和新的损失函数等创新技术。
- YOLOv5进一步提高了模型的性能,并增加了超参数优化、集成实验跟踪和自动导出为常用导出格式等新功能。
- YOLOv6于 2022 年由美团开源,目前已用于该公司的许多自主配送机器人。
- YOLOv7增加了额外的任务,如 COCO 关键点数据集的姿势估计。
- YOLOv8Ultralytics YOLOv8 引入了新的功能和改进,以提高性能、灵活性和效率,支持全方位的视觉人工智能任务、
- YOLOv9引入了可编程梯度信息 (PGI) 和广义高效层聚合网络 (GELAN) 等创新方法。
- YOLOv10是由清华大学的研究人员使用该软件包创建的。 UltralyticsPython 软件包创建的。该版本通过引入端到端头(End-to-End head),消除了非最大抑制(NMS)要求,实现了实时目标检测的进步。
- YOLO11 🚀新功能: ’ 最新的 模型可在Ultralytics YOLO 检测、分割、姿势估计、跟踪和分类等多项任务中提供最先进的 (SOTA) 性能,充分利用各种人工智能应用和领域的能力。
1.2 YOLOv8 的特点
YOLOv8 是 ultralytics 公司在 2023 年 1月 10 号开源的 YOLOv5 的下一个重大更新版本,支持图像分类、物体检测和实例分割任务。
YOLOv8 是一个 SOTA 模型,它建立在以前 YOLO 版本的基础上,并引入了新的功能和改进。具体创新包括一个新的骨干网络、一个新的 Ancher-Free 检测头和一个新的损失函数,可以在从 CPU 到 GPU 的各种硬件平台上运行。
YOLOv8 算法的主要创新和改进包括:
- 提供了一个全新的 SOTA 模型,包括 P5 640 和 P6 1280 分辨率的目标检测网络和基于 YOLACT 的实例分割模型。与 YOLOv5 一样,基于缩放系数也提供了 N/S/M/L/X 尺度的不同大小模型,用于满足不同场景需求。
- 骨干网络和 Neck 部分参考了 YOLOv7 ELAN 设计思想,将 YOLOv5 的 C3 结构换成了梯度流更丰富的 C2f 结构,并对不同尺度模型调整了不同的通道数。
- Head 部分相比 YOLOv5 改动较大,换成了主流的解耦头结构,将分类头和检测头分离,同时也从 Anchor-Based 换成了 Anchor-Free。
- Loss 计算采用了 TaskAlignedAssigner 正样本分配策略,并引入了 Distribution Focal Loss。
- 训练的数据增强部分引入了 YOLOX 中的最后 10 epoch 关闭 Mosiac 增强的操作,可以有效地提升精度。
总之,YOLOv8 主要参考了最近提出的诸如 YOLOX、YOLOv6、YOLOv7 和 PPYOLOE 等算法的相关设计,原创的创新点不多,偏重于工程优化。
网络架构:
YOLOv8 官方版的模型结构如下图所示。
骨干网络和 Neck 的具体变化为:
- 第一个卷积层的 kernel 从 6x6 变成了 3x3
- 所有的 C3 模块换成 C2f,结构如下所示,可以发现多了更多的跳层连接和额外的 Split 操作
- 去掉了 Neck 模块中的 2 个卷积连接层
- Backbone 中 C2f 的block 数从 3-6-9-3 改成了 3-6-6-3
查看 N/S/M/L/X 等不同大小模型,可以发现 N/S 和 L/X 两组模型只是改了缩放系数,但是 S/M/L 等骨干网络的通道数设置不一样,没有遵循同一套缩放系数。如此设计的原因应该是同一套缩放系数下的通道设置不是最优设计,YOLOv7 网络设计时也没有遵循一套缩放系数作用于所有模型
Head 部分变化很大,其结构如下图所示。
- 从原先的耦合头变成了解耦头,并且从 YOLOv5 的 Anchor-Based 变成了 Anchor-Free。
- 使用解耦的分类和回归分支,回归分支使用了 Distribution Focal Loss 中提出的积分形式表示法。
2. YOLOv8 模型下载与环境配置
2.1 下载 YOLOv8 模型
YOLOv8 开源网址:GitHub - ultralytics/YOLOv8
克隆 repo。
git clone https://github.com/ultralytics/ultralytics
或者直接从 GitHub 网页下载压缩文件,如下图所示。
在下载的 YOLOv8 项目中,包括了项目说明文档:英文版 Readme.md 和中文版 Readme.zh-CN.md 。
2.2 虚拟环境配置
虚拟环境可以将YOLOv8训练所需的依赖包和其他项目的依赖包隔离开来,避免版本冲突,更加便于管理。
推荐使用 miniconda 搭建Python环境,其安装和使用可以参见:【youcans的深度学习 01】安装环境详解之 miniconda。
(1)创建 yoloV8 环境。
创建名称为 yoloV8 的 Python 环境,Python 版本为3.8。
conda env list
conda create -n yoloV8 python=3.8
(2)在所选择的 Python 环境下,安装 yoloV8 项目所需的依赖(安装项目所需的库)。
本项目中的 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 环境 yoloV8,pip 安装所需的库。
conda activate yoloV8
pip install -r requirements.txt
由于安装 yoloV8 项目所需的第三方库内容很多,如果下载太慢,可以指定下载源,也可以从已有的虚拟环境中复制 Lib\site-package 中的内容,但要检查版本能否满足本项目中的 requirements.txt 的要求。对于未安装的库或版本不满足要求的库,再手动安装,或者接下来在 PyCharm 终端完成(也即:不用担心,详见下文)。
2.3 安装 YOLOv8
- 在线安装
YOLOv8 提供了命令行执行方式,但是需要按照要求来进行安装:
pip install ultralytics
这种方式安装方便,但对网络有一定要求,而且不方便对源码的修改(修改后容易出错),因此并不推荐。
- 离线安装
将下载的压缩文件(如 ultralytics-8.1.0.zip)解压到 Python 项目文件夹,如"C:\Python|PythonProjects\YOLOv8"。
打开 miniconda Prompt,激活刚才创建的 Python 环境 yoloV8,切换到解压文件夹,pip 安装 YOLOv8。注意安装命令中的 “-e” 和 “.” 之间有一个空格。
conda activate yoloV8
cd C:\Python\PythonProjects\YOLOv8
pip install -e .
(base) C:\Users\Administrator>conda activate yoloV8(yoloV8) C:\Users\Administrator>cd C:\Python\PythonProjects\YOLOv8(yolov8) C:\Python\PythonProjects\YOLOv8>pip install -e .
Obtaining file:///C:/Python/PythonProjects/YOLOv8Installing build dependencies ... doneChecking if build backend supports build_editable ... doneGetting requirements to build editable ... donePreparing editable metadata (pyproject.toml) ... done
...Building wheels for collected packages: ultralytics
...Successfully built ultralytics
Installing collected packages: hub-sdk, thop, ultralytics
Successfully installed hub-sdk-0.0.17 thop-0.1.1.post2209072238 ultralytics-8.1.0
安装 ultralytics-8.1.0 之后,推荐安装 Jupyterlab 和 tensorboard(非必需),以便观察 loss 变化和修改代码。
pip install jupyterlab tensorboard
- 安装测试
安装 ultralytics-8.1.0 之后,在该环境下(miniconda Prompt)直接输入 “yolo”:
yolo help
如下图所示,系统给出 YOLOv8 的帮助提示信息,说明安装成功。
2.4 配置 PyCharm 编译器
(1)使用 PyCharm 编辑器打开下载的 YOLOv8 项目。
(2)在 PyCharm 的菜单 “文件-设置-项目-Python 解释器(python interpreter)” 中,为项目配置 Python 环境。注意要求 Python>=3.8.0 环境。
这个步骤需要用户根据计算机的 Python 环境来选择,但该环境中需要安装 PyTorch 等 Python 库。注意要求 PyTorch>=1.8 。
例如,点击 “add interpreter”,选择刚才创建的虚拟环境 yoloV8 的编译器,默认路径是 C:/Users/Administrator/ .conda/envs/yolov8/python.exe。
(3)配置 PyCharm 终端(Terminal)。
打开 miniconda Prompt 文件,鼠标右键点击属性,查看目标位置,复制 cmd.exe 及后面的内容。将复制的路径填入 PyCharm 设置中的 “文件-设置-工具-shell 路径”,如下图所示。
(4)在 Pycharm 终端安装项目依赖(所需的第三方包)。
pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install yolo -i https://pypi.tuna.tsinghua.edu.cn/simple
配置完成后,在 PyCharm 的命令行窗口,激活 YOLOv8 虚拟环境,输入 “yolo help” 。如下图所示,系统给出 YOLOv8 的帮助提示信息,说明配置成功。
3. 运行 YOLOv5 推理
3.1 下载 YOLOv8 预训练模型
使用 YOLOv8 进行推理,首先要下载 YOLOv8 预训练模型。
在 YOLO/GitHub 项目仓,提供了检测(Detection)、分类(Classification)、分割(Segmentation)、姿态估计(Pose)、定向边界框检测(OBB)等任务的预训练模型。YOLOv8 有多个不同规模的模型,从小到大依次是:YOLOv8n、YOLOv8s、YOLOv8m、YOLOv8l、YOLOv8x。这些模型与各种操作模式兼容,包括推理、验证、训练和导出,便于在部署和开发的不同阶段使用。
点击所需的即可下载。
由于 YOLO 更新很快,主页的文档(包括README)经常更新,YOLOv8 预训练模型的入口不容易找,现将下载地址列表如下。
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8n-pose.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8s-pose.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8m-pose.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8l-pose.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8x-pose.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8n-seg.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8s-seg.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8m-seg.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8l-seg.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8x-seg.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8n-cls.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8s-cls.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8m-cls.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8l-cls.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8x-cls.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8n.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8s.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8m.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8l.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8x.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8n-obb.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8s-obb.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8m-obb.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8l-obb.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8x-obb.pt
本文选择 YOLOv8n,参数约 6M。下载完成后,将下载的预训练模型文件 yolov8n.pt 放在 YOLOv8 项目的根目录路径下,例如 “C:\Python\PythonProjects\YOLOv8”。
3.2 命令行(CLI)接口的模型推理
YOLOv8 支持使用命令行接口(command line interface, CLI)对模型进行训练、验证或运行推断。
YOLOv8 命令行接口(CLI)方便在各种任务和版本上训练、验证或推断模型,不需要定制或代码,可以使用 yolo 命令从终端运行所有任务。
语法:
yolo task=detect mode=train model=yolov8n.yaml args...classify predict yolov8n-cls.yaml args...segment val yolov8n-seg.yaml args...export yolov8n.pt format=onnx args...
具体操作步骤如下:
-
使用 miniconda Prompt 命令行,激活 YOLOv8 虚拟环境,输入如下命令对指定图片进行检测。检测结果默认保存在 “.\runs\detect\predict” 目录下。
-
在 PyCharm 的命令行窗口,激活 YOLOv8 虚拟环境,输入如下命令对指定图片进行检测。检测结果默认保存在 “.\runs\detect\predict” 目录下。
conda activate yoloV8
yolo predict model=yolov8n.pt source=‘ultralytics/assets/bus.jpg’
注意:
(1)必须先激活 YOLOv8 虚拟环境。
(2)当前路径必须是 YOLOv8 项目所在的目录,例如 “C:\Python\PythonProjects\YOLOv8”。
(3)预训练模型 yolov8n.pt 必须保存在模型配置参数 “model” 指定的路径。例如,如果预训练模型保存在 “C:\Python|PythonProjects\YOLOv8\model\yolov8n.pt”,则将模型配置参数修改为 “model=.\model\yolov8n.pt”。
(4)待检测的图片必须保存在 “source” 指定的路径,可以是图像路径、视频文件、目录、URL 或用于摄像头设备 ID。例如,可以指定网络地址,读取待检测图片。
yolo predict model=yolov8n.pt source=‘https://ultralytics.com/images/bus.jpg’
(5)检测结果默认保存在 “.\runs\detect\predict” 目录下,也可以在命令中使用 “project” 参数,指定保存预测结果的项目目录名称。
(6)完整的写法是:
yolo task=detect mode=predict model=yolov8n.pt source=‘ultralytics/assets/bus.jpg’
3.3 使用 Python 接口的模型推理
YOLOv8 也提供了 Python 接口的调用方式。它提供了加载和运行模型以及处理模型输出的函数。该界面设计易于使用,以便用户可以在他们的项目中快速实现目标检测。
使用预训练模型 yolov8n.pt 进行推理的 Python 程序如下。
from ultralytics import YOLO# 加载预训练的YOLO模型
model = YOLO("./yolov8n.pt",task = "detect")# 使用模型对图像执行对象检测
result = model(source="./ultralytics/assets/Mask01.jpg", save=True)
运行程序,就实现对指定图像文件的检测,并将检测结果保存到文件夹 “./runs/detect/predict”。
运行结果与 命令行接口的调用 是相同的。
3.4 分割任务和分类任务
YOLOv8 默认执行检测任务,也可以提供指定参数 TASK 实现分割、分类、姿势、定位任务。注意需要下载或使用对应任务的预训练模型,例如:分割任务模型 yolov8n-seg.pt,分类任务模型 yolov8n-cls.pt。
yolo TASK MODE ARGSWhere 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("./yolov8n-seg.pt",task = "segment")# 使用模型对图像执行对象检测
result = model(task="segment", source="./ultralytics/assets/Mask01.jpg", save=True)
- 分类任务(“classify”)
from ultralytics import YOLO# 加载预训练的YOLO模型,分类任务
model = YOLO("./yolov8n-cls.pt",task = "classify")# 使用模型对图像执行对象检测
result = model(task="classify", source="./ultralytics/assets/Mask01.jpg", save=True)
分割任务和分类任务的运行结果如下。
3.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
4. 修改 YOLOv8 程序
YOLOv8 的源程序位于项目路径 “./ultralytics/engine/” 目录中。
- 从 PyCharm 打开 model.py 文件,该文件定义了 YOLOv8 的模型类,作为 YOLOv8 模型的统一接口。
-
在 predict() 函数中添加一行测试代码 (Line274:print(“— Test code —”))并保存。
-
在 PyCharm 的终端输入命令执行推理任务,或通过 Python 程序调用模型进行推理。
yolo predict model=yolov8n.pt source=‘https://ultralytics.com/images/bus.jpg’
则此时在终端会打印输出 “— Test code —” 内容,说明该程序已被修改。
【本节完】
版权声明:
欢迎关注『youcans动手学模型』系列
转发请注明原文链接:
【YOLO 项目实战】(10)YOLO8 环境配置与推理检测
Copyright 2024 youcans
Crated:2024-12-16