用yolov5做kaggle上的mnist手写数字识别

前言

yolov5更新了v6.2,增加了分类模型,于是一时兴起想试试yolov5的分类性能如何,本次使用yolov5s-cls模型,只训练五次,看看在经典数据集mnist上能达到多少准确率,同时为了公正,只使用官方指令进行训练,在kaggle上进行提交测试准确率。

数据集准备

需要下载的自行进入链接
在这里插入图片描述
这里我们直接把test.csv和sample_submission.csv下载下来就行了。
在同目录下新建一个py脚本,输入以下内容,来把里面的每一条数据转成28x28的图片。

#oom.py
import pandas as pd
import imageio
df = pd.read_csv('test.csv')
for index,row in df.iterrows():
    print(index) #打印序号方便看进度
    pixels = row.values.reshape((28, 28))
    imageio.imwrite('E:/image/'+str(index) + '.png', pixels)

自行修改保存目录,我这里是在E盘的image文件夹下,然后用命令行直接运行,如果在像vs这样的ide下运行电脑内存不够有可能溢出哦。
在这里插入图片描述
打开目录,可以发现已经转换成了图片。

Yolov5训练

链接
首先肯定是把yolov5最新的源码下载下来,然后再转到release页面,可以看到有很多模型:
在这里插入图片描述
这里如果你电脑显卡比较垃圾,指没有8g内存的老显卡,建议选择最小号的yolov5n-cls模型,因为我的8g显存显卡跑yolov5s-cls还需要把num_workers调成6才能正常运行。
把模型放进源码目录,然后在当前目录启动命令行,输入以下训练:

python classify/train.py --model yolov5s-cls.pt --data mnist --epochs 5 --img 224 --batch 128

然后新版的好像强制要使用wandb这个网页记录训练过程的软件,建议提前注册一个,然后在训练时把wandb给你的api key输入进去激活(我这边不能粘贴,只能手输),正常训练后后可以在wandb查看结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
过程,结果查看,中间硬件的使用记录等等都有一个比较详细的过程,特别是硬件这块,能看到cpu和gpu的使用率,温度,占用等等,还是不错的。
可以看到训练四遍准确率就达到0.994了,接下来就是进行预测并保存输出。

Yolov5预测

先到训练目录下把最好的一次模型(best.pt)取出来放到根目录:
在这里插入图片描述
然后把先前准备好的数据集图片文件夹整个放进根目录:
在这里插入图片描述
把sample_submission.csv放进classify文件夹下方便读取:
在这里插入图片描述
修改predict.py如下,为了看的更清楚,我用vs对原始和修改过的py进行了对比(左边是修改过的):
在这里插入图片描述
首先添加引用。
在这里插入图片描述
新建一个list_save用来保存预测的结果。
在这里插入图片描述
把top5i[0](它官方的输出是输出前五个概率最高的分类,这里我们只取第一个)放进list_save。
在这里插入图片描述
读取sample_submission.csv文件里的Label标签并覆盖结果。这里需要注意的是yolov5读取文件路径进行排序时,前面是有字符串的,也就是说不会按照正常数字顺序进行排序,是例如1,10,100这样一位一位去排序,所以顺序是乱的,需要接下来再处理一下。
我们先预测,在命令行输入以下命令,最后得到sub.csv文件。

python classify/predict.py --weights best.pt --source image/ --nosave 

–weights指定权重,–source后面直接跟了一个文件夹,下面是所有的图片,–nosave是不保存图片。
然后我们把classify文件夹下生成的sub.csv文件取出来继续读取处理,总体思想是模拟前面有str的排序,然后用正则表达式把数字取出来覆盖sub.csv中的序号列,再整个排序,就得到了正确的结果:

import re
import pandas as pd
unorder_df = pd.read_csv('sub.csv')
list_a=[]
for i in range(0,28000):
    list_a.append('image'+str(i)+'.png')
list_b = sorted(list_a) #模拟yolov5文件路径排序
list_c = []
for i in list_b:
    x = re.findall("\d+", i) #只匹配数字
    x = int(x[0]) #从str转换为数字
    list_c.append(x + 1) #加一是因为序号是从1开始的
unorder_df['ImageId']=list_c
df = unorder_df.sort_values(by=['ImageId']) #根据序号列排序
df.to_csv('sub2.csv',index=None)

上传结果

返回kaggle点击submit predictions提交sub2.csv:
在这里插入图片描述
在这里插入图片描述
可以看到准确率非常高哈,当然本次实验还是有不严谨的地方,那就是没有用kaggle提供的训练集训练,用的是yolov5自动下载的训练集,说不定这个训练集和测试集有重合的地方。

  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
