一文带你快速入门『YOLOv8』

news2024/11/30 10:33:13

前言

本文是 YOLOv8 入门指南(大佬请绕过),将会详细讲解安装,配置,训练,验证,预测等过程

YOLOv8 官网:ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite (github.com)

image-20230907184341725

注意:如果遇到权重文件,模型文件下载缓慢的问题,可以在自己本机上下载,再上传到服务器。也可以选择代理或是 IDM 这样的下载软件

安装配置

虚拟环境

本文使用 conda 创建虚拟环境,没有配置 conda 也可以使用 python venv 虚拟环境

# 创建环境
conda create -n pytorch python=3.8 -y
# 查看环境
conda env list
# 激活环境
conda activate pytorch

安装依赖

请自行到 Pytorch 官网寻找安装命令(需要保证 PyTorch>=1.8)

image-20230907184516744

# 请自行替换命令
pip3 install torch torchvision --index-url https://download.pytorch.org/whl/cpu

拉取仓库

git clone https://github.com/ultralytics/ultralytics.git
cd ultralytics
# 安装依赖
pip install -e .

如果只是想要快速尝试训练自定义数据集并预测结果,可以跳过后面章节教学,直接跳到最后章节的实战演练

两种使用方式

YOLO 命令行

YOLO命令行界面(command line interface, CLI), 方便在各种任务和版本上训练、验证或推断模型。CLI不需要定制或代码,可以使用 yolo 命令从终端运行所有任务。

【YOLO CLI 官方文档】:CLI - Ultralytics YOLOv8 Docs

语法(Usage)

yolo TASK MODE ARGS

Where   TASK (optional) is one of [detect, segment, classify]
        MODE (required) is one of [train, val, predict, export, track]
        ARGS (optional) are any number of custom 'arg=value' pairs like 'imgsz=320' that override defaults.

查看所有参数:yolo cfg

训练(Train)

在COCO128上以图像大小 640 训练 YOLOv8n 100 个 epoch

yolo detect train data=coco128.yaml model=yolov8n.pt epochs=100 imgsz=640

恢复中断的训练

yolo detect train resume model=last.pt

验证(Val)

在COCO128数据集上验证经过训练的 YOLOv8n 模型准确性。无需传递参数,因为它 model 保留了它的训练 data 和参数作为模型属性。

yolo detect val model=path/to/best.pt

预测(Predict)

使用经过训练的 YOLOv8n 模型对图像运行预测。

yolo detect predict model=path/to/best.pt source='https://ultralytics.com/images/bus.jpg'

导出(Export)

将 YOLOv8n 模型导出为不同的格式,如 ONNX、CoreML 等。

yolo export model=path/to/best.pt format=onnx

可用导出形式如下

Format 格式format Argumentformat 论点Model 型Metadata 元数据Arguments 参数
PyTorch-yolov8n.pt--
TorchScripttorchscriptyolov8n.torchscriptimgsz, optimize-
ONNXonnxyolov8n.onnximgsz, half, dynamic, simplify, opset-
OpenVINOopenvinoyolov8n_openvino_model/imgsz, half-
TensorRTengineyolov8n.engineimgsz, half, dynamic, simplify, workspace-
CoreMLcoremlyolov8n.mlpackageimgsz, half, int8, nms-
TF SavedModelsaved_modelyolov8n_saved_model/imgsz, keras-
TF GraphDefpbyolov8n.pbimgsz-
TF Litetfliteyolov8n.tfliteimgsz, half, int8-
TF Edge TPUedgetpuyolov8n_edgetpu.tfliteimgsz-
TF.jstfjsyolov8n_web_model/imgsz-
PaddlePaddlepaddleyolov8n_paddle_model/imgsz-
ncnnncnnyolov8n_ncnn_model/imgsz, half-

覆盖默认配置文件

首先使用命令 yolo copy-cfg 在当前工作目录中创建一个 default.yaml 的副本 default_copy.yaml,之后即可指定配置文件来覆盖默认配置文件

yolo cfg=default_copy.yaml imgsz=320

Python 脚本

