(1)机器学习小白入门YOLOv :从概念到实践
(2)机器学习小白入门 YOLOv:从模块优化到工程部署
(3)机器学习小白入门 YOLOv: 解锁图片分类新技能

前言

YOLOv 算法通常被用于目标检测任务,但通过对其进行适当的调整和改造,也能够满足图片分类的需求。接下来,我将基于之前 YOLOv 的开发框架,详细介绍如何利用它实现图片分类。

一、核心思路转换

在目标检测任务中,YOLOv 会输出目标的位置和类别;而图片分类只需要判断整张图片属于哪个类别。我们可以将 YOLOv 的输出进行简化处理:不再关注目标的位置信息,仅提取置信度最高的类别作为图片的分类结果 。

在这里插入图片描述

二、代码模块调整

2.1 模型调用与推理模块优化

在原有的模型调用和推理代码基础上,我们需要修改结果解析部分。原代码中解析结果时会获取所有检测到的目标信息,现在我们只需要获取置信度最高的类别。

from ultralytics import YOLO
import cv2
import torch# 加载预训练模型
model = YOLO('yolov8n.pt')# 读取图像
image = cv2.imread('test.jpg')
# 预处理:调整尺寸、归一化、维度转换
input_tensor = torch.from_numpy(image).unsqueeze(0).float() / 255.0
input_tensor = input_tensor.permute(0, 3, 1, 2)  # NHWC -> NCHW# 执行推理
results = model.predict(source=input_tensor, show=False)# 解析结果,获取置信度最高的类别
max_score = 0
predicted_class = None
for result in results:boxes = result.boxes.xyxy.tolist()scores = result.boxes.conf.tolist()classes = [result.names[int(cls)] for cls in result.boxes.cls.tolist()]for score, cls in zip(scores, classes):if score > max_score:max_score = scorepredicted_class = clsprint(f"图片分类结果为:{predicted_class},置信度:{max_score:.2f}")

2.2 训练数据集与配置修改

如果需要训练自己的模型用于图片分类,数据集准备和配置环节也需要相应调整。

  • 数据集标注:标注工具仍可使用 LabelImg,但每张图片仅需标注一个类别,且标注框应覆盖整张图片 。标注生成的.txt文件中,每行格式为类别索引 0.5 0.5 1.0 1.0,其中0.5 0.5 1.0 1.0表示标注框覆盖整张图片。

  • 数据集配置:在data.yaml文件中,nc设置为实际的类别数量,names列表填写对应的类别名称。同时,确保训练集、验证集和测试集路径正确指向处理好的图片和标注文件。

train: path/to/train/images  # 训练集图像路径
val: path/to/val/images      # 验证集图像路径
test: path/to/test/images    # 测试集图像路径nc: 5                      # 假设图片分类有5个类别
names: ['class1', 'class2', 'class3', 'class4', 'class5']  # 类别名称列表

三、训练与评估调整

3.1 训练参数设置

训练参数配置与目标检测类似,但由于任务性质改变,部分参数可根据实际情况微调。例如,学习率、训练轮数等可以在原基础上进行尝试性调整,以获得更好的分类效果。

python train.py \
--weights yolov8n.pt \
--data data.yaml \
--epochs 50 \
--batch 32 \
--lr0 0.0005  # 调整后的初始学习率

3.2 模型评估指标

评估模型时,不再使用目标检测的mAP@0.5:0.95指标,而是采用图片分类常用的准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1 值等指标 。可以通过编写自定义脚本,加载测试集数据进行预测,然后计算这些指标来评估模型的分类性能。

# 读取测试集标签​
with open(test_label_file, 'r') as f:​max_score = 0​predicted_class = Nonefor result in results:​scores = result.boxes.conf.tolist()​classes = [result.names[int(cls)] for cls in result.boxes.cls.tolist()]for score, cls in zip(scores, classes):if score > max_score:​max_score = score​predicted_class = cls​predicted_labels.append(predicted_class)​
​
# 计算评估指标​
accuracy = accuracy_score(true_labels, predicted_labels)​
precision = precision_score(true_labels, predicted_labels, average='weighted')​
recall = recall_score(true_labels, predicted_labels, average='weighted')​
f1 = f1_score(true_labels, predicted_labels, average='weighted')​
​
print(f"准确率: {accuracy:.4f}")print(f"精确率: {precision:.4f}")print(f"召回率: {recall:.4f}")print(f"F1值: {f1:.4f}")
  1. 遍历测试集的每一张图片,进行预处理后输入模型进行预测,提取置信度最高的类别作为预测结果。

  2. 最后,使用sklearn库中的函数计算准确率、精确率、召回率和 F1 值,并打印输出评估结果。

