前言

众所周知,YOLOv5是一款优秀的目标检测模型,但实际上,它也支持图像分类。在6.1版本中,就暗留了classify这个参数,可以在做检测的同时进行分类。

官方仓库地址:https://github.com/ultralytics/yolov5/releases

更新概览

在几天前刚新出的6.2版本中,直接将分类功能单独剥离开来,使其能够直接训练图像分类数据集。

先看看官网公示的更新说明:

  • 分类功能
    新增分类功能,并提供各模型在ImageNet上训练过的预训练模型
  • ClearML日志记录
    与开源实验跟踪器ClearML集成。使用pip安装clearml将启用集成,并允许用户跟踪clearml中的每个训练运行。
  • Deci.ai优化
    在Deci上单击一次即可自动编译和量化YOLOv5,从而获得更好的性能
  • GPU导出基准
    可以使用python utils/benchmarks.py --weights yolov5s.pt --device 0来导出Benchmark (mAP and speed)
  • 训练可完全复现
    torch>=1.12.0的单GPU YOLOv5训练现在完全可再现,并且可以使用新的–seed参数(默认seed=0)
  • 优化Apple炼丹体验
    Apple Metal Performance Shader(MPS:苹果炼丹工具) 支持Apple M1/M2设备

在这些更新中,我最关注的是图像分类功能,那么本篇就来尝试跑通一下。

分类模型效果

下图是官方贴出来的各分类模型对比图,在可以看到在相同的数据集上,YOLOv5x-cls模型取得了最佳的准确率。下列这些模型官方均提供预训练权重。

工程结构

首先看新版本的工程结构,和前几个版本差别不大。主要是多了一个classify文件夹,包含图像分类训练,验证,检测三个函数。

训练结果会保存在runs/train-cls文件夹中。

数据集下载

train.py中,提供这段数据集下载程序段:

# Download Dataset
with torch_distributed_zero_first(LOCAL_RANK), WorkingDirectory(ROOT):data_dir = data if data.is_dir() else (DATASETS_DIR / data)if not data_dir.is_dir():LOGGER.info(f'\nDataset not found ⚠️, missing path {data_dir}, attempting download...')t = time.time()if str(data) == 'imagenet':subprocess.run(f"bash {ROOT / 'data/scripts/get_imagenet.sh'}", shell=True, check=True)else:url = f'https://github.com/ultralytics/yolov5/releases/download/v1.0/{data}.zip'download(url, dir=data_dir.parent)s = f"Dataset download success ✅ ({time.time() - t:.1f}s), saved to {colorstr('bold', data_dir)}\n"LOGGER.info(s)

如果指定的数据集路径下没有数据集,会从官方仓库v1.0的版本中进行下载。这里我建议是手动去进行下载,受限于网络情况,自动下载很容易失败。

可以看到,在官方仓库v1.0版本中的Assets中包含了很多数据集,我下载了最经典的mnist的数据集来做测试。


下载完之后,需要在本地进行解压,解压之后的数据集格式如下图所示:

禁用wandb

训练之前,可以选择禁用wandb,wandb是和tensorboard类似的数据记录平台,为了防止报错,可以用下面的方式进行禁用。

在终端环境中输入wandb disabled

同时在utils/loggers/wandb/__init__.py中添加wandb = None

try:import wandbassert hasattr(wandb, '__version__')  # verify package import not local dirif pkg.parse_version(wandb.__version__) >= pkg.parse_version('0.12.2') and RANK in {0, -1}:try:wandb_login_success = wandb.login(timeout=30)except wandb.errors.UsageError:  # known non-TTY terminal issuewandb_login_success = Falseif not wandb_login_success:wandb = None
except (ImportError, AssertionError):wandb = None
# 添加以下语句
wandb = None

utils/loggers/wandb/wandb_utils.py中同样添加

try:import wandbassert hasattr(wandb, '__version__')  # verify package import not local dir
except (ImportError, AssertionError):wandb = None
# 添加以下语句
wandb = None

开始训练

train.py中主要修改下面一些超参数,基本和目标检测类似,值得注意的是图像分类训练中,并不需要指定模型结构,模型结构完全包含在了预训练模型中,使用起来更为方便。如果需要深入了解YOLO模型是如何引出分类的,可以导出ONNX模型,再使用netron查看。


训练完成之后,会自动调用测试程序,绘制测试结果。


可以看到,我只使用YOLOv5-cls模型训练了10个epoch,就在mnist上取得了不错的效果。

模型预测

模型预测更简单,指定训练好的权重weights,输入图像source,图像尺寸imgsz即可。

模型会从高到低输出前5个类别的概率值。

代码备份

本次实验代码包含YOLOv5-6.2版本提供的所有预训练权重和mnist数据集。
备份地址:https://pan.baidu.com/s/1msi5qaE82nEbCha641lkPA?pwd=8888

