首页 > 其他分享 >YOLOv8多分类识别

YOLOv8多分类识别

时间:2024-08-18 14:58:10浏览次数:9  
标签:img 训练 onnx 模型 分类 YOLOv8 文件夹 model 识别

文章目录

1.数据集处理

​ v8的数据处理方式和v5是一样的,不需要打标签,只需要将数据整理好后放在各个文件夹中,文件夹的名称就是它的标签名,这个可以通过onnx可以看到。

训练后转成onnx如下

这个onnx是我之前训练好的模型并转成了onnx

在这里插入图片描述

数据整理如下

每个文件夹里面存放的都是320x320的图片,这里我做了9个分类,每个类别存放在不同的文件夹中

在这里插入图片描述

2.模型训练

​ 整理好数据集后,就可以开启训练了,跟V5一样,只是V8可以不用下载工程文件,安装ultralytics这个包后调用,并调整参数即可,参数说明放在第4点的参数说明那里

注意:记得下载预训练的模型,不然运行代码的时候它再自动下载的话会比较慢

from ultralytics import YOLO

if __name__ == '__main__':
    model_path = r"E:\yolodata\yolov8s-cls.pt"
    model=YOLO(model_path)
    model.train(
        # 数据文件路径,例如 coco128.yaml,分类任务直接写数据集文件夹路径即可
        data=r"E:\yolodata\numbers",
        imgsz=320, # 图像大小
        device=0, # 运行设备
        batch=32, # 每批次的图像数量 (-1 表示自动批次)
        epochs=10) # 训练的周期数

​ 当执行成功以上代码后,会在该代码文件的同一文件夹下生成一个runs文件夹,最里面的weight文件夹会存放我们训练好的pt模型。训练完后会提示我们所保存的位置,到时候记得看打印台即可.

在这里插入图片描述

​ 我们打开训练代码的文件夹,会发现多了一个runs文件,预训练的模型是我自己提前下载好的,numbers是我们的数据集,v_8train.py是我训练代码的文件

在这里插入图片描述

​ 打开runs文件夹里面的train文件,里面存放我们训练的结果已经存放模型的weight文件夹

在这里插入图片描述

​ 我们可以随便打开一个验证的图片看看,虽然只训练了10轮,可以看到效果还行,没有很差。

在这里插入图片描述

3.模型推理

​ 有了pt模型后,我们就可以转成onnx方便后续部署

from ultralytics import YOLO

if __name__ == '__main__':
    model_path = r"E:\yolodata\runs\classify\train\weights\best.pt"
    model=YOLO(model_path)
    model.export(format="onnx",imgsz=320)

​ 从onnx我们知道它的输入是tensor: float32[1,3,320,320],输出是tensor: float32[1,9],剩下我们只需要导入onnx模型,然后将图片进行处理成它输入要的shape,并进行归一化处理即可

在这里插入图片描述

​ 通过上面的onnx图片,我们知道names部分包含标签的名字以及它的索引(下标),在代码中我的图片是一张3的图片,它对应的标签名是**“3_three”,所以可以通过上面的onnx知道它的索引是2**,所以只要代码中输出是2则表示推理成功。

import cv2
import os
import onnxruntime as ort
import numpy as np



onnx_path=r"E:\yolodata\runs\classify\train\weights\best.onnx"
provider = ort.get_available_providers()[1 if ort.get_device()=="GPU" else 0]

ort_session=ort.InferenceSession(onnx_path, providers=[provider])

img_path=r"E:\yolodata\numbers\val\3_three\26.png"
img_src=cv2.imread(img_path)
img_dst=img_src[np.newaxis, :,:,:]/255.
img_dst=np.transpose(img_dst, (0,3,1,2)).astype(np.float32)
# print(img_dst.shape,img_dst.dtype) # (1, 3, 320, 320) float32


output=ort_session.run(output_names=['output0'], input_feed={'images':img_dst})

best_index=np.argmax(output[0],axis=1)

print(best_index) # 输出[2] 推理成功

4.一些问题

(1)V8它是怎么知道我们训练了多少类

那是因为它的数据加载中用了torchvision.datasets.ImageFolder,

会自动根据子目录名作为类别标签,并将每个子目录下的图像作为该类别的样本。
# 同时,它还会返回一个映射关系,表示类别标签到实际类别的字典,可以通过class_to_idx属性访问

在代码中的这个位置

在这里插入图片描述

5.参数说明

model.train()参数说明

参考链接:https://blog.csdn.net/qq_42452134/article/details/135168930