3.3核心评估指标详解​

3.3.1 准确率(Accuracy)​

准确率是最直观的评估指标,它表示模型正确分类的样本数占总样本数的比例。
在图片分类中,准确率反映了模型对所有样本的整体判断正确程度,但当数据集中类别不均衡时,准确率可能会产生误导。例如,数据集中 90% 是类别 A,10% 是类别 B,模型将所有样本都预测为类别 A,虽然准确率很高,但模型实际上无法识别类别 B。​

3.3.2 精确率(Precision)​

精确率衡量的是模型预测为正类的样本中,真正为正类的比例。


精确率关注的是模型预测结果的准确性。在图片分类中,如果精确率较低,说明模型容易将其他类别误判为目标类别,导致误报较多。​

3.3.3 召回率(Recall)​

召回率也称为灵敏度或真正率,它表示实际为正类的样本中,被模型正确预测为正类的比例。召回率反映了模型对正类样本的捕捉能力。在图片分类中,召回率低意味着模型容易遗漏正类样本,出现漏报的情况。​

3.3.4 F1 值​

F1 值是精确率和召回率的调和平均数,综合考虑了精确率和召回率两个指标,能够更全面地评估模型性能。F1 值越高,说明模型在精确率和召回率之间取得了较好的平衡
通过上述指标和脚本,能够全面、准确地评估基于 YOLOv 的图片分类模型性能,为模型的优化和改进提供有力依据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/913520.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/913520.shtml
英文地址,请注明出处:http://en.pswp.cn/news/913520.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

主机安全-开源HIDS字节跳动Elkeid使用

安装好elkeid后就开始接入主机和k8s集群,安装文档-----主机安全-开源HIDS字节跳动Elkeid安装-CSDN博客 1、接入主机 在系统管理-----安装配置-----复制命令------在目标机器上执行这段命令 执行成功后主机就会自动接入 2、接入k8s集群 在k8s主机上执行脚本&#x…

【vue】用conda配置nodejs,一键开通模版使用权

特此鸣谢我的好同学重中之重的特级教学,非常之好用一、conda环境下载安装二、创建包含nodejs的conda环境创建一个新环境:conda create -n 【自定义环境名字】 python3.9 conda create -n my_nodejs_env python3.9激活新环境:conda activate【…

深度学习--tensor(创建、属性)

一、torch概念1.1简介pytorch简称torch,意为深度学习框架。它使用张量(tensor)来表示数据,可以轻松地处理大规模数据集,且可以在GPU上加速。pytorch基本功能:自动微分、自动求导等。1.2安装官网获得下载命令…

【内存】Linux 内核优化实战 - net.ipv4.tcp_max_tw_buckets

目录net.ipv4.tcp_max_tw_buckets 详解一、基本概念二、核心作用三、默认值四、调整场景需增大参数的场景需减小参数的场景五、查看与修改方法1. 查看当前值2. 临时修改(重启失效)3. 永久修改(重启生效)六、注意事项总结net.ipv4.…

短剧系统开发定制全流程解析:从需求分析到上线运营

一、短剧行业现状与系统开发价值短剧作为一种新兴的内容形态,近年来呈现爆发式增长态势。2023年中国短剧市场规模已突破300亿元,用户规模超过5亿,这种以"快节奏、强剧情、低成本"为特点的内容形式正在重塑数字娱乐产业格局。短剧系…

各服务器厂商调整BIOS睿频教程

调整BIOS睿频选项汇总:1、华为服务器:2、华为服务器V53、浪潮服务器4、浪潮服务器M45、 曙光服务器5.1 曙光I620-G205.2 曙光I620-G306、联想服务器(650系列)650系列的服务器对照截图信息修改对应项,修改为截图里的选项…

PyTorch笔记3----------统计学相关函数