YOLOv8 可以无缝集成到 Python 项目中,以进行对象检测、分割和分类。同时易于使用的 Python 界面是一个宝贵的资源,能够快速实现高级对象检测功能

【YOLO Python 官方文档】:CLI - Ultralytics YOLOv8 Docs — CLI - Ultralytics YOLOv8 文档

示例

from ultralytics import YOLO

# 从头开始创建一个新的YOLO模型
model = YOLO('yolov8n.yaml')

# 加载预训练的YOLO模型(推荐用于训练)
model = YOLO('yolov8n.pt')

# 使用'coco128.yaml'数据集对模型进行训练,训练3个epoch
results = model.train(data='coco128.yaml', epochs=3)

# 在验证集上评估模型的性能
results = model.val()

# 使用模型对图像进行目标检测
results = model('https://ultralytics.com/images/bus.jpg')

# 将模型导出为ONNX格式
success = model.export(format='onnx')

image-20230908110241109

image-20230908112306725

训练

训练模式用于在自定义数据集上训练 YOLOv8 模型。在此模式下,使用指定的数据集和超参数训练模型。训练过程涉及优化模型的参数,以便它可以准确地预测图像中对象的类别和位置。

预训练(From pretrained 推荐使用)

from ultralytics import YOLO

model = YOLO('yolov8n.pt') # pass any model type
results = model.train(epochs=5)

初始训练(From scratch)

from ultralytics import YOLO

model = YOLO('yolov8n.yaml')
results = model.train(data='coco128.yaml', epochs=5)

恢复训练(Resume)

model = YOLO("last.pt")
results = model.train(resume=True)

验证

Val 模式用于在训练 YOLOv8 模型后对其进行验证。在此模式下,在验证集上评估模型,以衡量其准确性和泛化性能。此模式可用于调整模型的超参数以提高其性能。

训练后验证

from ultralytics import YOLO

# 导入YOLO模型
model = YOLO('yolov8n.yaml')

# 使用'coco128.yaml'数据集对模型进行训练,训练5个epoch
model.train(data='coco128.yaml', epochs=5)

# 对训练数据进行自动评估
model.val()  # 它会自动评估您训练的数据。

单独验证

from ultralytics import YOLO

# 导入YOLO模型
model = YOLO("model.pt")
# 如果您没有设置data参数,它将使用model.pt中的数据YAML文件。
model.val()
# 或者您可以设置要验证的数据
model.val(data='coco128.yaml')

预测

预测模式用于使用经过训练的 YOLOv8 模型对新图像或视频进行预测。在此模式下,模型从检查点文件加载,用户可以提供图像或视频来执行推理。该模型预测输入图像或视频中对象的类别和位置。

from ultralytics import YOLO
from PIL import Image
import cv2

model = YOLO("model.pt")
# 接受各种格式 - 图像/目录/路径/URL/视频/PIL/ndarray。0表示网络摄像头
results = model.predict(source="0")
results = model.predict(source="folder", show=True) # 显示预测结果。接受所有YOLO预测参数

# 使用PIL库
im1 = Image.open("bus.jpg")
results = model.predict(source=im1, save=True)  # 保存绘制的图像

# 使用ndarray
im2 = cv2.imread("bus.jpg")
results = model.predict(source=im2, save=True, save_txt=True)  # 将预测结果保存为标签

# 使用PIL/ndarray列表
results = model.predict(source=[im1, im2])

导出

导出模式用于将 YOLOv8 模型导出为可用于部署的格式。在此模式下,模型将转换为可供其他软件应用程序或硬件设备使用的格式。将模型部署到生产环境时,此模式非常有用。

from ultralytics import YOLO

model = YOLO('yolov8n.pt')
model.export(format='onnx', dynamic=True)

跟踪

跟踪模式用于使用 YOLOv8 模型实时跟踪对象。在此模式下,模型从检查点文件加载,用户可以提供实时视频流来执行实时对象跟踪。此模式对于监控系统或自动驾驶汽车等应用非常有用。

from ultralytics import YOLO

