如何在自定义数据集上训练YOLOv8的各个模型

news/2024/7/11 1:46:07 标签: YOLO, 深度学习, 人工智能

YOLOv8_0">YOLOv8效果图(可以应用到图片和视频):

在这里插入图片描述

在这里插入图片描述

四个模式命令

yolo task=detect mode=predict model=yolov8n.pt source='input/test.mp4' show=True

yolo task=segment mode=predict model=yolov8x-seg.pt source='input/test.mp4' show=True

yolo task=classify mode=predict model='model/yolov8n-cls.pt' source='input/test.mp4' show=True

yolo task=pose mode=predict model='model/yolov8n-pose.pt' source='input/test.mp4' show=True

model=yolov8n.pt替换为自己的权重,如果本地没有,就会自动去下载预训练权重,source替换为自己的图片或者视频,task可以修改为其他三种模式。

yolo发展历程:

在这里插入图片描述

YOLOv8_vs_YOLOv7_vs_YOLOv6_vs_YOLOv5_17">YOLOv8 vs YOLOv7 vs YOLOv6 vs YOLOv5

在这里插入图片描述

YOLOv8UltralyticsYOLOv5YOLOv3_19">YOLOv8的出品公司还是Ultralytics,也就是发布YOLOv5和YOLOv3的那家。

在这里插入图片描述

本次的升级主要包括:

  • 用户友好的API(命令行+Python)
  • 更快更准确(由于正式的论文还没发表,它和SOTA模型的具体对比数据现在还没有)
  • 同时支持目标检测、实例分割和图像分类三种任务
  • 可扩展到以前所有的版本
  • 新的backbone网络(CSP结构不变,但C2f模块替换了C3模块,每个stage的blocks数改为[3,6,6,3]等)
  • 新的Anchor-Freehead
  • 新的损失函数

首先,YOLOv8的开发者脱离了标准YOLO项目的设计,将train.py、detect.py、val.py、export.py这四个脚本进行了分离。

短期来看,这种改变可能会引起混乱,因为它从YOLOv3就一直没有变过;但原来这种看起来就好理解的模式在实时处理和跟踪场景中进行部署实在是比较麻烦。所以还是改用了更加灵活的新设计,让YOLOv8可以通过终端独立使用。

其次,这次新增的CLI可以让你在各种任务和版本上进行更加方便的模型训练、验证或推理。在终端的操作方式与我们熟悉的脚本非常相似,比如利用CLI检测给定图像中的对象,这样就行:

yolo task=detect \
mode=predict \
model=yolov8n.pt \
conf=0.25 \
source='https://media.roboflow.com/notebooks/examples/dog.jpeg'

在这里插入图片描述

最后,Ultralytics YOLO这次配备的Pythonic模型和训练接口,让我们用6行代码就能在自定义Python脚本中用上YOLO模型,操作方式就像这样:

from ultralytics import YOLO
model = YOLO('yolov8n.pt')
model.predict( source='https://media.roboflow.com/notebooks/examples/dog.jpeg', conf=0.25)

YOLOv8_52">在自定义数据集上训练YOLOv8

YOLOv8_53">1、首先,安装YOLOv8

pip install ultralytics(推荐)

或者

git clone https://github.com/ultralytics/ultralytics>cd ultralytics>pip install -e ultralytics

2、然后开始构建自定义数据集。

为了不让这个过程那么痛苦和耗时,我们可以用上Roboflow这个工具,操作步骤如下:

(1)创建账户,新建项目,项目类型选择“目标检测(Object Detection)”。
在这里插入图片描述

在这里插入图片描述

(2)上传图片将数据集导入到项目之中。如果你没有准备数据集,可以用它们官方提供的(从Roboflow Universe中下载)。
在这里插入图片描述

如果你的图片已经带标注,系统可以自动读取;如果没有,可以用它提供的这个非常快捷的标注工具现标。

在这里插入图片描述

(3)然后就能生成数据集了。“预处理”和“数据增强”两个选项可以勾上,让你的模型鲁棒性更强。

在这里插入图片描述

(4)现在我们就拥有了自己的一个托管数据集,将它导出就能直接加载到电脑中进行训练了。

记住从Roboflow Universe中下载数据集时选择“YOLO v5 PyTorch”格式,然后在弹出的窗口中看到一段代码,简单修改各个参数即可。

from roboflow import Roboflow

rf = Roboflow(api_key='YOUR_API_KEY')
project = rf.workspace('WORKSPACE').project('PROJECT')
dataset = project.version(1).download('yolov8')

在这里插入图片描述

3、开始训练

使用下面的命令将数据集下载片段(snippet)粘贴到你的YOLOv8 Colab notebook中,开始训练。

