YOLOV8环境配置速通

edge_sky Lv2

前置安装软件

  • python8+
  • Anaconda(mini版也可以)(记得加入环境变量)

创建想虚拟环境

前置条件 anaconda 环境良好

win + s,或在快捷方式里找到 Anaconda Prompt (Anaconda)

创建一个名为 yolov8(自行取名) 的环境

1
conda create -n yolov8 python=3.8

查看环境列表

1
conda env list

{01}

切换到新创建的环境

1
activate yolov8

{02}

安装cuda + cudnn(使用N卡下)

更换清华镜像源(如需要)

1
2
3
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/win-64
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/win-64
conda config --set show_channel_urls yes

查看 cuda 的支持版本

1
nvidia-smi

进入 CUDA Toolkit - Free Tools and Training | NVIDIA Developer 安装相应版本的cuda工具

进入 CUDA Deep Neural Network (cuDNN) | NVIDIA Developer 安装相应 cuda 的 cudann

安装 pytorch

Start Locally | PyTorch

根据你的环境安装

{03}

使用conda的包,选好版本后复制进 yolov8 环境下的命令窗口运行

安装ultralytics

  1. 使用CLI
1
pip install ultralytics
  1. 直接 clone 源码解压

进入源码目录,输入

1
pip install -e

安装

下载训练模型

Releases · ultralytics/assets (github.com)

选择合适的训练模型下载

标记图片

安装 labelimg

pip 安装

依次执行

1
2
3
4
pip install PyQt5
pip install pyqt5-tools
pip install lxml
pip install labelimg

conda 安装

conda 会自动安装相关的依赖包

1
conda install labelimg

使用 labelimg 对图片标注

  • 在 yolov8 环境下执行命令行
1
labelimg
  • 建议勾选自动保存

{04}

  • 点击标记格式更改为 YOLO,从上至下分别是:打开单个图片,打开一个文件夹,更改保存文件夹,下一张图片,上一张图片,确认图片,保存

{05}

  • 导入图片后,右键选择 Create Rectbox 或 “W” 快捷键进入标记模式,框选主体,在弹出的框中输入主题的名字,例如下图输入 panda,点击回车或 OK 后完成这一主体的标记。
  • 单个图片可以标记多个主体,完成标记后如果选择自动保存可以直接进入下一张继续标记,否则记得点击保存~

{06}

  • 完成标记后得到一批 图片名.txt 的文件以及 class.txt 文件,训练主要需要 图片名.txt 文件,class.txt 记录有多少的分类以及分类名

训练

数据集文件树

构建以下结构的文件夹目录,用于存放数据

将被标记的图片放在 dataset/images/train 中,与被标记具有相同主体的未标记图片放在 dataset/images/val 中用于验证

将标记生成的 图片名.txt 放入 dataset/labels/train 中,务必和标记的图片一一对应

1
2
3
4
5
6
7
8
9
dataset
--images
--train(存放训练的图片)
--val(用于验证的图片)
--test(optional)
--labels
--train(与训练图片相对应得标签文件)
--val
--test(optional)

model中 .pt 和 .yaml 的区别

  • .pt 是指从预训练模型的基础上进行训练。若我们选择 yolov8n.pt这种.pt类型的文件,其实里面是包含了模型的结构和训练好的参数的,也就是说拿来就可以用,就已经具备了检测目标的能力了,yolov8n.pt能检测coco中的80个类别。假设你要检测不同种类的狗,那么yolov8n.pt原本可以检测狗的能力对你训练应该是有帮助的,你只需要在此基础上提升其对不同狗的鉴别能力即可。但如果你需要检测的类别不在其中,例如口罩检测,那么就帮助不大。
  • .yaml是从零开始训练

data

指定数据集文件的位置,数据集包含训练和验证的图像、标签

.yaml的配置样例如下

1
2
3
4
5
6
7
8
9
10
11
12
path: ../datasets/coco128  # dataset root dir 数据集得根目录
train: images/train2017 # train images (relative to 'path') 128 images 训练图片的文件夹
val: images/train2017 # val images (relative to 'path') 128 images 训练图标的标签的文件夹
test: # test images (optional)

