欢迎关注『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 使用命令行方式进行推理
- 3.3 使用 Python 接口的调用方式
- 3.4 参数说明
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/YOLOv8
Installing build dependencies ... done
Checking if build backend supports build_editable ... done
Getting requirements to build editable ... done
Preparing 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,参数约 11.2M。下载完成后,将下载的预训练模型文件 yolov8n.pt 放在 YOLOv8 项目的根目录路径下,例如 “C:\Python|PythonProjects\YOLOv8”。
3.2 使用命令行方式进行推理
-
使用 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 接口的调用方式。
将命令行推理的命令拆开,相当于 2句 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 参数说明
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 项目实战】(10)YOLO8 环境配置与推理检测
Copyright 2024 youcans
Crated:2024-12-16