yolov5进行分类模型训练

本文介绍如何使用YOLOv5框架创建数据集并训练分类模型,包括环境搭建、模型训练及参数设置等内容,并展示了如何利用训练好的模型进行预测。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据集收集

datasets
train
classes1_imgs
classes2_imgs
classes3_imgs
test
classes1_imgs
classes2_imgs
classes3_imgs
valid
classes1_imgs
classes2_imgs
classes3_imgs

建议数据集划分为 train: test: valid = 7: 2: 1

训练模型

下载并配置yolov5环境

需要在pytorch gpu版本下进行

git clone https://github.com/ultralytics/yolov5 
cd yolov5
pip install -r requirements.txt  # 下载所需包

训练模型

将数据集放在 yolo5 目录下即可

打开train.py, 设置以下四个参数

parser.add_argument('--model', type=str, default='yolov5s-cls.pt', help='initial weights path')
    parser.add_argument('--data', type=str, default='imagenette160', help='cifar10, cifar100, mnist, imagenet, ...')
    parser.add_argument('--epochs', type=int, default=10, help='total training epochs')
    parser.add_argument('--batch-size', type=int, default=64, help='total batch size for all GPUs')
    parser.add_argument('--imgsz', '--img', '--img-size', type=int, default=224, help='train, val image size (pixels)')

–data 为数据集路径
–batch-size 为每个训练批次的图片数, 提高该数值会增加训练速度,同时也会带来更高的内存占用
–epochs 训练次数

模型默认使用yolov5s-cls.pt, 各个预训练模型参数如下

之后运行 train.py 训练模型

使用模型

from utils.augmentations import classify_transforms
from utils.dataloaders import LoadImages
from utils.general import Profile, check_img_size, non_max_suppression, scale_boxes
from models.common import DetectMultiBackend
from utils.torch_utils import select_device

import pathlib
temp = pathlib.PosixPath
pathlib.PosixPath = pathlib.WindowsPath

import torch
import torch.nn.functional as F


def predict_oneImg(model, dir_path, imgsz = (224, 224), dt = (Profile(), Profile(), Profile())):
    dataset = LoadImages(dir_path, img_size=224,
                         transforms=classify_transforms(imgsz[0]))
    for path, im, im0s, vid_cap, s in dataset:
        with dt[0]:
            im = torch.Tensor(im).to(model.device)
            if len(im.shape) == 3:
                im = im[None]  # expand for batch dim

        # Inference
        with dt[1]:
            results = model(im)

        # Post-process
        with dt[2]:
            pred = F.softmax(results, dim=1)

        classes_names = model.names
        prob_list = pred.tolist()[0]
        top3pre = pred.argsort(descending=True).tolist()[0][:3]

        for i in top3pre:
            print("{}: {:.3}%".format(classes_names[i], prob_list[i] * 100), end=" ")
        print('')


device = ''
device = select_device(device)
# 模型路径
model_cls_o = DetectMultiBackend('weights/ball_card_cls2optic.pt', device=device)
# 图片路径
predict_oneImg(model_cls_o, dir_path=r"D:\Code\ML\images\Mywork2\Url_O\16-17")
### 训练YOLOv5分类模型 对于希望利用YOLOv5框架进行图像分类任务的研究者而言,尽管YOLOv5最初设计用于目标检测而非纯分类任务,仍然可以通过特定配置调整来实现这一目的。为了准备并启动YOLOv5分类训练流程,需遵循一系列指导原则。 #### 准备数据集 要使YOLOv5适应于执行分类任务,首先应当准备好适配的数据结构。这涉及到创建一个专门针对分类任务构建的数据目录布局[^1]: - 数据应被划分为`train`, `val`两个子文件夹分别代表训练集和验证集。 - 每个类别对应单独的一个文件夹,在这些文件夹内部放置属于该类别的所有样本图片。 这种组织形式简化了后续加载过程中的路径管理,并确保每张输入图像是唯一关联到某具体标签下的实例之一。 #### 修改配置文件 接下来是对YOLOv5默认设置做出适当修改以便支持分类模式的工作流。主要涉及编辑项目根目录下找到的相关`.yaml`配置文档: ```yaml # example of classification data configuration file (data/coco128.yaml) path: ../datasets/coco128 # dataset root dir train: images/train # train images relative to 'path' folder, i.e., path/images/train/*.jpg val: images/val # val images relative to 'path' folder, e.g., path/images/val/*.jpg nc: 80 # number of classes names: [person, bicycle, car, ... ] # class names array ``` 上述示例展示了如何定义指向各自分割后的图像集合以及声明总共有多少种类别参与学习过程;同时列出了各个可能遇到的对象名称列表供识别时对照使用。 #### 启动训练脚本 最后一步就是编写或选用合适的Python脚本来触发整个训练周期。通常情况下可以直接运行位于源码仓库内的预置脚本如`train.py`,并通过命令行参数传递必要的选项以定制化行为特性: ```bash python train.py --img 640 --batch 16 --epochs 50 --data coco128.yaml --weights '' --cfg models/yolov5s.yaml --project runs/train/classify --name exp --exist-ok ``` 此指令片段说明了一个典型的调用场景——指定了分辨率大小、批次规模、迭代次数上限等超参数的同时还明确了所依赖的基础权重状态为空即随机初始化网络参数,并通过指定不同的日志保存位置区分不同实验记录。 ```python import torch from pathlib import Path if __name__ == '__main__': imgsz = 640 # image size batch_size = 16 # batch size epochs = 50 # training epochs weights_path = '' cfg_file = 'models/yolov5s.yaml' project_dir = 'runs/train/classify' experiment_name = 'exp' device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') # Assuming the existence of a function that handles all aspects of training setup and execution. start_training(imgsz=imgsz, batch=batch_size, epochs=epochs, data='coco128.yaml', weights=Path(weights_path), cfg=cfg_file, project=project_dir, name=experiment_name, exist_ok=True) ``` 以上代码段提供了一种更面向对象的方式来组织相同的逻辑操作序列,其中假设存在名为`start_training()`的方法负责处理实际细节层面的任务安排与资源调度工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值