10分钟部署一个模型:YOLOV8从环境配置到模型部署优化
10分钟部署一个模型:YOLOV8从环境配置到模型部署优化
本文详细介绍了YOLOv8模型从环境配置到模型部署优化的完整过程。内容涵盖虚拟环境搭建、模型部署、训练以及优化等多个环节的具体步骤和代码示例,适合对机器学习和计算机视觉感兴趣的读者。
一、虚拟环境搭建
1.创建虚拟环境
使用Anaconda Prompt进行虚拟环境搭建:
conda create -n yolov8 python=3.10
这里我们使用Python 3.10版本。
2.激活虚拟环境
activate yolov8
成功激活环境后,左侧base将转换为yolov8。
3.下载yolov8源码
在GitHub上下载ultralytics提供的yolov8项目源码,网址如下:GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite
下载后,文件路径示例为:D:\MyDLdemo\ultralytics-main
4.配置运行环境
在Anaconda Prompt中继续配置yolov8运行所需的环境。首先跳转至yolov8项目的文件路径并运行文件夹内的requirements.txt配置文本。由于yolov8官方不提供requirements.txt,需要手动创建。文本内容如下:
# Ultralytics requirements
# Usage: pip install -r requirements.txt
# Base ----------------------------------------
matplotlib>=3.2.2
numpy>=1.22.2 # pinned by Snyk to avoid a vulnerability
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.13.0
# dvclive>=2.12.0
# clearml
# comet
# Plotting ------------------------------------
pandas>=1.1.4
seaborn>=0.11.0
# Export --------------------------------------
# coremltools>=6.0,<=6.2 # 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>=2023.0 # OpenVINO export
# Extras --------------------------------------
psutil # system utilization
py-cpuinfo # display CPU info
# thop>=0.1.1 # FLOPs computation
# ipython # interactive notebook
# albumentations>=1.0.3 # training augmentations
# pycocotools>=2.0.6 # COCO mAP
# roboflow
创建完成后运行requirements.txt:
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
同理下载其他配置文件:
pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install yolo -i https://pypi.tuna.tsinghua.edu.cn/simple
二、yolov8模型部署
1.在pycharm中部署虚拟环境
如果显示找不到Conda文件,需要找到condabin\codna.bat文件。加载后即可选择conda的虚拟环境,选择yolov8。
2.运行yolov8
虚拟环境配置好后,去官网下载预训练模型:YOLOv8 -Ultralytics YOLO 文档。直接点击YOLOv8n/s/m/l/x即可下载预训练模型。
创建运行yolov8模型权重的py文件:
import cv2
from ultralytics import YOLO
# 加载yolo模型
model = YOLO(r'D:\MyDLdemo\ultralytics-main\yolov8n.pt')
# 打开摄像头
cap = cv2.VideoCapture(0)
# 循环遍历视频帧
while cap.isOpened():
success, frame = cap.read()
results = model(frame, conf=0.6)
annotated_frame = results[0].plot()
if success:
# 运行yolov8
results = model(frame)
# 限制
results = model(frame,conf=0.6)
# 把结果可视化
annotated_frame = results[0].plot()
# 框上显示
cv2.imshow("YOLOv8 Inference", annotated_frame)
# 按q退出
if cv2.waitKey(1) & 0xFF == ord("q"):
break
else:
# 如果到达视频结尾,则中断循环
break
cap.release()
cv2.destroyAllWindows()
然后运行py文件即可使用yolov8模型。效果如下:
3.训练yolov8
3.1 准备数据
训练模型首先准备数据,通过labelimg对图像进行特征标注(用YOLO格式),也可以使用robflow平台进行数据标注。在D:\MyDLdemo\ultralytics-main下创建数据集文件夹datasets。然后按这个格式划分数据集:test为测试集、train为训练集、valid为验证集,三者占比一般为:train:test:valid = 7:2:1。
data.yaml文件包含了关于数据集的所有必要信息,比如训练集和验证集的路径、类别名称等,其内容如下:
names:
- potato_health
- potato_lateblight
- potato_earlyblight
- corn_health
- corn_leafblight
- corn_rust
- rice_water_weevil
- leafhopper
- grubs
- mole_crickets
- person
nc: 11
test: ../test/images
train: ../train/images
val: ../valid/images
backbone:
#[from, repeats, module, orgs]
- [-1, 1, Conv, [64, 3, 2]] #0-P1/2
- [-1, 1, Conv, [128, 3, 2]] #1-P2/4
- [-1, 3, C2f, [128, True]]
- [-1, 1, Conv, [256, 3, 2]] #3-P3/8
- [-1, 6, C2f, [256, True]]
- [-1, 1, Conv, [512, 3, 2]] #5-P4/16
- [-1, 6, C2f, [512, True]]
- [-1, 1, Conv, [1024, 3, 2]] #7-P5/32
- [-1, 3, C2f, [1024, True]]
- [-1, 1, SPPF, [1024, 5]] #9
head:
- [-1, 1, nn.Upsample, [None, 2, 'nearest']]
- [[-1, 6], 1, Concat, [1]]
- [-1, 3, C2f, [512]]
- [-1, 1, nn.Upsample, [ None, 2, 'nearest' ] ]
- [[-1, 4], 1, Concat, [1]]
- [-1, 3, C2f, [256]]
- [-1, 1, Conv, [256, 3, 2]]
- [[-1, 12], 1, Concat, [1]]
- [-1, 3, C2f, [512]]
- [-1, 1, Conv, [512, 3, 2]]
- [[-1, 9], 1, Concat, [1]]
- [-1, 3, C2f, [1024]]
- [[15, 18, 21], 1, Detect, [nc]]
3.2 模型训练
准备进行训练,这里使用jupyter notebook。首先查看电脑是否安装CUDA:
!nvidia-smi
跳转到项目文件夹:
cd "D:\MyDLdemo\ultralytics-main"
获取当前目录并打印:
import os
HOME = os.getcwd()
print(HOME)
导入YOLO对象检测功能和在IPython环境中显示图像的功能:
from ultralytics import YOLO
from IPython.display import display, Image
创建数据集文件夹(如果它不存在的话):
%cd D:\MyDLdemo\ultralytics-main\datasets
开始训练:
%cd {HOME}
!yolo task=detect mode=train model=yolov8n.pt data=D:\MyDLdemo\ultralytics-main\datasets\data.yaml batch=16 epochs=3 imgsz=640 plots=True device=0
其中:
- task是指定任务类型有检测(detect)、分割(segment)、分类(classify)等;
- mode是指定操作模式有训练(train)、验证(val)以及测试(test)等;
- model是指定使用的模型权重模型,这里使用yolov8n.pt的权重模型;
- data是数据集配置文件的路径;
- batch为训练时的批量大小;
- epochs是训练的总轮次;
- imgsz是输入图像的像素大小;
- plots是指定训练过程中生成显示图表;
- device是指定训练使用设备。
这样就成功训练了。
3.3 训练结果
当运行完训练结果时,文件夹下会生成runs文件夹。在runs\detect\train文件夹内容具体如下:包含weights文件夹,其中含有yolov8模型训练中的最高/低的pt权重文件;训练数据的混淆矩阵,每次训练详细信息的csv文件以及部分图片的检测结果图片等。这时候就可以将ultralytics官方提供的预训练模型替换成自己训练后的best.pt了。
三、yolov8模型优化
1.yolov8的网络结构
想要对模型进行修改就得先了解其网络结构。YOLOv8目标检测算法于 2023 年由 Ultralytics 公司发布,具有高精度和快速推理速度。该模型网络结构可以分为输入端(Input)、骨干网络(Backbone)、颈部网络(Neck)和头部网络(Detect) 4 个部分。主干网络主要负责提取图像特征,可分为 3 部分:标准卷积(Conv)模块、C2f 模块、SPPF 模块。
- Conv 模块包括卷积层、批量归一化层和激活函数层。
- C2f 模块主要是参考 C3 模块和 ELAN 的思想进行设计,在一个维度上将输入特征图分成两部分,在减少计算量的同时丰富了梯度流信息,有助于提高模型非线性表示能力。
- SPPF 模块连接了主干网络和颈网络,通过不同的卷积核提取相关农作物对应病虫害特征后再融合不同尺度的特征信息。
颈网络使用 PAN-FPN 结构,FPN 结构从上往下采样提取语义特征,提高模型多尺度检测精度,PAN结构从下往上采样提取丰富的位置信息,并与高分辨率特征图拼接,增强目标定位能力。检测网络以目标概率类别、置信度分数以及目标框位置作为最终的输出结果。
2.yolov8模型优化
充分了解过YOLOv8的网络结构后,就可以根据自己的任务去修改对应的结构已达到目标的效果。关于yolo的模型优化网络上的资源还是挺多的,可以根据自己的需求和目标去学习相关的方法。