# 加载模型
model = YOLO('yolov8n.pt')  # 加载官方的检测模型
model = YOLO('yolov8n-seg.pt')  # 加载官方的分割模型
model = YOLO('path/to/best.pt')  # 加载自定义模型

# 使用模型进行目标跟踪
results = model.track(source="https://youtu.be/Zgi9g1ksQHc", show=True)
results = model.track(source="https://youtu.be/Zgi9g1ksQHc", show=True, tracker="bytetrack.yaml")

训练器

YOLO模型类是Trainer类的高级包装器。每个YOLO任务都有自己的从BaseTrainer继承来的训练器。

from ultralytics.yolo import v8 import DetectionTrainer, DetectionValidator, DetectionPredictor

# trainer
trainer = DetectionTrainer(overrides={})
trainer.train()
trained_model = trainer.best

# Validator
val = DetectionValidator(args=...)
val(model=trained_model)

# predictor
pred = DetectionPredictor(overrides={})
pred(source=SOURCE, model=trained_model)

# resume from last weight
overrides["resume"] = trainer.last
trainer = detect.DetectionTrainer(overrides=overrides)

多任务支持

下面示例主要使用 Python 脚本的形式,CLI 形式可以自行到官网找到对应示例代码

官方文档:Train - Ultralytics YOLOv8 Docs

目标检测

物体检测是一项涉及识别图像或视频流中物体的位置和类别的任务。

对象检测器的输出是一组包围图像中的对象的包围框,以及每个框的类标签和置信度分数。当你需要识别场景中感兴趣的物体,但不需要知道物体的确切位置或它的确切形状时,物体检测是一个很好的选择。

训练

在图像大小为 640 的 COCO128 数据集上训练 YOLOv8n 100 个 epoch。

设备是自动确定的。如果 GPU 可用,则将使用它,否则将在 CPU 上开始训练。

from ultralytics import YOLO

# 加载一个模型
model = YOLO('yolov8n.yaml')  # 从YAML文件构建一个新模型
model = YOLO('yolov8n.pt')  # 加载一个预训练模型(推荐用于训练)
model = YOLO('yolov8n.yaml').load('yolov8n.pt')  # 从YAML文件构建模型并加载权重

# 训练模型
results = model.train(data='coco128.yaml', epochs=100, imgsz=640)

可以使用 device 参数指定训练设备。如果未传递任何参数,则将使用 GPU device=0 (如果可用),否则 device=cpu 将使用。

from ultralytics import YOLO

# 加载一个模型
model = YOLO('yolov8n.pt')  # 加载一个预训练模型(推荐用于训练)

# 使用2个GPU训练模型
results = model.train(data='coco128.yaml', epochs=100, imgsz=640, device=[0, 1])

验证

Val 模式用于在训练 YOLOv8 模型后对其进行验证。在此模式下,在验证集上评估模型,以衡量其准确性和泛化性能。此模式可用于调整模型的超参数以提高其性能。

YOLOv8 模型会自动记住其训练设置,因此您只需 yolo val model=yolov8n.pt 使用 or model('yolov8n.pt').val() 即可在原始数据集上轻松验证相同图像大小和原始数据集上的模型

在COCO128数据集上验证经过训练的 YOLOv8n 模型准确性。无需传递参数,因为它 model 保留了它的训练 data 和参数作为模型属性

from ultralytics import YOLO

# 导入模型
model = YOLO('yolov8n.pt')  # 加载一个官方模型
model = YOLO('path/to/best.pt')  # 加载一个自定义模型

# 验证模型
metrics = model.val()  # 不需要参数,数据集和设置会被记住
metrics.box.map    # mAP50-95
metrics.box.map50  # mAP50
metrics.box.map75  # mAP75
metrics.box.maps   # 包含每个类别的mAP50-95的列表

预测

YOLOv8 预测模式可以为各种任务生成预测,在使用流式处理模式时返回对象列表或内存高效的 Results Results 对象生成器。通过传入 stream=True 预测器的调用方法来启用流式处理模式。

