1、说明
本文以记录分享、体验/体会如何使用Yolov8为主,实现搭建Yolov8环境以及CLI命令行执行训练、使用模型进行目标检测。
2、操作记录
2.1、开始安装yolov8
2.1.1、安装yolov8
官方链接:快速开始 - Ultralytics YOLOv8 文档,开始输入第一条指令,等待第一个报错吧hhh
sudo pip install ultralytics
2.1.2、执行结果
numpy1.21.5无法卸载
尝试手动卸载numpy1.21.5,发现根本就没有,Found existing installation是1.26.3,既然系统找不到旧的且能识别出新的numpy版本,那这个卸载报错先不管。
onnx没有安装
ERROR:pip's dependency resolver does not currently take into account all the packages that are installed.This behaviour is the source of the following dependency conflicts.onnx-graphsurgeon 0.3.12 requires onnx,which is not installed.
这个错误信息表示pip的依赖解析器没有考虑到所有已安装的包。这种行为导致了以下依赖冲突:onnx-graphsurgeon 0.3.12 需要 onnx,但未安装。
要解决这个问题,需要先安装 onnx 包,使用以下命令进行安装:
pip install onnx
2.1.3、再次安装yolov8
也就是再次执行sudo pip install ultralytics,不报错了。
下图同时显示了安装yolov8涉及到的其他包的版本,后面会用到。
2.1.4、查看yolov8版本
yolo version
有一个关于torchvision的警告,因为是警告此时我没有管它,后面还是要处理,如果你不希望踩坑可以看完后续再操作。
想起一个笑话,如果在悬崖边放置“Warning”的标识,程序员会跳下去。
2.2、关于yolov8的CLI命令行操作介绍
关于CLI操作的官方链接:Configuration - Ultralytics YOLOv8 Docs
2.2.1、语法
2.2.2、TASK任务
- Detect:目标检测
- Segment:分割
- Classify:分类
- Pose:姿态估计
2.2.2、MODE模式
- Train:使用自定义的数据集训练yolov8模型
- Val:训练后验证yolov8模型
- Predict:使用训练的模型预测新的图片or视频
- Export:导出yolov8模型用于部署
- Track:实时使用yolov8模型跟踪目标
- Benchmark:性能测试
2.2.3、ARGS参数
参数是以键值对的形式写在CLI的,表格很长只截取一些,想要深入了解请进入官网。
2.3、初次尝试yolov8训练
2.3.1、执行训练
yolo train data=coco128.yaml model=yolov8n.pt epochs=10 lr0=0.01
默认Task任务是目标检测,Mode模式是train训练,data和model指的是配置文件和模型,epochs代表训练的次数,lr0为初始学习率用来控制模型更新的幅度。
2.3.2、输出信息梳理及报错处理
- 提示torchvision有个警告
- 下载yolov8n.pt这个文件,根据网络需要等很久。
- engine/trainer,然后发现数据集coco128.yaml没有图片,于是开始下载coco128.zip并解压。
一个关于模型的表格,下方汇总的summary信息是“Model summary:255 layers,3157200 parameters,3157184 gradients, 8.9 GFLOPs” ,以下解释来自AI:
- 255 layers: 表示模型中包含的层数,即神经网络的深度。一个层可以是一个全连接层、卷积层、池化层等。
- 3157200 parameters: 表示模型中的参数数量。参数是模型需要学习的权重和偏置值,用于对输入数据进行预测或分类。
- 3157184 gradients: 表示模型中梯度的数量。梯度是在反向传播过程中计算的,用于更新参数以最小化损失函数。
- 8.9 GFLOPs: 表示模型的计算复杂度,即每秒可以进行的浮点运算次数(Giga Floating Point Operations Per Second),较高的GFLOPs值通常意味着模型更复杂,但也可能需要更多的计算资源来进行训练和推理。
出现警告,"UserWarning: A NumPy version >=1.17.3 and <1.25.0 is required for this version of SciPy (detected version 1.26.3)",表示当前使用的SciPy版本需要NumPy版本在1.17.3到1.25.0之间,但是现在是1.26.3。如果NumPy版本不在这个范围内,可能会导致程序运行出现问题。
根据2.1.3小节,yolov8需要的numpy>=1.22.2,所以进一步来说需要1.22.2~1.25.0之间的numpy版本。但是scipy和numpy的版本不兼容并不意味着一定要从scipy的角度降级numpy,也可以升级scipy试试。
pip install --upgrade scipy
非常棒,把scipy从1.8.0升级到1.11.4,同时也满足了1.11.4对于numpy版本在1.21.6~1.28.0的要求,如下图。(这个操作是执行完训练之后,另开一个terminal处理的)
接下来是训练过程中的报错:
报错RuntimeError: Couldn't load custom C++ ops. This can happen if your PyTorch and torchvision versions are incompatible, or if you had errors while compiling torchvision from source. For further information on the compatible versions, check https://github.com/pytorch/vision#installation for the compatibility matrix. Please check your PyTorch version with torch.__version__ and your torchvision version with torchvision.__version__ and verify if they are compatible, and if not please reinstall torchvision so that it matches your PyTorch install.
这个错误信息表示在运行YOLO模型时,无法加载自定义的C++操作。这可能是因为PyTorch和torchvision的版本不兼容,或者在从源代码编译torchvision时出现了错误。为了解决这个问题,请访问GitHub - pytorch/vision: Datasets, Transforms and Models specific to Computer Vision检查您的PyTorch版本和torchvision版本是否兼容。如果不兼容,请重新安装torchvision以使其与您的PyTorch安装相匹配。
第一个原因:PyTorch和torchvision的版本不兼容。
访问报错提供的网址得到如下表格,根据2.1.3得到torch是2.1.2,torchvision是0.16.2,python是3.10,满足版本要求。
第二个原因:从源代码编译torchvision时出现了错误。
很可能是第二个原因,而且上面我就见到过关于torchvision的报错,只是当时它还是个警告...
以为是没有libjpeg或libpng,但是提示已安装并且是最新版。
那可能是安装torchvision的过程中出错了,需要reinstall torchvision,懒得卸载、安装两步,尝试了下upgrade,如果有最新版本就一个指令完成卸载、安装,已安装最新版本再说。
于是执行:
pip install --upgrade torchvision
下图展示了yolo version警告——执行安装新版本torchvision——解决yolo version警告后正常的全过程。有一个比较奇怪的问题是显示当前torchvision版本为0.15.1更新为0.16.2,但是从2.1.3来看torchvision版本本来就是为0.16.2,不知道为什么是这样。
至此,解决了初次执行yolov8训练指令过程中的所有报错。
2.4、再次执行yolov8训练-成功
训练10次的过程,一共是0.376小时≈22分钟。
训练的结果汇总,从列表看到自带了很多常见的目标,比如person、bicycle、car、airplane、bus等等,"Results saved to runs/detect/train2",就是说训练的结果保存在这个路径。
2.5、预测/推理
2.5.1、使用自带的模型yolov8n.pt预测
打算测试识别airplane和car,首先要找一些图片保存到/home/lgzn/Pictures/test_car_plane这个文件夹,然后执行:
yolo predict model=yolov8n.pt source='/home/lgzn/Pictures/test_car_plane'
根据输出可以得到:
- 识别到这10张图片里的airplane、car、bus、traffic light;
- 有每张图片的识别时间,大约要300ms,耗时非常久;
- 识别的结果保存在runs/detect/predict2;
打开runs/detect/predict2,查看识别的效果如下:
2.5.2、使用训练的模型预测
在上面2.4小节训练完成后的路径下找到.pt后缀的训练后模型。
可以选择best.pt或last.pt任意一个,放到上面的yolov8n.pt路径下,然后执行2.5.1的yolo预测指令,尝试了best.pt,执行:
yolo predict model=best.pt source='/home/lgzn/Pictures/test_car_plane'
得到的效果和上面是类似的,就不重复贴图了,有关进一步的测试在这个链接:YOLOv8_测试yolov8n.pt,yolov8m.pt训练的时间和效果、推理一张图片所需时间_解决训练时进程被终止killed-优快云博客