目录
初次接触 yolov8 来训练自己的模型参数,本文参考解读yolo官方文档,记录从安装环境到训练使用 yolov8 的全过程。本文仅供参考,感谢批评指正!以官方文档内容为准。
官方文档地址:ultralytics官方文档地址
一、Yolov8源码下载
1.可以直接访问 GitHub 地址下载源码压缩文件,解压到本地项目地址。
2.也可以按官方文档给出的 Git 指令下载。
# Clone the ultralytics repository git clone https://github.com/ultralytics/ultralytics
二、虚拟环境创建与必要包的安装
1.虚拟环境
创建yolov8虚拟环境,根据官方文档python版本要在3.8以上。
# Prompt创建虚拟环境 conda create -n yolov8 python=3.9 # 激活环境 conda activate yolov8
2.Pytorch安装
Pytorch GPU训练环境安装,官方文档说明Pytorch版本在1.8以上,但最好安装 torch 版本 > 2.0.0 以上的(实验时安装 torch == 1.12.1,在模型训练时 torch 包报错,更新到torch==2.1.1,不再报错,最好安装和博文一致的环境,同时参考CUDA版本,本文服务器cuda==11.8)
Pytorch历史版本安装命令地址:Pytorch历史版本安装命令
# pip安装pytorch环境 pip install torch==2.1.1 torchvision==0.16.1 torchaudio==2.1.1 --index-url https://download.pytorch.org/whl/cu118
安装 pytorch 过程中遇到一个红字报错,一些依赖库没有安装,本人选择粗糙的pip安装所有解决。
pip install packaging pyparsing python-dateutil easydict prettytable pyyaml scikit-learn scipy tqdm ujson visualdl pytz tzdata python-dotenv python-magic six shapely terminaltables protobuf tensorboard-data-server
在个人电脑上安装出现网络错误,先下载 whl 包然后离线安装。
whl包下载地址:pytorch whl包下载地址
要选择有 cu 的GPU版本下载,选择对应的python版本和系统,要下三个安装包分别是 torch 、torchaudio、torchvision,其版本的对应关系直接去官网查看即可。具体安装流程可参考之前博文:pytorch离线安装
去官网查看的安装包版本如下(版本一定要一一对应,不然会报错)。下载对应安装即可。
下好的文件放在虚拟环境下,然后pip安装
# whl包离线安装 pip install torch-2.1.1+cu118-cp39-cp39-win_amd64.whl torchaudio-2.1.1+cu118-cp39-cp39-win_amd64.whl torchvision-0.16.1+cu118-cp39-cp39-win_amd64.whl
个人电脑上环境也配置成功。
3.Ultralytics安装
根据官方文档还要安装一个Yolov8的包
# yolov8安装包 pip install ultralytics
3.环境测试
按照官方文档进行到这一步,就算环境搭建完成了,可以使用一个简单的命令行指令测试安装成功与否。
# 环境安装测试指令 yolo predict model=yolov8n.pt source='https://ultralytics.com/images/bus.jpg'
可以在下载的源码目录下进入命令行运行代码,也可以在集成的Pycharm环境的Terminal中运行,个人更建议偏好后者。
命令行cmd进入并运行
如果包安装正常,将会在项目路径新建一个 runs/detect/predict 的目录,其中有预测结果图片。如果出现红字报错,或者显示“yolo不是一个内部或外部指令”,根据本机实践成果经验——建议重装更高版本 pytorch ,并更新 ultralytics 的版本。
# 更新ultralytics版本 pip install --upgrade ultralytics
Pycharm集成环境下Terminal运行。
三、简单命令行指令(CLI)使用
yolov8官方文档中介绍了其模型的命令行指令使用方式(command line interface:CLI),参考文档地址:CLI guide
官方文档中详细记录了所有的指令操作,本篇只记录部分常用的简单指令并实测其效果,后续将根据其官方文档的内容详细测试不同指令组合的效果。
进入源码下载地址,激活环境后使用命令行可以获取yolov8使用的参考命令代码。其中的示例给出yolo基本的训练、预测、验证使用方法。
# 获取命令行代码参考 yolo help
1.模型配置(关键指令)——cfg
默认的配置文件可以在下载的源码地址的下方路径中看到。其中主要需要根据实际情况修改的部分用绿色框框出。
# 默认模型配置 /ultralytics-main/ultralytics/cfg/default.yaml
也可以通过命令行的方式获取当前模型配置信息。
# 获取当前配置信息 yolo cfg
实际上,真正使用的时候,这个配置文件只是用来做参考的,可以在命令行的输入上直接修改你需要改变的模型配置。下面举例说明。
(1)选择任务场景——task
第一,需要选择的是你要使用的模型“任务场景”。根据官方文档,yolov8可以实现五种场景的使用,分别是——'detect', 'pose', 'segment', 'obb', 'classify',你可以在官方链接查询详细解释和例子—— yolo任务场景
因此如果你想改变使用的场景,只需改变指令的第一个参数即可,对比以下两个例子。
# detect 任务 yolo detect train data=coco8.yaml model=yolov8n.yaml epochs=100 imgsz=640 # segmen 任务 yolo segment train data=coco8-seg.yaml model=yolov8n-seg.yaml epochs=100 imgsz=640
(2)选择训练模式——mode
第二,选择使用的模式,yolo官方支持六种模式选择,这里只选取常用的三种,即模型的训练train、验证val和预测predict,详细其他模式见官方文档——yolo的训练模式
本文以识别任务为主要参考例,可以对比以下三种命令行,知道只需改变第二个参数即可。
# train训练模式 yolo detect train data=coco8.yaml model=yolov8n.yaml epochs=100 imgsz=640 # val验证模式 yolo detect val data=coco8.yaml model=yolov8n.yaml imgsz=640 # predict预测模式 yolo detect predict data=coco8.yaml model=yolov8n.yaml imgsz=640
(3)数据配置——data
第三,选择要使用的数据,如果是训练数据那么要按照coco格式保存图片数据和标签数据,具体可参考之前的博文:目标检测模型数据预处理:从json到txt、voc和coco数据格式,对于官方给出的例子来说,其数据data的配置文件 coco8.yaml 在源码目录下可见。
# coco8.yaml 数据配置文件目录 /ultralytics-main/ultralytics/cfg/datasets/coco8.yaml
如果是自建数据集也可以仿造coco数据的yaml配置文件,只需简单的将下图的 path 修改为你自己的数据保存路径,然后将 names 下的类别名称改为你自己的即可。
在coco8.yaml的末尾可以看到 download 参数,表示当前数据集是在线下载的,如果要使用网上的数据集,如从GitHub上下载的数据,也可在此处修改地址。
我们可以按照官方文档内配置文档的地址将数据集下载下来看看。coco8数据集
这是一个非常小的数据集,我们可以看一下数据结构。images中保存的是图片数据,labels中保存框的txt格式数据。
如果使用的不是coco的数据格式,同样可以参见源码地址 /ultralytics-main/ultralytics/cfg/datasets 下的数据集配置文件,yolov8支持多种输入格式。
(4)模型配置——model
第四,选择要使用的模型,yolov8根据模型的参数量大小,从小到大分为 n、s、m、l、x 五种模型。模型的配置文件主要是设置各个层数的大小超参数,模型model的配置文件 yolov8.yaml 在源码目录下可见。
# model模型配置文件目录 /ultralytics-main/ultralytics/cfg/models/v8/yolov8.yaml
根据其源码注释,可知,可以通过调整yolo命令行指令输入来选择不同大小的模型,只需在yolov8.yaml 后缀前添加所需模型的简称即可。下面的例子解释了这一问题,也就是说下面指令使用的都是同一个配置文件,即/ultralytics-main/ultralytics/cfg/models/v8/yolov8.yaml。
# 使用 yolov8n 的模型训练 yolo detect train data=coco8.yaml model=yolov8n.yaml epochs=100 imgsz=640 # 使用 yolov8m 的模型训练 yolo detect train data=coco8.yaml model=yolov8m.yaml epochs=100 imgsz=640
如果是自建数据集,那么需要将 nc 后面的数量修改为你实际数据对应的类别数量。
2.模型指令实测
有了上述的指令基础,可以开始基本的使用了,受限与本机GPU性能限制,暂使用官方给的测试小数据集和最小的模型 n 来做试验,后续博文进阶命令测试将会在服务器上进行。
因为 pycharm上可视化更加美观,下述实验都在该平台上进行,在命令行窗口命令代码一致,且模型输出一致,因此不再赘述。
(1)train训练实测——官方coco8数据集
为方便演示自建数据集如何进行模型训练,放弃官方在配置文件中自动下载的方式读取数据,改为在程序外下载好文件放到项目主目录下,并自写配置文件的方式,在model加载中也使用当前项目路劲加自写yaml文件的方式。
由于使用的是官方数据测试,配置大部分没变,实际自建时,要对绿色区域进行修改。
使用命令行训练时,需改为自建配置文件的完整地址。
# 训练实测指令 yolo detect train data=./dataset/coco8/test_coco8.yaml model=./dataset/coco8/test_yolov8n.yaml epochs=100 imgsz=640
训练完成后会在主目录下新建一个 runs 的文件夹保存模型参数以及训练过程的可视化和各种评估训练的结果文件(也可以在配置中修改结果保存路径)。显而易见官方给的训练图片实在是太少了(只有四张),训练效果很差。
由于没有找到适合的小数据集训练,训练篇到此结束,在预测部分选择直接下载官方预训练好的模型参数测试。
(2)predict预测实测——官方预训练模型参数
官方训练模型参数下载地址:yolov8模型参数下载地址
测试的预测数据选择在coco训练数据中随机挑选几张图片(这样的做法会导致结果虚假的效果好,因为是从训练样本中选择数据,本文重点在实验过程,故忽略此处的不严谨)
在terminal输入预测指令,model导航到存放预训练模型参数地址, source导航到预测图片地址。运行完成后,会在项目主目录自建一个runs文件,结果保存在runs/detect/predict目录下。
# 预测实测指令 yolo predict model=pretrain/yolov8n.pt source=predict/