1、环境准备
1.1、安装miniconda
地址:Index of /anaconda/miniconda/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
注意:为避免不兼容的问题,推荐下载py38版本,我下载的是Miniconda3-py38_23.1.0-1-Windows-x86_64.exe
安装建议:
①、推荐安装在C盘;
②、勾选将其添加进Path,如下图(不要选为所有用户,要选仅为自己安装,否则不会有该选项);
1.2、创建并激活虚拟环境
概述:为了不影响默认环境的使用,推荐创建一个新的虚拟环境。
首先打开 Anaconda Prompt ,然后输入如下命令创建一个名为 yolov8 的虚拟环境:
# 推荐指定一个python版本,防止自动指定高版本的python导致不兼容
conda create -n yolov8 python=3.8
运行结果如下:
接下来在 Anaconda Prompt 输入如下命令激活虚拟环境,虽然说叫激活,也可以理解为切换到指定的虚拟环境:
conda activate yolov8
运行结果如下(命令行前面的小括号中显示yolov8就说明激活成功了):
1.3、配置镜像
概述:为保证后续能实现较高的下载速度,建议配置一个国内的镜像。
参考地址:pypi | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
在 Anaconda Prompt 输入如下命令配置默认镜像:
pip config set global.index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
运行结果如下:
1.4、安装Pytorch
在安装Pytorch之前需要查看自己显卡的版本信息,在 Anaconda Prompt 输入如下命令即可查看:
nvidia-smi
运行结果如下:
接下来进入Pytorch官网:Previous PyTorch Versions | PyTorch
注意:
①、16系显卡需安装 cu102 版本;
②、30系,40系显卡要安装 cu111 以上的版本,否则无法运行;
③、为避免冲突,Pytorch的版本推荐 v1.13 。
由于我使用的是30系显卡,所以可以使用CUDA11.7,因此我复制了此链接,如果你们使用的是16系显卡可以去找cu102版本的Pytorch。
注意:如果你的下载时间有2个多小时,你可能获取了一个wheel的下载链接,你要选择一个Conda下面的链接进行下载。
在 Anaconda Prompt 输入如下命令安装支持30系显卡和40系显卡的Pytorch:
conda install pytorch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 pytorch-cuda=11.7 -c pytorch -c nvidia
运行结果如下:
1.5、安装CUDA
概述:此处需根据自身情况进行安装,如果你的需求只是做训练和简单推理,可忽略本小节,如果你有部署的需求,例如导出模型,则需要安装CUDA。
下载地址:https://developer.nvidia.com/cuda-downloads
根据自己的实际情况进行下载并安装即可:
1.6、源码安装ultralytics
下载地址:ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite (github.com)
将下载好的压缩包解压到d盘下的yolov8文件夹中(yolov8文件夹是我自己提前手动创建的):
在 Anaconda Prompt 输入如下命令实现 ultralytics 的源码安装:
# 切换到d盘
d:
# 进入文件夹
cd D:\yolov8\ultralytics-main
# 源码安装
pip install -e .
运行结果如下:
2、标记验证码
概述:本文使用labelImg进行标记,在终端中(Alt+F12)输入如下命令进行安装:
pip install labelImg
运行结果如下:
输入如下命令启动labelImg:
labelImg.exe
按照下图步骤对图片进行标注:
我总计标注了109张图片,名称从1开始到109结束,接下来在任意位置创建一个名为yzm的文件夹,该文件夹作为我们的数据集文件夹,然后在yzm文件夹中分别创建名为images的文件夹和labels的文件夹,然后在images文件夹和labels文件夹中都创建名为train的文件夹和val的文件夹,具体文件结构如下:
images文件夹用于放图片,labels文件夹用于放txt文件,我将1~99号图片放进了images/train目录中,100~109号图片放进了images/val目录中,1~99号txt文件放进了labels/train目录中,100~109号txt文件放进了labels/val目录中,classes.txt文件放在labels目录下。
注意:图片和txt文件的名称必须 一 一 对应 !!!
Pycharm打开前面解压的 D:\yolov8\ultralytics-main (根据自己的情况打开,如果按照我的步骤做的继续跟做即可)。
在ultralytics-main的根目录下创建一个名为 datasets 的文件夹,然后把前面准备的 yzm 文件夹粘贴到 datasets 中,目录结构如下:
3、训练模型
首先修改一下Pycharm的解释器:
然后参考如下文件编写yaml文件:ultralytics-main\ultralytics\cfg\datasets目录下所有的yaml文件。
在 ultralytics-main 项目的根目录下创建一个名为 yolo-yzm.yaml 文件,参考内容如下:
# 声明项目图片在哪儿
path: yzm
# 训练集图片
train: D:\yolov8\ultralytics-main\datasets\yzm\images\train
# 验证集图片
val: D:\yolov8\ultralytics-main\datasets\yzm\images\val
# 声明类别,可以从classes.txt文件中获取
names:
0: k
1: f
2: 3
3: w
4: l
5: y
6: q
7: n
8: c
9: j
10: e
11: g
12: 2
13: a
14: b
15: d
16: 1
17: 4
18: v
19: 5
20: r
21: p
22: t
23: u
24: z
25: i
26: 7
27: s
28: m
29: h
30: C
3.1、利用命令训练模型
# 在Pycharm中的终端中输入如下命令
# task用于指定任务,mode用于指定模型进行训练,data用于指定自定义的yaml文件,epochs用于指定训练次数,windows用户需设置workers=1,否则会报错
yolo task=detect mode=train model=yolov8n.pt data=yolo-yzm.yaml epochs=30 workers=1 batch=16
运行结果如下:
3.2、利用文件训练模型
在根目录下创建一个名为 begin.python 的文件,内容如下:
from ultralytics import YOLO
# 指定模型
mode = YOLO('yolov8n.pt')
# 让模型开始训练
mode.train(data='yolo-yzm.yaml',workers=0,epochs=80,batch=24)
# 验证模型
mode.val()
运行结果如下:(这里就将验证的步骤直接一笔带过,只需加一行语句即可,验证集的检测结果会更加准确)
3.3、拷贝默认yaml文件启动模型
概述:前面的两种方法实际都是传入参数覆盖默认的参数,我们可以通过命令将默认的 yaml 文件拷贝到根目录,然后对拷贝的 yaml 文件参数进行修改,最后通过命令启动模型即可。
# 在终端中执行如下命令即可
yolo copy-cfg
运行结果如下:
此时根目录中多了一个名为 default_copy.yaml 的文件:
打开 default_copy.yaml 文件,修改 Train 模块的参数,主要是model ,data 和 workers。
最后在终端中运行如下命令启动模型:
yolo cfg=default_copy.yaml
4、查看结果
我们运行完模型后,都会给我们返回结果,所有结果都在项目根目录下的 runs/detect 目录中,每一个 train 目录就是一次训练结果:
下面是某次训练完成后验证集的识别结果图片val_batch0_pred.jpg(第一位是识别到的字符,第二位是预估的正确率,最大值为1.0):
打开最后一次训练的结果后,目录结构如下:
知识点补充:从上面的目录结构中可以发现:weights目录中包含了两个 pt 文件,pt 文件就是模型,best.pt 就是效果最好的模型,last.pt 就是最后一次训练后产生的模型,如果要导出模型可以导出 best.pt 文文件,如果要继续训练就使用 last.pt 。
5、预测模型
概述:我准备了110~121号图片进行预测,放在datasets目录中的test文件夹中(test文件夹是自己手动创建的),文件结构如下:
然后在根目录下创建一个名为 pre_one_img.py 的文件,文件内容如下:
from ultralytics import YOLO
# 引入训练好的模型
model = YOLO('runs/detect/train8/weights/best.pt')
# 要预测的图片
public_path = 'datasets/yzm/test/'
image_paths = []
for i in range(110,122):
image_paths.append(f'{public_path}{i}.png')
# 对每张图片进行预测
for image_path in image_paths:
results = model(image_path,save=True)
运行结果如下:
根据结果可知,预测后的图片保存到了runs\detect\predict目录中,下面我挑出一张(整体的准确率较客观):
如果还想提高准确率,可以多准备数据集进行训练 。