手把手教你用Yolov5 (v6.2) 训练分类模型 基于《Kaggle猫狗大战》案例
文章目录
0 前言
在8月17日晚上,YOLOv5
官方发布了v6.2
版本,v6.2
版本支持分类模型训练、验证、预测和导出;v6.2
版本的推出使得训练分类器模型变得超级简单!
下一个版本v6.3
计划于9月发布,将为YOLOv5
带来官方实例分割支持,今年晚些时候将发布一个主要的v7.0
版本,更新所有3个任务的架构——分类、检测和分割。
并且Yolov5
官方同样提供了大量的预训练权重供大家选择;
权重都是在
ImageNet
数据集上训练90 Epoch
后得到的,并且YOLOv5
官方将所有型号导出到ONNX FP32
进行CPU
速度测试,导出到TensorRT FP16
进行GPU
速度测试,最终得到的各项指标如下图所示:
分类任务的工作流与先前版本的检测任务工作流基本一致,所以熟悉检测任务的同学应该会很容易上手分类任务
1 v6.2 项目结构改动
v6.2
版本项目结构并无太大改变,主要是增加了classify
文件夹以及predict.py
train.py
val.py
这三个文件;那么这三个文件也分别对应着分类模型的推理
、训练
和验证
。
2 快速上手🌟
YOLOv5
分类训练支持使用--data
参数自动下载MNIST
、Fashion-MNIST
、CIFAR10
、CIFAR100
、Imagenette
、Imagewoof
和ImageNet
数据集。
例如,要开始在MNIST
上进行训练,只需要给–data参数设置为“MNIST
”
2.1 train
# Single-GPU
python classify/train.py --model yolov5s-cls.pt --data cifar100 --epochs 5 --img 224 --batch 128
# Multi-GPU DDP
python -m torch.distributed.run --nproc_per_node 4 --master_port 1 classify/train.py
--model yolov5s-cls.pt --data imagenet --epochs 5 --img 224 --device 0,1,2,3
2.2 val
bash data/scripts/get_imagenet.sh --val # download ImageNet val split (6.3G, 50000 images)
python classify/val.py --weights yolov5m-cls.pt --data ../datasets/imagenet --img 224 # validate
2.3 predict
python classify/predict.py --weights yolov5s-cls.pt --data data/images/bus.jpg
3 重要参数解析🚀
下面来看一下train.py
具体的参数信息
分类任务的参数与检测任务的参数差的并不是很多,大多数在参数的含义在6.1
版本我已经讲过了,我这里就挑出几个重点的说一下
v6.1
版本的参数解析可以参考我这两篇博文
手把手带你调参Yolo v5 (v6.1)(一)
手把手带你调参Yolo v5 (v6.1)(二)
3.1 "–data"🍀
Yolov5(v6.2)
版本的分类数据集信息不再通过配置文件的形式载入,而是通过文件夹的名字自动匹配,官方提供了一些数据集的url
可以自行下载;
本篇博文数据集以kaggle猫狗大战数据集为例子,从零开始训练自己的分类模型
3.1.1 划分数据集
kaggle猫狗大战数据集包含12500
张猫🐱图片与12500
张🐶狗图片,我按照如下方式划分
kaggle-DogVsCat
├─train
│ ├─Cat 8750
│ └─Dog 8750
├─val
│ ├─Cat 2500
│ └─Dog 2500
└─test
├─Cat 1250
└─Dog 1250
分类数据集的路径是自动匹配的,所以我们要按照这个命名规则划分,不然会提示你找不到数据集
3.1.2 修改超参数
划分好数据集后做如下改动:--data
default=“你分类数据集的名字”
随后就可以训练了
分类模型较检测模型训练速度快非常多,可能是训练图像尺寸设置的比较小的原因;可以通过
--imgsz
参数设置
3.2 “–seed” 🍀
这是v6.2
版本更新的一个非常重要的参数,使用torch>=1.12.0
的单GPU
训练完全可再现
4 模型推理
推理方式与检测任务几乎没有区别,修改一下权重路径就好
分类任务推理出的图片是这样子的,会显示准确率top5
的类别
5 Test集验证
这里也没什么可说的,修改一下权重路径和数据集就好
不知道是不是我没用明白,还没看出来怎么修改网络结构,所以说出个分类模型的意义是什么?
🎉更多内容导航
1.手把手带你调参Yolo v5 (v6.2)(一)🌟强烈推荐
4.手把手带你Yolov5 (v6.1)添加注意力机制(一)(并附上30多种顶会Attention原理图)🌟
5.手把手带你Yolov5 (v6.1)添加注意力机制(二)(在C3模块中加入注意力机制)
8.Yolov5更换上采样方式( 最近邻 / 双线性 / 双立方 / 三线性 / 转置卷积)
9.Yolov5如何更换EIOU / alpha IOU / SIoU?
10.Yolov5更换主干网络之《旷视轻量化卷积神经网络ShuffleNetv2》🍀
12.空间金字塔池化改进 SPP / SPPF / ASPP / RFB / SPPCSPC🍀
13.用于低分辨率图像和小物体的新 CNN 模块SPD-Conv🍀
14.持续更新中
有问题欢迎大家指正,如果感觉有帮助的话请点赞支持下👍📖🌟
更多推荐
所有评论(0)