【图像分类】YOLOv5-6.2全新版本:支持图像分类相关推荐

  1. Pr2022 视频剪辑软件MAC版正式更新,全新版本支持M1,今天详细介绍pr2022如何安装使用?

    Adobe Premiere Pro 2022是由Adobe公司全新推出的一款视频剪辑处理软件,软件拥有多种创意工具,能够与其他Adobe应用程序和服务的紧密集成,配合Adobe Sensei的强大功 ...

  2. 时速云发布微服务产品 TMF V5.6.0 全新版本,支持独立部署,简化企业微服务架构

    互联网应用海量用户.快速迭代.不间断服务以及流量突增等业务特征促进技术架构由传统集中式向分布式和微服务架构逐步演进. 考虑到越来越多企业将微服务搬到云上,由于框架异构导致微服务治理成本指数级增加.多云 ...

  3. okgo 缓存html,okhttp-OkGo OkHttpUtils-2.0.0 升级后改名 OkGo,全新完美支持 RxJava,比 Retro @codeKK Android开源站...

    工程结构全新优化 支持 RxJava 支持 RxJava2 支持自定义缓存策略 支持下载管理 支持上传管理 该库部分思想借鉴了以下项目: 在此特别感谢上述作者,喜欢原作的可以去使用原项目.同时欢迎大家 ...

  4. 华为云GuassDB(for Redis)发布全新版本推出:Lua脚本和SSL连接加密

    摘要:9月8日,华为云GuassDB(for Redis)正式推出全新版本.新版本内核带来性能提升.无损升级.慢日志统计等多维度产品体验,同时推出Lua脚本和SSL连接加密两大重要功能,让业务设计更加 ...

  5. 正式发布python版本的年份_飞书全新版本π正式发布 高效便捷的团队沟通新工具...

    11月18日,飞书未来无限大会正式开幕,作为字节跳动旗下办公协作平台,飞书的第一场产品发布会,不仅有诸多新功能首度亮相,而且众多重磅行业客户也共聚一堂,多元视角探讨飞书新生态.飞书总裁张楠表示,飞书既 ...

  6. 【目标检测】英雄联盟能用YOLOv5实时目标检测了 支持onnx推理

    目录 一.项目介绍 二.项目结构 三.准备数据 1.数据标注 2.数据转换格式 四.执行训练 1.anchors文件 2.标签文件 3.预训练模型 4.训练数据 5.修改配置 6.执行训练 五.执行预 ...

  7. java开发工具IntelliJ IDEA全新版本V2022.2更新详情(二)

    本文主要介绍IntelliJ IDEA V2022.2新功能第二部分的介绍. IntelliJ IDEA官方正版下载 框架和技术 在 Spring 6 中支持新的声明式 HTTP 客户端 Spring ...

  8. 你没玩过的全新版本!Win10这些骚操作你知多少

    你没玩过的全新版本!Win10这些骚操作你知多少 [PConline技巧]不知不觉,Win10与我们相伴已经整整四个年头了,从最开始的组团抗拒到现在的默默接受,个中滋味相信谁心里都有个数.近日微软开始 ...

  9. OkHttpUtils-2.0.0 升级后改名 OkGo,全新完美支持 RxJava,比 Retrofit 更简单易用。

    okhttp-OkGo 项目地址:jeasonlzy/okhttp-OkGo 简介:OkHttpUtils-2.0.0 升级后改名 OkGo,全新完美支持 RxJava,比 Retrofit 更简单易 ...

最新文章

  1. 什么是数据中台?全面解读数据中台
  2. 《迷人的8051单片机》----3.4 程序
  3. python whl是什么文件
  4. 你在python项目中遇到的问题_魔法02 Python环境可能遇到的问题及解决方案
  5. 还在懵懂状态?给处于初/中级阶段的数据分析师的两三点建议
  6. html5代码_干货篇!零基础学习HTML5要用到的6款开发工具
  7. C#编程-Access数据库的简单应用
  8. 系统备份是对计算机硬件进行维户吗,计算机系统维护毕业论文_精品.doc
  9. 项目如何用jetty运行_如何用Cloudbase Framework部署一个Vue项目?
  10. php数组出栈,php array_pop()数组函数将数组最后一个单元弹出(出栈)
  11. ios 旋转屏幕试图切换_总结iOS App开发中控制屏幕旋转的几种方式
  12. absolute和relative的区别
  13. 运营之光:我的互联网运营方法论与自白学习总结(思维导图)
  14. Logit-Probit:非线性模型中交互项的边际效应解读
  15. 盘点历史上曾肆虐一时的电脑病毒,你知道几种?
  16. Maxent模型预测
  17. 一个有意思的404页面
  18. 拓嘉启远电商:修改了拼多多关键词,影响大吗
  19. 石油远程《机械设计》第二次在线作业
  20. 巴塞尔协议中的计算公式_在巴塞尔协议I 中,资本充足率的计算仅对( )加权资产。...

热门文章

  1. 多包管理工具lerna搭建项目---基本常用命令
  2. pv uv vv cv 的区别
  3. 检测按键正确的小游戏
  4. 学习笔记-echarts自定义背景图片
  5. TienLen游戏模型、算法,类似斗地主游戏算法
  6. Linux操作手机端
  7. JavaScript中常用数组方法总结
  8. crontab任务不会执行解决方案(No MTA installed, discarding output)
  9. AWS认证是什么意思?怎么报考?
  10. 抢先体验 Ubuntu 22.04 Jammy Jellyfish