1.基础函数 import torch a torch.rand(2,2) print("a:\n",a) print(########################) print("平均值:\n",torch.mean(a,dim0)) print("总和:\n",torch.sum(a,dim0)) print("所有元素的积:\n",torch.prod(a,dim0)) print(&…

【Prometheus】通过tar包部署单机版Prometheus 和 Pushgateway

在ECS(Elastic Compute Service)机器上通过tar包部署 Prometheus 和 Pushgateway,并配置 Prometheus 采集 Pushgateway 的数据,是一个常见的监控部署任务。以下是详细的步骤说明:🧩 环境准备 操作系统&…

Matlab 频谱分析 (Spectral Analysis)

文章目录1. 信号预处理 - 去直流分量2. 快速傅里叶变换(FFT)3. 功率谱密度(PSD)计算4. 主频率检测5. 谱质心计算6. 对数谱显示完整的信号处理流程实际应用示例1. 信号预处理 - 去直流分量 data data - mean(data);数学原理&…

【实时Linux实战系列】实时以太网与 TSN 基础

在实时系统中,网络通信的实时性和可靠性是确保系统正常运行的关键。实时以太网和时间敏感网络(TSN)技术为实时数据传输提供了强大的支持。TSN通过一系列协议和机制,确保数据能够在预定的时间内可靠传输,满足工业自动化…

茶颜悦色JAVA面试分享

1、自我介绍项目2、设计一个爆款饮品秒杀系统:如何解决“幽兰拿铁”上新时的瞬时10万QPS?从缓存、限流、库存扣减到订单创建的全流程设计。3、订单超市未支付自动取消:如何实现高精度(30分钟精确到秒)且低延迟的订单状…

OneCode图表配置速查手册

前言 在数据可视化日益成为业务决策核心驱动力的今天,高效、灵活的图表配置系统已成为开发人员不可或缺的工具。OneCode图表组件凭借其丰富的图表类型与精细化的配置能力,为开发者提供了构建专业数据可视化界面的完整解决方案。然而,随着图表…

二维码驱动的独立站视频集成方案

一、独立站视频嵌入的技术挑战与架构设计 在独立站建设中,视频内容的集成面临着性能、安全与用户体验的三重挑战。传统直接嵌入方式会导致页面加载缓慢(平均增加3-5秒首屏时间)、服务器带宽消耗激增(单视频日均播放1000次约产生50…

【STM32】预分频因子(Prescaler)和重装载值(Reload Value)

在 STM32 的 独立看门狗(IWDG) 中(结合上文【STM32】独立看门狗(提供完整实例代码)),为了控制看门狗的超时时间(溢出时间),我们主要设置两个参数:…

从0到1搭建同城O2O外卖平台:外卖系统源码架构解析与实战指南

当下,越来越多的创业者、品牌连锁商家,甚至社区集群,开始布局属于自己的本地外卖平台。而对于软件开发者和技术团队而言,如何从0到1搭建一套可落地、可扩展、可持续运营的外卖系统,成为了一个既现实又挑战性十足的话题…

MySQL 8.0 OCP 1Z0-908 题目解析(16)

题目61 Choose the best answer. Examine this command, which executes successfully: mysqlbackup --defaults-file/backups/server-my.cnf --backup-dir/backups/full copy-backWhich statement is true about the copy-back process? ○ A) It restores files from the da…

WSL命令

以下是 WSL&#xff08;Windows Subsystem for Linux&#xff09;的常用命令大全&#xff0c;涵盖安装、管理、网络、文件交互等场景&#xff0c;方便快速查阅和使用&#xff1a;1. 安装与版本管理命令说明wsl --install默认安装 WSL 和 Ubuntuwsl --install -d <发行版名&g…

AI语音训练——GPT-SoVITS(GSV)

链接说明 github项目地址&#xff1a;RVC-Boss/GPT-SoVITS: 1 min voice data can also be used to train a good TTS model! (few shot voice cloning) 项目中文说明书&#xff1a; GPT-SoVITS指南//项目说明书里也有在线使用的链接 原项目作者B站教学视频&#xff1a;耗时两个…

事件委托版本tab栏切换

事件委托&#xff1a;是JavaScript中注册事件的常用技巧&#xff0c;也称事件委派、事件代理简单理解&#xff1a;原本需要注册在子元素的事件委托给父元素&#xff0c;让父元素担当事件监听的职务优点&#xff1a;减少注册次数&#xff0c;可提高程序性能原理&#xff1a;事件…

FLAN-T5:规模化指令微调的语言模型

摘要 在将数据集表述为指令的形式上进行语言模型微调&#xff0c;已被证明能够提升模型性能及其对未见任务的泛化能力。本文探讨了指令微调&#xff0c;特别关注以下三个方面&#xff1a;(1) 任务数量的扩展&#xff0c;(2) 模型规模的扩展&#xff0c;以及 (3) 基于链式思维&…