YOLOv8 可以处理不同类型的输入源进行推理,如下表所示。源包括静态图像、视频流和各种数据格式。该表还指示每个源是否可以在流模式下与参数 stream=True ✅一起使用。流式传输模式有利于处理视频或实时流,因为它会创建结果生成器,而不是将所有帧加载到内存中

from ultralytics import YOLO

# 导入模型
model = YOLO('yolov8n.pt')  # 加载一个预训练的YOLOv8n模型

# 对图像列表进行批量推理
results = model(['im1.jpg', 'im2.jpg'])  # 返回一个Results对象列表

# 处理结果列表
for result in results:
    boxes = result.boxes  # 用于边界框输出的Boxes对象
    masks = result.masks  # 用于分割掩模输出的Masks对象
    keypoints = result.keypoints  # 用于姿势输出的Keypoints对象
    probs = result.probs  # 用于分类输出的Probs对象

导出

导出模式用于将 YOLOv8 模型导出为可用于部署的格式。在此模式下,模型将转换为可供其他软件应用程序或硬件设备使用的格式。将模型部署到生产环境时,此模式非常有用。

from ultralytics import YOLO

# 导入模型
model = YOLO('yolov8n.pt')  # 加载一个官方模型
model = YOLO('path/to/best.pt')  # 加载一个自定义训练的模型

# 导出模型
model.export(format='onnx')

实例分割和目标分类此处不再赘述,可以自行查找官方文档

实战演练

下面将会自定义训练目标检测数据集

注意:没有特殊说明,路径均是以项目根目录为准

官方数据集

首先下载权重文件并将放到 ultralytics 项目根目录

image-20230908154536606

之后测试预训练模型的效果,在根目录执行如下命令

yolo predict model=yolov8n.pt source=ultralytics/assets/bus.jpg

image-20230908160147447

之后我们查看保存的检测好的图片 /root/Development/ultralytics/runs/detect/predict2

image-20230908160310209

训练 COCO128 数据集(这里可以配置 tensorboard 可视化面板,这里不赘述)

yolo train data=coco128.yaml model=yolov8n.pt epochs=3 lr0=0.01 batch=4

与此同时根目录下面生成了一个datasets文件夹,里面有 coco128 的数据集

注意:这里的 datasets 下载目录是在 ~/.config/Ultralytics/settings.yaml 文件中定义的,可以后续修改

image-20230908162607162

之后查看存储的训练结果的文件夹,weights 文件夹里面装的是效果最好的一次权重文件以及最后一轮训练的权重文件

自定义数据集

下载数据集

【下载地址】:Mask Wearing Dataset - raw (roboflow.com)

image-20230907185115131

然后下载 zip 压缩包即可

配置数据集

上传到项目根目录的 datasets,并重命名数据集为 MaskDataSet(本次演示直接使用下载的数据集,后面的部分步骤是针对自己制作数据集的要求)

data.yaml修改如下

path: ../datasets/MaskDataSet
train: ./train/images
val: ./valid/images
test: ./test/images

nc: 2
names: ['mask', 'no-mask']

roboflow:
  workspace: joseph-nelson
  project: mask-wearing
  version: 4
  license: Public Domain
  url: https://universe.roboflow.com/joseph-nelson/mask-wearing/dataset/4

划分数据集

我们需要将数据集按照指定比例划分(训练集:验证集:测试集=7:2:1)

【数据集划分脚本】:division-of-data/DivisionOfData.py at main · kuisec/division-of-data (github.com)

标注数据集

安装 lableme,执行 pip install labelme,然后命令行输入 labelme即可进入图形化界面

但是注意:labelme 生成的标签是 json 文件的格式,后续需要转化成 txt 文件才能被 yolov 使用

这里说下两种标注工具 labelImg 和 labelme 的区别

labelimg 是一种矩形标注工具,常用于目标识别和目标检测,其标记数据输出为.xml和.txt

labelme 是一种多边形标注工具,可以准确的将轮廓标注出来,常用于分割,其标记输出格式为json

【数据集标注文件格式转换脚本】:DeepLearning/others/label_convert at master · KKKSQJ/DeepLearning (github.com)

训练数据集