yolo task=detect \
mode=train \
model=yolov8s.pt \
data={dataset.location}/data.yaml \
epochs=100 \
imgsz=640

取决于数据集大小和训练方法,过程将持续几分钟或几小时。

以下是上述足球数据集的训练结果:

(1)返回的混淆矩阵;

在这里插入图片描述

(2)跟踪的关键指标;

在这里插入图片描述

(3)验证batch上的推理示例。

在这里插入图片描述

4、用测试集验证模型

训练好后开始验证。创建数据集时分成三部分,其中一部分用来当测试集:

yolo task=detect \
mode=val \
model={HOME}/runs/detect/train/weights/best.pt \
data={dataset.location}/data.yaml

评估结果如下:

在这里插入图片描述

5、使用自定义模型进行预测

命令如下:

yolo task=detect \
mode=predict \
model={HOME}/runs/detect/train/weights/best.pt \
conf=0.25 \
source={dataset.location}/test/images

结果示例:

在这里插入图片描述

6、最后一步:导出和上传权重

现在我们拥有了一组训练好的权重,可用于托管API端点,就在项目的/runs/detect/train/weights/best.pt文件夹中。

当然,也可以使用Roboflow pip包中的Deploy()函数将它上传到Roboflow Deploy中,方便自己和他人共享。

在这里插入图片描述

单击Roboflow仪表板侧栏中的“部署(Deploy)”,查看可用的选项,然后就能直接在浏览器中测试你的模型了。要共享给他人,发送一个URL就行。

测试素材可以直接用你测试集里的图片,也可以上传新的图片或视频,或者粘贴YouTube链接、直接用摄像头。

在这里插入图片描述


http://www.niftyadmin.cn/n/233774.html

相关文章

AI绘图网站 MJ(Midjourney) 基础讲解+注册教程

最近有很多伙计在在问如何使用AI作图,MJ当属第一了,不过同样的也是需要魔法才能使用。 是什么? Midjourney是一款高效、准确且免费的AI绘画生成工具,相较于其他同类工具具备更丰富的特色。 先看个成品图: 注册流程 …

GAN网络系列博客(三):不受坐标限制的GAN(StyleGAN3)

目录 1. 概述 2. 连续信号分析 2.1 等变网络层 3. 具体实现 3.1 傅里叶特征和基础简化 3.2 根据连续插值进行的步骤重建 4.实验 总结 Reference 关于StyleGAN系列博客的收尾之作,StyleGAN3已经鸽了太久了。说实话,前两篇StyleGAN说的什么内容&#xff0…

[NSSRound#11] 密码学个人赛

这个比赛没有参加,跟别人要了些数据跑一下,其实交互这东西基本上一样,跑通就行. ez_enc 这题有点骗人,给了一堆AB串,一开始以为是培根密码,结果出来很乱.再看长度:192 应该就是01替换 a ABAABBBAABABAABBABABAABBABAAAABBABABABAAABAAABBAABBBBABBABBABBABABABAABBAABBABAA…

了解最新的Android开发趋势和技术的秘诀

前言 当前,Android开发市场已经相当成熟,并且在全球范围内都非常活跃。Android是全球最受欢迎的移动操作系统之一,自Android开源以来,它已经改变了移动技术。市场上大量的企业和开发者都在积极地跟进、深入研究和开发Android系统…

MySQL 8.0 OCP (1Z0-908) 考点精析-性能优化考点1:sys.statement_analysis视图

文章目录MySQL 8.0 OCP (1Z0-908) 考点精析-性能优化考点1:sys.statement_analysis视图视图sys.statement_analysis各列定义视图sys.statement_analysis视图的定义视图sys.statement_analysis各列解释例题例题解析参考MySQL 8.0 OCP (1Z0-908) 考点精析-性能优化考点…

pthread使用

pthread是一种多线程编程模型,提供了一系列的API函数来管理线程。下面是pthread中常用的函数和它们的参数解析:1、pthread_create: int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), v…

C++11: lambda、包装器、模板参数包和线程库

lambda C98中的一个例子 在C98中,如果想要对一个数据集合中的元素进行排序,可以使用std::sort方法。 int main() {int array[] { 4,1,8,5,3,7,0,9,2,6 };// 默认按照小于比较,排出来结果是升序std::sort(array, array sizeof(array) / s…

Binder基本知识

1:IPC 原理 从进程角度来看 IPC 机制 每个 Android 的进程,只能运行在自己进程所拥有的虚拟地址空间。对应一个4GB 的虚拟地址空间,其中 3GB 是用户空间,1GB 是内核空间,当然内核空间的大小是可以通过参数配置调整的…