使用YOLOv8进行目标检测的全流程指南

详细介绍YOLOv8在目标检测中的应用,包括环境搭建、数据准备及模型训练等。

原文标题:使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)

原文作者:阿里云开发者

冷月清谈:

本文涵盖了使用YOLOv8进行目标检测任务的完整流程,包括环境搭建、数据准备、模型训练、验证与测试以及模型转换等关键步骤。目标检测是一种借助深度学习识别图像或视频中对象并获取其位置的技术,广泛应用于安防、自动驾驶和智能零售等领域。YOLOv8是Ultralytics最新推出的目标检测模型,它具有更高的效率和准确性。文章详细介绍了YOLOv8的环境要求,并给出了用以安装、测试和训练模型的具体指令和步骤,适合希望深入了解计算机视觉的开发者。具体内容包括如何获取源码、搭建运行环境、准备数据集、训练模型以及如何将模型转换为ONNX和TensorRT格式,以便于在不同平台上的应用。

怜星夜思:

1、YOLOv8与前一版本(YOLOv5)的主要区别是什么?
2、目标检测在不同领域中的应用有哪些?
3、在训练YOLO模型时,如何选择合适的数据集?

原文内容

阿里妹导读


这篇文章详细介绍了如何使用YOLOv8进行目标检测任务,包括环境搭建、数据准备、模型训练、验证测试以及模型转换等完整流程。

作者|zzy的aly



一、目标检测介绍

目标检测(Object Detection)是计算机视觉领域的一项重要技术,旨在识别图像或视频中的特定目标并确定其位置。通过训练深度学习模型,如卷积神经网络(CNN),可以实现对各种目标的精确检测。常见的目标检测任务包括:人脸检测、行人检测、车辆检测等。目标检测在安防监控、自动驾驶、智能零售等领域具有广泛应用前景。

二、YOLOv8介绍

YOLOv8 是 Ultralytics 公司在 2023 年 1月 10 号开源的 YOLOv5 的下一个重大更新版本,目前支持图像分类、物体检测和实例分割任务,在还没有开源时就收到了用户的广泛关注。YOLOv8 抛弃了前几代模型的 Anchor-Base,提供了一个全新的 SOTA 模型,包括 P5 640 和 P6 1280 分辨率的目标检测网络和基于 YOLACT 的实例分割模型。和 YOLOv5 一样,基于缩放系数也提供了 N/S/M/L/X 尺度的不同大小模型,用于处理不同大小的输入图像 。

三、源码获取

https://github.com/ultralytics/ultralytics

四、环境搭建

CPU环境安装

conda create -n YOLOv8 python==3.8.1
pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple

GPU环境安装参考这个链接:

环境安装(一):Anaconda3+pytorch1.6.0+cuda10.0+cudnn7.6.4+tensorflow1.15+pycocotools+pydensecrf-阿里云开发者社区

# 安装CUDA、CUDNN、Python、Pytorch、Torchvision  这里每个版本要相互对应
pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple


4.1 环境检测

下载yolov8n.ptbus.jpg
https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n.pt

https://ultralytics.com/images/bus.jpg

命令行输入:

yolo predict model=yolov8n.pt source='ultralytics/data/images/bus.jpg'

就会看到这个图片:

五、数据集准备

这时候说明环境是没问题的了,我们可以准备数据集了,数据集的格式就是TXT标签加原图片,可参考YOLOv5这个博客:

https://developer.aliyun.com/article/1626089

六、 模型训练


6.1 方式一

YOLO(“yolov8n.pt”) 表示用预训练模型
YOLO(“yolov8n.yaml”)表示正常训练

from ultralytics import YOLO

Load a model

model = YOLO(“yolov8n.yaml”) # build a new model from scratch

model = YOLO(“yolov8n.pt”) # load a pretrained model (recommended for training)

Use the model

model.train(data=“ultralytics/cfg/mask.yaml”, epochs=3) # train the model
metrics = model.val() # evaluate model performance on the validation set
results = model(“ultralytics/data/images/bus.jpg”) # predict on an image
path = model.export(format=“onnx”) # export the model to ONNX format


6.2 方式二

