Yolov5 (v6.2) 使用自己的数据训练分类模型 基于ONNX TensorRT转换

前言

之前文章已经讲过yolov5模型的训练,这一篇将说一下分类模型训练流程。
https://blog.csdn.net/qq_45066628/article/details/129470290

新版本简介

YOLOv5官方发布了v6.2版本,v6.2版本支持分类模型训练、验证、预测和导出;v6.2版本的推出使得训练分类器模型变得超级简单!

v6.2版本项目结构并无太大改变,主要是增加了classify文件夹以及predict.py train.py val.py 这三个文件;那么这三个文件也分别对应着分类模型的推理、训练和验证。
在这里插入图片描述

训练前准备工作🌟

模型下载

git clone https://github.com/ultralytics/yolov5
cd yolov5
pip install -qr requirements.txt

数据准备

这里数据集采用kaggle猫狗大战数据集
在这里插入图片描述
数据集下载地址:https://www.kaggle.com/c/dogs-vs-cats-redux-kernels-edition/data
在这里插入图片描述

划分数据集

分类模型无需标注数据,只需要将训练的图片按类别文件夹划分即可

格式如下🍀:

在这里插入图片描述
示例:
在这里插入图片描述
划分脚本:

import os
from shutil import copy
import random


def mkfile(file):
    if not os.path.exists(file):
        os.makedirs(file)


# 获取data文件夹下所有文件夹名(即需要分类的类名)
file_path = '../test_set/'
save_path = './data/'
flower_class = [cla for cla in os.listdir(file_path)]




# 划分比例,训练集 : 测试集 :验证= 7:1:2
split_train = 0,7
split_val = 0.1
split_test = 0.2

# 遍历所有类别的全部图像并按比例分成训练集和验证集
for cla in flower_class:
    cla_path = file_path + '/' + cla + '/'  # 某一类别的子目录
    images = os.listdir(cla_path)  # iamges 列表存储了该目录下所有图像的名称
    num = len(images)
    eval_train = random.sample(images, k=int(num * split_train))  # 从images列表中随机抽取 k 个图像名称
    eval_val = random.sample(images, k=int(num * split_val))  

    for index, image in enumerate(images):
    
        if image in eval_train:
            image_path = cla_path + image
            new_path = save_path+'/tarin/' + cla
            mkfile(new_path)
            copy(image_path, new_path)  # 将选中的图像复制到新路径

        elif image in eval_val:
            image_path = cla_path + image
            new_path = save_path+'/val/' + cla
            mkfile(new_path)
            copy(image_path, new_path)  # 将选中的图像复制到新路径

        else:
            image_path = cla_path + image
            new_path = save_path+'/test/' + cla
            mkfile(new_path)
            copy(image_path, new_path)
        print("\r[{}] processing [{}/{}]".format(cla, index + 1, num), end="")  # processing bar
    print()

print("processing done!")

下载权重文件

下载地址:https://github.com/ultralytics/yolov5
在这里插入图片描述
不同文件,使用产生的效果也不一样,这里使用YOLOv5s-cls

修改配置文件

到classify文件夹下,修改train.py
在这里插入图片描述
第一行设置自己下载的权重文件路径,第二行设置数据集路径,其余参数可根据自行需要修改。

开始训练🚀

  1. 方法一:
    运行classify下的train.py文件,这里由于cuda问题,暂时选用cpu进行训练演示。
    在这里插入图片描述
    运行后这里缺失模块产生了一个报错,若没有跳过,解决方法:

    pip install --upgrade protobuf

    然后重新运行train.py文件
    在这里插入图片描述

  2. 方法二:

    python classify/train.py --model yolov5s-cls.pt --data datasets/data–epochs 100 --batch-size 32 --imgsz 224

训练完成后,会在runs文件夹下看到模型
在这里插入图片描述

验证和推理

验证

  1. 方法一:

    python classify/val.py --weights runs/train-cls/exp4/weights/best.pt --data datasets/data

  2. 方法二:
    到classify文件夹下,修改val.py
    在这里插入图片描述
    第一行使用自己训练的模型文件,第二行修改数据集路径,其余参数可根据自行需要修改。

验证结果:
输出类别和正确率信息
在这里插入图片描述

推理

方法与上述类似,该文件或直接使用命令行

# 测试im1.jpg
python classify/predict.py --weights runs/train-cls/exp4/weights/best.pt --source im1.jpg

# 测试im2.jpg
python classify/predict.py --weights runs/train-cls/exp4/weights/best.pt --source im2.jpg

推理结果:
可以到runs文件夹下的predict-cls文件夹下查看结果

在这里插入图片描述
在这里插入图片描述

导出

使用ONNX

执行命令导出onnx:

python export.py --weights runs/train-cls/exp4/weights/best.pt --include onnx

输出:

Detect: python classify/predict.py --weights runs/train-cls/exp4/weights/best.onnx
Validate: python classify/val.py --weights runs/train-cls/exp4/weights/best.onnx
PyTorch Hub: model = torch.hub.load(‘ultralytics/yolov5’, ‘custom’, ‘runs/train-cls/exp4/weights/best.onnx’) # WARNING ⚠️ ClassificationModel not yet supported for PyTorch Hub AutoShape inference
Visualize: https://netron.app

使用TensorRT

执行命令导出engine:

python export.py --weights runs/train-cls/exp4/weights/best.pt --include engine --device 0

输出:

Detect: python classify/predict.py --weights runs/train-cls/exp4/weights/best.engine
Validate: python classify/val.py --weights runs/train-cls/exp4/weights/best.engine
PyTorch Hub: model = torch.hub.load(‘ultralytics/yolov5’, ‘custom’, ‘runs/train-cls/exp/weights/best.engine’) # WARNING ⚠️ ClassificationModel not yet supported for PyTorch Hub AutoShape inference
Visualize: https://netron.app

  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
很抱歉,作为AI语言模型,我无法编写代码,但我可以告诉你如何推理YOLOv5v6.2 ONNX模型。 首先,你需要安装ONNX Runtime,它是一个高性能的推理引擎,支持在CPU、GPU和AI加速器上运行。你可以在官方网站上找到ONNX Runtime的安装方法。 接下来,你需要加载YOLOv5v6.2 ONNX模型。你可以使用ONNX Runtime的Python API来加载ONNX模型。以下是加载ONNX模型的代码示例: ```python import onnxruntime as ort # 加载ONNX模型 model_path = "path/to/yolov5v6.2.onnx" session = ort.InferenceSession(model_path) input_name = session.get_inputs()[0].name ``` 现在,你可以将输入数据传递给模型进行推理。YOLOv5v6.2模型的输入是一个大小为[1, 3, 640, 640]的张量,其中1表示批处理大小,3表示通道数,640表示图像的高度和宽度。你需要将输入图像转换为这个形状,并将其传递给模型进行推理。以下是推理代码的示例: ```python import cv2 import numpy as np # 读取图像 image_path = "path/to/image.jpg" image = cv2.imread(image_path) # 将图像调整为模型的输入形状 resized_image = cv2.resize(image, (640, 640)) input_data = np.transpose(resized_image, [2, 0, 1]) input_data = np.expand_dims(input_data, axis=0).astype(np.float32) # 进行推理 outputs = session.run(None, {input_name: input_data}) # 处理输出结果 # TODO: 根据模型输出结果进行处理 ``` 最后,你需要根据模型输出结果进行处理。YOLOv5v6.2模型的输出包含了检测框的坐标、置信度和类别信息。你可以使用这些信息来绘制检测框并显示检测结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kuokay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值