参数 (Key)默认值 (Value)描述 (Description)
model如果预训练就指向预训练模型模型文件路径,例如 yolov8n.pt, yolov8n.yaml
data执行数据集地址数据文件路径,例如 coco128.yaml
epochs100训练的周期数
timeNone训练的小时数,如果提供了此参数将覆盖周期数
patience50早停训练等待的最大无改善周期数
batch16每批次的图像数量(-1 表示自动批次)
imgsz640输入图像的尺寸
saveTRUE是否保存训练检查点和预测结果
save_period-1每 x 个周期保存一次检查点(如果小于 1 则禁用)
cacheFALSE是否使用数据加载的缓存,可选 True/ram, disk 或 False
deviceNone运行设备,例如 cuda device=0 或 device=0,1,2,3 或 device=cpu
workers8数据加载的工作线程数(如果使用DDP则每个RANK)
projectNone项目名称
nameNone实验名称
exist_okFALSE是否覆盖已存在的实验
pretrainedTRUE是否使用预训练模型(布尔值)或从其中加载权重的模型(字符串)
optimizer‘auto’使用的优化器,选项包括 [SGD, Adam, Adamax, AdamW, NAdam, RAdam, RMSProp, auto]
verboseFALSE是否打印详细输出
seed0随机种子,用于可重复性
deterministicTRUE是否启用确定性模式
single_clsFALSE将多类别数据作为单一类别训练
rectFALSE矩形训练,每批次根据最小填充整理
cos_lrFALSE使用余弦学习率调度器
close_mosaic10在最后几个周期禁用马赛克增强(0 为禁用)
resumeFALSE从最后一个检查点恢复训练
ampTRUE自动混合精度(AMP)训练
fraction1训练集中用于训练的数据集比例(默认为 1.0,即全部图像)
profileFALSE在训练期间用于日志记录器的 ONNX 和 TensorRT 速度分析
freezeNone在训练期间冻结前 n 层,或冻结层索引列表
lr00.01初始学习率(例如 SGD=1E-2, Adam=1E-3)
lrf0.01最终学习率(初始学习率 * 最终学习率)
momentum0.937SGD 动量/Adam beta1
weight_decay0.0005优化器权重衰减 5e-4
warmup_epochs3热身周期数(小数也可)
warmup_momentum0.8热身期间的初始动量
warmup_bias_lr0.1热身期间的初始偏置学习率
box7.5边界框损失增益
cls0.5类别损失增益(根据像素缩放)
dfl1.5DFL 损失增益
pose12姿态损失增益(仅姿态)
kobj2关键点对象损失增益(仅姿态)
label_smoothing0标签平滑(小数表示比例)
nbs64标称批次大小
overlap_maskTRUE训练期间遮罩是否重叠(仅限分割训练)
mask_ratio4遮罩下采样比率(仅限分割训练)
dropout0是否使用 dropout 正则化(仅限分类训练)
valTRUE训练期间是否进行验证/测试
plotsFALSE训练/验证期间是否保存图表和图像

model.export()参数说明

参考链接:https://blog.csdn.net/qq_42761751/article/details/140825169

ArgumentTypeDefaultDescription
formatstr‘torchscript’导出模型的目标格式,例如 ‘onnx’、‘torchscript’、‘tensorflow’ 或其他格式,用于定义与各种部署环境的兼容性
imgszint or tuple640模型输入的期望图像大小。可以是整数,或者用于特定尺寸的元组(高度,宽度)
kerasboolFALSE启用导出为Keras格式的TensorFlow SavedModel,提供与TensorFlow服务和API的兼容性
optimizeboolFALSE在导出到TorchScript时应用移动设备优化,可能会减少模型大小并提高性能
halfboolFALSE启用FP16(半精度)量化,减少模型大小,并可能在支持的硬件上加速推理
int8boolFALSE启用INT8量化,进一步压缩模型并加速推理,精度损失最小,主要适用于边缘设备
dynamicboolFALSE允许 ONNX 和 TensorRT 导出支持动态输入尺寸,提高处理不同图像尺寸的灵活性
simplifyboolFALSE通过 onnxslim 简化 ONNX 导出的模型图,可能提高性能和兼容性
opsetintNone指定 ONNX opset 版本,以确保与不同的 ONNX 解析器和运行时兼容。如果未设置,将使用最新支持的版本
workspacefloat4设置 TensorRT 优化的最大工作空间大小(以 GiB 为单位),以平衡内存使用和性能
nmsboolFALSE为 CoreML 导出添加非极大值抑制(NMS),这是准确和高效检测后处理的关键
batchint1指定导出模型的批量推理大小或在预测模式下导出模型将同时处理的最大图像数量