yolo train data=datasets/MaskDataSet/data.yaml model=yolov8n.pt epochs=10 lr0=0.01 batch=4

image-20230908194611414

使用效果最好的权重文件进行预测测试(需要提前上传 ultralytics/assets/mask.jpg口罩图片)

yolo predict model=runs/detect/train26/weights/best.pt source=ultralytics/assets/mask.jpg

查看最终效果

image-20230908194753360

参考文章

YOLOv8详解 【网络结构+代码+实操】_zyw2002的博客-CSDN博客

YOLOv8教程系列:一、使用自定义数据集训练YOLOv8模型(详细版教程,你只看一篇->调参攻略),包含环境搭建/数据准备/模型训练/预测/验证/导出等_Zhijun.li@Studio的博客-CSDN博客

零基础教程:使用yolov8训练自己的目标检测数据集_Dragon_0010的博客-CSDN博客

YOLOv5实操——检测是否戴口罩-CSDN博客

本文由博客一文多发平台 OpenWrite 发布!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/991647.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AjaxJavaScriptcss模仿百度一下模糊查询功能

1、效果 如下图所示,我们在输入大学时,程序会到后端查询名字中包含大学的数据,并展示到前端页面。 用户选择一个大学,该大学值会被赋值到input表单,同时关闭下拉表单; 当页面展示的数据都不符合条件时&…

华为云云耀云服务器L实例评测|基于云服务器的minio部署手册

华为云云耀云服务器L实例评测|基于云服务器的minio部署手册 【软件安装版本】【集群安装(是)(否)】 版本 创建人 修改人 创建时间 备注 1.0 jz jz 2023.9.2 minio华为云耀服务器 一. 部署规划与架…

Python程序设计实例 | 条形码图片识别

* 本系列推文案例中,建议Python采用3.10及以上版本,NumPy采用1.22.3及以上版本,Matplotlib采用3.5.1及以上版本,Pandas采用1.4.2及以上版本。Python从3.10这个版本开始,标准发行版本中自带的IDLE交互式环境中输入提示符…

腾讯云和阿里云2核2G服务器租用价格表对比

2核2G云服务器可以选择阿里云服务器或腾讯云服务器,腾讯云轻量2核2G3M带宽服务器95元一年,阿里云轻量2核2G3M带宽优惠价108元一年,不只是轻量应用服务器,阿里云还可以选择ECS云服务器u1,腾讯云也可以选择CVM标准型S5云…

JS中 bind()的用法,call(),apply(),bind()异同点及使用,如何手写一个bind()

✨什么是bind() bind()的MDN地址 bind() 方法创建一个新函数,当调用该新函数时,它会调用原始函数并将其 this 关键字设置为给定的值,同时,还可以传入一系列指定的参数,这些参数会插入到调用新函数时传入的参数的前面。…

项目(智慧教室)第五部分,Zigbee采集控制功能实现

一。IAR工程针对Zigbee的修改 补充:硬件配置 (1)拨码开关拨到公口处,协调器的连接 (2)协调器的烧写(Zigbee协调器也需要烧写) (4)温湿度模块的烧写 1.寻找Z…

工具 | XShell的学习与使用

工具 | XShell的学习与使用 时间:2023年9月8日09:03:29 文章目录 工具 | XShell的学习与使用1.下载2.安装 1.下载 1.官网XSHELL - NetSarang Website 2.免费版下载:家庭/学校免费 - NetSarang Website (xshell.com) 3.https://cdn.netsarang.net/de06d10…

LabVIEW检测润滑油中的水分和铁颗粒

LabVIEW检测润滑油中的水分和铁颗粒 润滑油广泛应用于现代机械设备,由于工作环境日益恶劣,润滑油经常被水分乳化,加速对机械设备的腐蚀。此外,润滑油还受到机械零件摩擦中产生的Fe颗粒的污染,削弱了其机械润滑效果。润…

mobaXterm使用pycharm