# Classes
nc: 2 # number of classes
names:
0: class1
1: class2
# class names

脚本

编写一个 .py 文件用于训练

1
2
3
4
5
6
7
8
9
from ultralytics import YOLO

# 加载模型
model = YOLO('yolov8n.yaml') # 从yaml文件加载
model = YOLO('yolov8n.pt') # 加载预训练模型
model = YOLO('yolov8n.yaml').load('yolov8n.pt') # 从 YAML加载 然后再加载权重

# 指定训练参数开始训练
model.train(data='coco128.yaml', epochs=100, imgsz=640)

命令行

直接在 yolov8 环境下的命令行执行

1
2
3
4
5
6
7
8
# 从YAML构建新模型,从头开始训练
yolo detect train data=coco128.yaml model=yolov8n.yaml epochs=100 imgsz=640

# 从预训练*.pt模型开始训练
yolo detect train data=coco128.yaml model=yolov8n.pt epochs=100 imgsz=640

# 从YAML构建一个新模型,转移预训练权重,然后开始训练
yolo detect train data=coco128.yaml model=yolov8n.yaml pretrained=yolov8n.pt epochs=100 imgsz=640

结果

(忽略我拿 CPU 跑的1个半小时)

07

结果的模型保存在 runs/detect 内,包含最后一次的模型和效果最好的模型,至此训练完成

参数说明

训练命令的参数如下所示,可根据自身需求更改

参数名默认值/设置描述
modelNone模型文件路径,例如 yolov8n.pt, yolov8n.yaml
dataNone数据文件路径,例如 coco128.yaml
epochs100训练的轮次数量
patience50早停训练的等待轮次
batch16每批图像数量
imgsz640输入图像的大小,以整数表示
saveTrue保存训练检查点和预测结果
save_period-1每x轮次保存检查点
cacheFalse使用缓存加载数据
deviceNone运行设备,例如 cuda device=0 或 device=0,1,2,3 或 device=cpu
workers8数据加载的工作线程数
pretrainedTrue(bool 或 str)是否使用预训练模型(bool)或从中加载权重的模型(str)
optimizer‘auto’使用的优化器,选择范围=[SGD, Adam, Adamax, AdamW, NAdam, RAdam, RMSProp, auto]
verboseFalse是否打印详细输出
seed0随机种子,用于可重复性
deterministicTrue是否启用确定性模式
single_clsFalse将多类数据作为单类训练
rectFalse矩形训练,每批为最小填充整合
cos_lrFalse使用余弦学习率调度器
close_mosaic10(int) 最后轮次禁用马赛克增强(0为禁用)
resumeFalse从最后检查点恢复训练
ampTrue自动混合精度(AMP)训练,选择范围=[True, False]
fraction1.0训练的数据集比例(默认为1.0,即训练集中的所有图像)
profileFalse在训练期间为记录器分析ONNX和TensorRT速度
freezeNone(int 或 list, 可选) 在训练期间冻结前n层,或冻结层索引列表
lr00.01初始学习率(例如 SGD=1E-2, Adam=1E-3)
lrf0.01最终学习率 (lr0 * lrf)
momentum0.937SGD动量/Adam beta1
weight_decay0.0005优化器权重衰减5e-4
warmup_epochs3.0热身轮次(小数ok)
warmup_momentum0.8热身初始动量
warmup_bias_lr0.1热身初始偏差lr
box7.5框损失增益
cls0.5cls损失增益(根据像素缩放)
dfl1.5dfl损失增益
pose12.0姿态损失增益(仅限姿态)
kobj2.0关键点obj损失增益(仅限姿态)
label_smoothing0.0标签平滑(小数)
nbs64标称批大小
overlap_maskTrue训练期间掩码应重叠(仅限分割训练)
mask_ratio4掩码降采样比率(仅限分割训练)
dropout0.0使用dropout正则化(仅限分类训练)
valTrue训练期间验证/测试
  • 标题: YOLOV8环境配置速通
  • 作者: edge_sky
  • 创建于 : 2024-03-26 22:01:10
  • 更新于 : 2024-07-01 22:50:06
  • 链接: https://edgesky.cn/2024/03/26/YOLOV8环境配置速通/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。