YOLO模型YOLO(You Only Look Once)是一种高效的目标检测模型,它将图像划分为网格,并在每个网格中同时预测边界框和类别,从而实现端到端的实时目标检测。与传统方法相比,YOLO具有速度快、精度高、适用于实时应用的优点,广泛应用于视频监控、自动驾驶等领域。
博主最近也在学习神经网络相关知识,本期记录一下Windows系统训练和部署YOLO神经网络模型的过程。
系统环境:Python 3.9、PyCharm 2022
1、环境安装
Python 3.9和PyCharm的环境安装不做过多的描写,我们主要介绍搭建一个Pytorch和YOLO环境搭建。
(1-1)首先搭建一个Pycharm的基本工程,Python释器版本选择3.9版本。
图2 PyCharm默认工程图
(1-2)打开终端我们安装需要对应PyTorch和YOLO的库文件。
图3 终端使用图
( GPU版本)
PyTorch的模型训练可以选择CPU训练或者GPU加速,GPU加速的情况下训练速度会比CPU快很多很多很多!!!因此我们需要查询和自己GPU适配的PyTorch版本(本文内容适用于N卡)。
(1-3可选)查询CUDA版本
nvidia-smi
查询CUDA 版本
图4 CUDA版本查看
可以看到我的CUDA版本为12.6。
(1-4)接下来根据CUDA版本我们使用pip命令来安装PyTorch,大家可以根据官网推荐的版本来安装。
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
安装cuda12.1版本的pytorch (12.6兼容12.1)
图5 Pytorch安装
库文件比较大,大概有2G+,如果遇到网络问题可以多安装几次。
(1-5)查询pytorch是否安装成功
python -c "import torch; print(torch.cuda.is_available())"
查询pytorch并且是否支持GPU
图6 pytorch验证
返回True即可代表我们可以正常使用GPU
(1-6)安装YOLO
pip install ultralytics
YOLO库代码安装
图7 Yolo验证
安装成功后输入yolo会返回很多内容,接下来实现模型训练。
2、训练集准备
图8 文件存放架构图
(2-1)按照这个路径我们存放训练集和验证集,images和labels分别存储图像数据和标签。train文件夹存放用于训练的数据,val存放用于验证的数据。
labels是YOLO格式的txt文件如图所示:
图9 Yolo标注格式
它表达了我们要识别的内容在图像中的位置信息,可以使用标注工具来制作(可以查询Labelimg的教学)
图10 Labelimg使用实拍
(2-2)制作配置文件dataset.yaml(文件名不必相同)
train: ./data/images/train #训练集地址val: ./data/images/val #验证集地址nc: 4 # 类别数量names: ['Chongdianbao', 'Red Tea', 'Pen', 'Upan'] # 类别名称
dataset.yaml配置文件用于等会模型训练
图11 yaml配置文件
(2-3)模型训练代码
import torchfrom ultralytics import YOLOimport multiprocessingdef run():model = YOLO('yolov8n.pt') # 直接使用预训练模型微调model.train(data = './dataset.yaml',#模型配置文件epochs = 800,#总训练轮数800轮imgsz = 480,#图片缩放为480*480batch = 20, #一批20张name = 'yolov8_custom',#模型名字device = 0, #使用GPU进行计算val = True #训练过程中执行验证)# 评估模型results = model.val()print(results)if __name__ == '__main__':multiprocessing.freeze_support()run()
模型训练Demo
图12 训练时命令行截图
接下来命令行会实时显示训练过程,等待训练结束后,可以在runs文件夹中找到我们的模型。
图13 结果图
图14 模型结果
weights中存放着模型,其中best.pt为最优模型,last.pt为上一次模型。
(2-4)模型使用
from ultralytics import YOLOimport cv2# 1. 加载训练好的模型(可以是 yolov8n.pt 或你的 best.pt)model = YOLO("best.pt")# 2. 读取一张图片img = cv2.imread("test.jpg")# 3. 进行推理(返回结果列表)results = model.predict(source=img, save=False)# 4. 将检测框画在图上并显示annotated = results[0].plot()cv2.imshow("YOLO Detection", annotated)cv2.waitKey(0)cv2.destroyAllWindows()
模型使用Demo
3、测试效果
标注过程是真的痛苦啊,感觉像是电子打螺丝
1.1万