告知:需要学习YOLOv4进行TT100K数据集上中国交通标志识别的学员请前往(1) Ubuntu系统《YOLOv4目标检测实战:中国交通标志识别》课程链接:https://edu.csdn.net/course/detail/29362(2)《Windows版YOLOv4目标检测实战:中国交通标志识别》课程链接:https://edu.csdn.net/course/detail/29363在无人驾驶中,交通标志识别是一项重要的任务。本课程中的项目以美国交通标志数据集LISA为训练对象,采用YOLOv3目标检测方法实现实时交通标志识别。具体项目过程包括包括:安装Darknet、下载LISA交通标志数据集、数据集格式转换、修改配置文件、训练LISA数据集、测试训练出的网络模型、性能统计(mAP计算和画出PR曲线)和先验框聚类。YOLOv3基于深度学习,可以实时地进行端到端的目标检测,以速度快见长。本课程将手把手地教大家使用YOLOv3实现交通标志的多目标检测。本课程的YOLOv3使用Darknet,在Ubuntu系统上项目演示。 Darknet是使用C语言实现的轻型开源深度学习框架,依赖少,可移植性好,值得深入学习和探究。除本课程《YOLOv3目标检测实战:交通标志识别》外,本人推出了有关YOLOv3目标检测的系列课程,请持续关注该系列的其它课程视频,包括:《YOLOv3目标检测实战:训练自己的数据集》《YOLOv3目标检测:原理与源码解析》《YOLOv3目标检测:网络模型改进方法》另一门课程《YOLOv3目标检测实战:训练自己的数据集》主要是介绍如何训练自己标注的数据集。而本课程的区别主要在于学习对已标注数据集的格式转换,即把LISA数据集从csv格式转换成YOLOv3所需要的PASCAL VOC格式和YOLO格式。本课程提供数据集格式转换的Python代码。请大家关注以上课程,并选择学习。下图是使用YOLOv3进行交通标志识别的测试结果
Kaggle YOLOv5是一个用于目标检测和分类的开源算法和代码。YOLOv5最初一个著名的目标检测算法,但从2022年8月更新的YOLOv5 v6.2版本开始,它也支持分类功能。该算法在GitHub上有一个专门的仓库,您可以从以下链接下载代码:https://github.com/ultralytics/yolov5。 为了使用Kaggle YOLOv5,您可以将代码库克隆到Kaggle中。您可以在命令行中执行以下命令: 1. 初始化Git仓库:!git init 2. 克隆YOLOv5项目:!git clone https://github.com/ultralytics/yolov5.git YOLOv5分类模型可以通过以下几个步骤来构建数据集: 1. 创建文件夹:根据需要的类别数,创建相应数量的文件夹。例如,如果您有4个类别,可以创建4个文件夹,每个文件夹代表一个类别。 2. 将图像分配到文件夹:将属于每个类别的图像分别分配到相应的文件夹中。确保每个文件夹只包含属于该类别的图像。 3. 准备训练和验证数据集:在文件夹结构中,创建训练集和验证集文件夹,并将相应类别的图像分配到这些文件夹中。训练集用于训练模型,验证集用于评估模型在独立数据上的性能。 4. 开始训练:使用提供的训练脚本和参数,执行训练脚本来训练YOLOv5模型。您需要指定模型、数据集、训练次数和项目保存路径等参数。例如,可以使用以下命令来执行训练脚本: !python /kaggle/working/yolov5-yuan/classify/train.py --model yolov5s-cls.pt --data /kaggle/input/f1-msr/f1_msr --epochs 10 --project runs 在训练过程中,您可以关注top1-acc和top5-acc这两个指标,它们分别表示模型的单一类别预测准确率和前五类别预测准确率。其中,top5-acc应该始终为1,因为您的数据集中只有4个类别。 验证模型的步骤如下: 1. 使用验证脚本和训练完成的权重文件执行验证:!python /kaggle/working/yolov5-yuan/classify/val.py --weights runs/exp5/weights/best.pt --data /kaggle/input/f1-msr/f1_msr 以上是使用Kaggle YOLOv5进行目标分类的简要步骤和说明。请根据您的具体需求和数据集进行相应的调整和操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [使用Kaggle免费GPU训练自己的数据集——以YOLOv5分类模型示例](https://blog.csdn.net/qq_53229073/article/details/130942981)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值