前文
关于YOLO8学习(一)环境搭建,官方检测模型部署到手机
关于YOLO8学习(二)数据集收集,处理
简介
本文将会讲解:
(1)如何通过PyCharm,进行训练数据,实现人脸检测
开发环境
win10、python 3.11、cmake、pytorch2.0.1+cu117、pycharm、ultralytics==8.0.134
要特别注意,不要升级到python312,目前onnx还没支持到312,所以转换了,会导致转换模型失效。
对于上述环境如何配置,请看我之前的文章。
开发过程
首先要明确一点,我们是要用过pycharm集合python311环境,训练出一个Yolo8的模型,用于后续的操作的。
而如何训练,训练又有些什么坑,本文就是讲述这个的。先放出所有训练相关的代码:
训练入口:main.py
# fruit 300
if __name__ == '__main__':
import os
from ultralytics import YOLO
ROOT_DIR = 'E:/workstation/python/python_yolo'
model = YOLO('yolov8n.yaml')
model.train(
data=os.path.join(ROOT_DIR, "config.yaml"),
device='0',
optimizer="auto",
epochs=10, # 训练过程中整个数据集将被迭代多少次,显卡不行你就调小点
batch=16, # 一次看完多少张图片才进行权重更新
workers=2,
verbose=True,
half=True,
amp=False,
dynamic=False,
simplify=False,
imgsz=640)
参数解析
可以看到,一开始就是指定了一个目录ROOT_DIR,这个目录是项目的目录,用于存储训练的文件的,作为其根目录。然后yolov8n.yaml就是读取这个yolo8模型的n类型模型,而除了这个n类型以外,还有什么模型呢?官方截图如下:
这里由于要部署到手机的原因,所以使用了比较小的模型,训练出来的体积也不大。但是精度肯定是没有大的模型要高的。
接着上文说到的,现在继续看model.train方法种的参数,更详细的参数,可以从官网种查询得到,而我这里,只用到了自己的一些参数,就不做翻译官了,说明一下这些参数的意思。
data – 指定自己的配置文件
device – 指定训练的模型(cpu还是gpu)一般都是gpu训练,cpu训练是真的慢,这里写了一个‘0’,就是有第一个gpu,如果你有多个,也可以写[‘0’,‘1’],以此类推
optimizer – 简单来讲,就是优化器,一般都是’SGD’, ‘Adam’,这里设置为’auto‘,就是让yolo自己决定,对于新手来讲建议可以这样设置,比较省心。而对于精度上面有要求的,可以通过分阶段设置不同的优化器,从而达到更好的效果
epochs – 训练的轮数,一般训练,至少是500次起步的,普遍都是3000轮左右有比较好的效果。当然,这个也要看具体结果种的损失函数趋势来判断,不能一概而论。
batch – 每次训练多少张,才进行权重的更新。可以理解为,你训练的时候,一批次多少数据。这里前期的值,建议是16或者32,到后面需要调整拟合度的时候,才进行适当的调整。
workers – 训练的工作线程数,默认是8,但是实际要看你的机器,如果机器配置不是很好,建议适当调整小一点。
verbose – 训练过程种,是否输出调试的信息
half – 单精度设置,这个设置为true,就是为了让训练的模型在移动端的机器上面,跑得更轻松一点
amp – 混合精度计算训练。为什么这里设置为False,因为博主用的是gtx1660显卡,如果这里不这样设置,会导致无法使用gpu进行训练,官方解析这是这个系列显卡的一个bug,目前只能这样解决。
dynamic – 是否允许模型接受动态输入的大小,这里设置为False,可以保证更好的识别效果。
simplify – 是否简化模型
imgsz – 输入数据的大小。这里一般都是设置640,这也是官方建议的值。当然,你可以设置适当的值用于实际的项目,但是要注意一点,由于数据源是通过缩放变成该像素的,所以数据源是一个考虑的条件,同时,也要注意,如果缩小太多,会导致失真,特征值不明显,简单一句,就是识别结果不明显。但是为了移动端的考虑,这个值到最后转换的时候,都会转换为320,保证帧率的同时也保证质量。
配置文件:config.yaml
path: E:/workstation/python/python_yolo
train: images/train
#test: images/val
val: images/val
names:
0: face
这里就是配置了相关的训练路径,还是类别“names”,构成就是一个从0开始的下标和对应的标签名字。
这个下标,同样地,和你之前标注文件种的第一个参数对应。由于这里只训练一个类别,所以只有一个。
数据集合整理:关注并回复 “yolo8检测人脸数据集”即可
训练数据目录的整理:
通过配置文件config.yaml可以看到,一个是train训练目录,一个是val验证目录,同样,放出具体的目录,截图如下:
这个就是训练数据的相关目录了
上述就是所有相关的资料和代码。
然后指定Main.py脚本,完成训练后,目录下会有一个这样的文件夹:
其中,best.pt就是最好结果的模型,同样故名思意,last就是最后一次训练的模型,这里的最后一次,一般都是指最后一轮,但是也有不确定因素。一般转换模型,就拿best.pt
注意
(1)如果中断了训练,可以加入resume=True参数,指定原来的模型文件,执行脚本即可进行训练
(2)基于旧模型进行训练,同步骤(1),去除resume=True即可
that’s all---------------------------------------------------------------------------------------------------