因为要给学弟学妹分享模型,把关键步骤记录下来,写一个博客作为备忘录,希望也能帮助到大家
目录
一、虚拟环境搭建
1.创建虚拟环境
打开Anaconda Prompt进行虚拟环境搭建:
conda create -n yolov8 python=3.10
如图所示
这里我们使用python3.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
虚拟环境配置好后去官网下载预训练模型
直接点击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为数据集的标记名称,nc为种类,test/train/val为对应的路径,以及backbone和head的网络结构
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结构从下往上采样提取丰富的位置信息,并与高分辨率特征图拼接,增强目标定位能力。检测网络以目标概率类别、置信度分数以及目标框位置作为最终的输出结果。
更加具体的了解可以去看万维探索的介绍:YOLOv8 架构详解:图示 + 代码 (vectorexplore.com)
2.yolov8模型优化
充分了解过YOLOv8的网络结构后,就可以根据自己的任务去修改对应的结构已达到目标的效果,关于yolo的模型优化网络上的资源还是挺多的,大家根据自己的需求和目标去学习相关的方法就行