完结!!!

在这里插入图片描述

标签:img,训练,onnx,模型,分类,YOLOv8,文件夹,model,识别
From: https://blog.csdn.net/hello000w/article/details/141298033

相关文章

  • YOLOv8单目标检测
    文章目录1.数据集2.模型训练3.转onnx并推理(1)输出结果解释(2)推理4.YOLOv8参数说明用于个人记录,好记性不如烂笔头其实整体训练的流程和V5差不多,只是V8不需要下载工程文件了,而是可以通过安装ultralytics,然后进行调用pipinstallultralytics1.数据集​数据集的制......
  • 身份证OCR-身份证OCR识别-身份证OCR文字识别-身份证识别--身份证图像识别-身份证信息
    身份证OCR文字识别是一种利用光学字符识别(OCR)技术对身份证图像进行自动识别和处理的技术,它能够提取出身份证上的文字和图像信息,并将其转化为结构化数据或可编辑文本。以下是关于身份证OCR文字识别的详细解析:一、技术原理身份证OCR文字识别技术主要包括以下几个步骤:图像采集:......
  • 【全网独家】OpenCV C++ 图像处理实战 :多二维码识别(代码+测试部署)
    介绍在现代社会,二维码无处不在,从支付、物流到用户身份验证,二维码的应用极其广泛。本文将详细介绍如何使用OpenCV在C++环境下实现多二维码识别。我们将涵盖其应用场景、原理解释、算法流程图以及实际代码实现。应用使用场景仓储物流管理:快速扫描多个包裹上的二维码,实现高......
  • 雷达气象学(11)——双偏振雷达的相态识别与降水估测
    目录11.1相态识别的原理11.2相态识别算法11.3降水估测的原理11.1相态识别的原理在上一篇文章我们已经知道,不同类别的水凝物在双偏振雷达上表现出不同的特性,因此可以根据双偏振雷达观测推测出水凝物的相态类型,或者说推测出回波的类型。具体而言,是利用双偏振变量如\(Z_{DR}\)......
  • 基于MATLAB的人民币识别系统
    一、课题介绍    本设计为基于MATLAB的人民币识别系统。带有一个GUI界面。先利用radon进行倾斜校正,根据不同纸币,选择不同维度的参数识别纸币金额,有通过RGB分量识别100元;通过面额图像的宽度识别1元、5元;通过构建矩形结构体识别10元;通过RGB分量识别20元与50元。运行G......
  • 六. 部署分类器-preprocess-speed-compare
    目录前言0.简述1.案例运行2.代码分析2.1main.cpp2.2preprocess.cpp3.补充说明结语下载链接参考前言自动驾驶之心推出的《CUDA与TensorRT部署实战课程》,链接。记录下个人学习笔记,仅供自己参考本次课程我们来学习课程第六章—部署分类器,一起来CPU端图像预......
  • yolo入门 yolov8下载安装--2024.8
    默认已安装Anaconda(一个类似于环境管理器的软件,前面出过anaconda安装教程)1.创建激活环境打开AnacondaPrompt,创建yolov8环境condacreate-nyolov8python=3.8激活环境activateyolov82.下载yolov8安装包 下载链接:https://github.com/ultralytics/ultralytics同时可......
  • 爆改YOLOv8 | yolov8添加GAM注意力机制
    1,本文介绍GAM(GlobalAttentionMechanism)旨在改进传统注意力机制的不足,特别是在通道和空间维度上的信息保留问题。它通过顺序的通道-空间注意力机制来解决这些问题。以下是GAM的关键设计和实现细节:通道注意力子模块:3D排列:使用3D排列来在三个维度上保留信息,这种方法有助于捕......
  • 爆改YOLOv8 || 利用Gold-YOLO提高YOLOv8对小目标检测精度
    1,本文介绍Gold-YOLO通过一种创新的 聚合-分发(Gather-and-Distribute,GD)机制 来提高信息融合效率。这一机制利用卷积和自注意力操作来处理来自网络不同层的信息。通过这种方式,Gold-YOLO能够更有效地融合多尺度特征,实现低延迟和高准确性之间的理想平衡.关于GOLD-YOLO的详细......
  • KNN图像识别实例--手写数字识别
    目录前言一、导入库二、导入图像并处理1.导入图像2.提取出图像中的数字3.将列表转换成数组4.获取特征数据集5.获取标签数据三、使用KNN模型1.创建KNN模型并训练2.KNN模型出厂前测试3.使用测试集对KNN模型进行测试四、传入单个图像,使用该模型进行识别1.导入图像......