首先去pycharm的官网PyCharm: the Python IDE for Professional Developers by JetBrains 下载pycharm(选择linux的community版本即可) 下载后的压缩包拖拽到mobaXterm如下位置: 进入压缩包所在的文件夹(图中这个位置是root目录&…

docker镜像 容器 仓库

docker镜像 Docker 运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Docker会从镜像仓库下载该镜像。 获取镜像 Docker Hub 上有大量的高质量的镜像可以用,这里我们就说一下怎么获取这些镜像。 从 Docker 镜像仓库获取镜像的命令…

中科驭数KPU FLEXFLOW®-2100R RDMA加速DPU卡正式发布,下一代数据中心互联的“超级高速公路”

2023服贸会期间,中科驭数重磅推出最新自研的高性能网络“利器”——KPU FLEXFLOW-2100R RDMA加速DPU卡。这款产品的发布标志着中科驭数在高性能计算和数据中心领域的不断创新,旨在面向高速网络、高性能存储搭建起算力集群内部通信的"超级高速公路”…

【前端】在Vue页面中引入其它vue页面 数据传输 相互调用方法等

主页面 home 从页面 headView 需求 在 home.vue 中引用 headView.Vue 方案: home.vue 代码: 只需要在home.vue 想要的地方添加 <headView></headView> <script>//聊天页面 import headView /view/headView.vueexport default {components: {headView},…

978. 最长湍流子数组

978. 最长湍流子数组 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff08;一&#xff09;&#xff1a;滑动窗口参考代码&#xff1a; 解题思路&#xff08;二&#xff09;&#xff1a;动态递归参考代码&#xff1a; 针对&#xff08;二&#xff09;进行优化&#x…

组件安全以及漏洞复现

组件安全 1. 概述 A9:2017-使⽤含有已知漏洞的组件 A06:2021-Vulnerable and Outdated Components ​ 组件&#xff08;例如&#xff1a;库、框架和其他软件模块&#xff09;拥有和应用程序相同的权限。如果应用程序中含有已知漏洞的组件被攻击者利用&#xff0c;可能会造成…

【2023年11月第四版教材】第11章《成本管理》(第2部分)

第11章《成本管理》&#xff08;第2部分&#xff09; 4 规划成本管理4.1 成本管理计划★★★ 5 估算成本5.1 估算成本★★★ &#xff08;19上57&#xff09; &#xff08;19下35&#xff09;5.2 数据分析★★★5.4 成本估算★★★ 6 制定预算6.1 成本基准★★★ 7 控制成本7.1…

FOXBORO FBM233 P0926GX电源模块产品特点

FOXBORO FBM233 P0926GX 是一款电源模块&#xff0c;通常用于供电和管理工业自动化和控制系统中的设备和模块。以下是可能与这款电源模块相关的一些产品特点和功能&#xff1a; 电源输出&#xff1a; FBM233 P0926GX 电源模块提供一个或多个电源输出通道&#xff0c;用于为其他…

命悬一线小游戏

欢迎来到程序小院 命悬一线 玩法&#xff1a; 点击鼠标人物摆动跳跃&#xff0c;松开鼠标跳到方格上面&#xff0c;每跳一次都会有对应的分数统计&#xff0c;不要让人物掉下哦^^。开始游戏 html <canvas id"jsGameScreen"></canvas>css .bandiv{floa…

redis八股1

参考Redis连环60问&#xff08;八股文背诵版&#xff09; - 知乎 (zhihu.com) 1.是什么 本质上是一个key-val数据库,把整个数据库加载到内存中操作&#xff0c;定期通过异步操作把数据flush到硬盘持久化。因为纯内存操作&#xff0c;所以性能很出色&#xff0c;每秒可以超过10…

java开发之个人微信的二次开发

简要描述&#xff1a; 修改我在某群的昵称 请求URL&#xff1a; http://域名/updateIInChatRoomNickName 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参…

常见锁策略

一、乐观锁和悲观锁&#xff1a; &#xff08;一&#xff09;乐观锁 和 悲观锁概念 悲观锁&#xff1a;总是假设最坏的情况&#xff0c;认为每次读写数据都会冲突&#xff0c;所以每次在读写数据的时候都会上锁&#xff0c;保证同一时间段只有一个线程在读写数据。 乐观锁&a…