yolo task=detect mode=train model=yolov8n.pt data=ultralytics/cfg/mask.yaml epochs=3 batch=16


6.3 针对其他任务

包括四种:detect 、segment、classify 、pose

通过修改YOLO()导入正确任务的yaml配置文件,以及通过data来指定需要载入的对应任务的数据集即可。

这里的数据集我都是按照TXT标签和原图来进行划分的,具体格式如下:

  • images
  • train
  • val

  • labels
  • train
  • val

from ultralytics import YOLO

Load a model

model = YOLO(“ultralytics/cfg/models/v8/yolov8-seg.yaml”) # build a new model from scratch

Use the model

model.train(data=“ultralytics/cfg/custom_seg.yaml”, epochs=3) # train the model
metrics = model.val() # evaluate model performance on the validation set
results = model(“ultralytics/data/images/bus.jpg”) # predict on an image
path = model.export(format=“onnx”) # export the model to ONNX format

针对实例分割任务也成功运行。

七、模型验证

yolo task=detect mode=val model=runs/detect/train/weights/best.pt  data=ultralytics/cfg/mask.yaml device=cpu

八、模型测试

yolo task=detect mode=predict model=runs/detect/train/weights/best.pt  source=ultralytics/data/images  device=cpu

yolo task=detect mode=predict model=runs/detect/train/weights/best.pt source=ultralytics/data/images device=cpu

九、模型转换


9.1 转onnx

9.1.1 方式一

根据YOLOv8官网所给代码来实现:

yolo export model=yolov8s.pt format=onnx opset=12

其次,可以通过ultralytics API导出onnx模型,并同时将bbox解码器和NMS等后处理添加到onnx模型中。
YOLOv8-TensorRT:

https://github.com/triple-Mu/YOLOv8-TensorRT

python export-det.py \
--weights yolov8s.pt \
--iou-thres 0.65 \
--conf-thres 0.25 \
--topk 100 \
--opset 11 \
--sim \
--input-shape 1 3 640 640 \
--device cuda:0


9.2 转tensorRT

9.2.1 trtexec

最简单的方式是使用TensorRT的bin文件夹下的trtexec.exe可执行文件。

trtexec.exe --onnx=best.onnx  --saveEngine=best.engine --fp16

9.2.2 代码转换

代码链接:YOLOv8-TensorRT

https://github.com/triple-Mu/YOLOv8-TensorRT

python3 build.py \
--weights yolov8s.onnx \
--iou-thres 0.65 \
--conf-thres 0.25 \
--topk 100 \
--fp16  \
--device cuda:0

9.2.3 推理代码
完整版代码查看链接:

https://developer.aliyun.com/article/1626090

另外,航空监测、医疗影像分析甚至文化遗产保护等领域也在不断探索目标检测的应用潜力。

如果没有现成的数据集,可以考虑生成合成数据集,但需要确保其与实际应用场景有较好的对应关系,这样在训练时才更有意义。

YOLOv8的优化使得实时检测更为流畅,尤其是在处理视频流时,这点在自动驾驶等应用场景中意义重大,YLOv5的用户或许会被此吸引。

选择合适的数据集时,需要考虑任务的性质以及所需的对象类型。数据集应包含多样的样本,确保涵盖足够的特征,以提高模型的泛化能力。

YOLOv8相较于YOLOv5,引入了全新的模型架构,去掉了传统的Anchor-Base,优化了检测速度与精度。具体来说,YOLOv8用缩放系数提供了多种模型尺寸,更好地适应不同场景的需求。

在技术细节上,YOLOv8还支持更高分辨率的目标检测,有效提升了大型物体的检测能力。这一更新为处理复杂场景提供了更强的支持。

同时,数据集的标注质量也至关重要。推荐使用高质量且准确标注的数据集,这能有效提升模型的训练效果和检测精度。

目标检测广泛应用于安防监控,可以实时识别可疑行为,帮助保护公共安全。此外,在自动驾驶领域,目标检测对行人和障碍物的识别至关重要。

智能零售则利用目标检测技术来分析消费者行为,优化产品摆放,提高销售效率。比如,通过识别顾客的年龄性别,实现个性化的广告推送。