三、计算机视觉_07YOLO图像分类

ops/2024/11/28 2:13:03/

0、前言

在《LeNet5及手势识别案例》文章中,我们基于LeNet-5网络结构,根据【gestures】手势数据集做了模型训练和预测

YOLO作为目前CV领域的扛把子,分类、检测等任务样样精通,本文将根据之前的gestures】手势数据集,换用YOLO来做手势预测的分类任务,看看效果如何

1、准备工作

要进行模型训练,首先要导入对应的数据集

安装YOLO之后,通常会有一个默认的数据集路径,运行YOLO程序时也是去对应的路径下找数据集,如果找不到,则程序也会无法正常跑下去,需要自己每次手动指定数据集的路径,这样就会相对麻烦,也不够规范

因此,我们需要找到这个默认数据集路径,将其调整到电脑中合适的目录下,方便后面使用

下面以windows电脑为例,介绍查找和调整这个路径的方法:

Step1: 依次先后按下 win + R 键,打开windows运行窗口

Step2: 输入%appdata%,然后按下回车键或点击【确定】按钮

Step3: 找到Ultralytics文件夹,点击进入

Step4: 找到setting文件(根据版本不同,可能叫做setting.yaml,也可能叫做setting.json),打开文件,并对datasets_dir配置进行编辑,改成合适的目录(一般选一个磁盘比较大的目录即可,方便放很多以后要用的数据集)

在做完上述操作之后,将手势数据集放置到上面配置好的默认数据集目录下即可

2、模型训练

依旧是三行代码(from、YOLO()、model.train())打天下

# 解决OMP问题
import os
os.environ['KMP_DUPLICATE_LIB_OK']='True'# 1. 引入 YOLO 
from ultralytics import YOLO# 2. 加载/从零构建模型
model = YOLO("yolo11n-cls.yaml") # 3. 训练模型
if __name__ == '__main__':# data="gesture": 指定训练数据集的路径和名称# epochs=10: 设置训练多少轮(10轮)# imgsz=128: 设置输入图像的大小(128*128像素)# batch=8: 设置每一轮训练中每一批次多少个图像(10轮,每轮每批次8张图)results = model.train(data="gesture", epochs=10, imgsz=128, batch=8)

训练完成之后,会自动保存best.pt,可根据训练过程的日志来查看其路径(也可以一个一个找,一般在最后一个trainxx文件夹里面)

3、页面展示

新建一个modelApp.py文件,将下面代码复制粘贴到文件中,并将上面得到的best.pt文件放置于modelApp.py文件的同级别目录

import streamlit as st
import torch
from PIL import Image
from ultralytics import YOLOif __name__ == "__main__":# 显示当前设备是GPU设备还是CPUdevice = "cuda" if torch.cuda.is_available() else "cpu"st.write(f"当前设备是:{device}")# 加载模型model = YOLO("best.pt")# 上传一张图片uploaded_img = st.file_uploader("请上传一张图片", type=["png", "jpg", "jpeg"])# 将上传的图像文件保存到临时文件if uploaded_img is not None:with open(file="temp_img.jpg", mode="wb") as f:f.write(uploaded_img.getvalue())img_path = "temp_img.jpg"if img_path:# 加载训练好的best.pt模型pred = model(img_path)print(pred)# 显示上传好的图片img = Image.open(fp=img_path)st.image(image=img, caption="上传的图片", use_column_width=True)# 使用plot方法可视化pred_img = pred[0].plot()st.image(pred_img, caption="预测结果", use_column_width=True)

使用以下命令运行modelApp.py,通过streamlit页面进行使用

streamlit run modelApp.py

效果展示(显示了每个可能的手势对应的概率),比LetNet-5的准确率要高(对于非纯色背景的手势更友好,可以尝试拍自己手掌试一试)


http://www.ppmy.cn/ops/137235.html

相关文章

英文版本-带EXCEL函数的数据分析

一、问题: 二、表格内容 三、分析结果 四、具体的操作步骤: 销售工作表公式设计与数据验证 类别(Category)列公式: 在Category列(假设为D列),根据ProductCode在Catalogue工作表中查找…

unity使用笔记

Build and Run, Player settings里面的设置或需要修改的内容如下: unityhub license过期解决办法:先登录账号,然后打开项目,跳转选择get free personal license即可使用,总之,要先登录,再弄li…

YB2503HV:高效率降压IC,助力电动车、太阳能设备等领域的能源转换

今天我要向大家介绍一款引人注目的产品—— YB2503HV 100V 3A SOP8内置MOS 高效率降压IC。这款单片集成芯片具备可设定输出电流的开关型降压恒压驱动器功能,可广泛应用于电动车、太阳能设备、电子电池充电等领域。让我们一起来看看它的特点和应用吧! 首先…

IM项目-----ElasticSearch

文章目录 前言ES介绍建立索引创建索引 新增文档删除文档修改文档查询文档ES和Mysql数据如何保证一致 前言 ES介绍 在IM项目中通过引入ES,支持了用户搜索和历史消息的搜索。传统的关系型数据库主要是用于事务的复杂操作,对于这种需要模糊匹配的查询语句,…

Java 对象头、Mark Word、monitor与synchronized关联关系以及synchronized锁优化

1. 对象在内存中的布局分为三块区域: (1)对象头(Mark Word、元数据指针和数组长度) 对象头:在32位虚拟机中,1个机器码等于4字节,也就是32bit,在64位虚拟机中&#xff0…

跨子网通信的具体流程

TCP/IP 数据包的封装(发送方): TCP 封装:应用程序的数据被 TCP 协议封装为一个 TCP 数据段,包含序列号等信息。IP 封装:TCP 数据段被 IP 协议封装为一个 IP 数据包,包含源 IP 和目标 IP 地址。M…

在Linux中备份msyql数据库和表的详细操作

目录 前情提要 一、备份mysql数据库 原库展示 (一)新建一个数据库 (二)在linux根目录下找个位置暂时存放 (三)临时sql还原真正存放到库中 (四)查看是否备份成功 备份库成功展示 二、备份表的操作 ​编辑 原表emp展示 (一)快速新建一个原结构相同的表 (二)原表所…

一文详细了解websocket应用以及连接断开的解决方案

文章目录 websocketvite 热启动探索websocket -心跳websocket 事件监听应用过程中问题总结 websocket Websocket简介 定义和工作原理 Websocket是一种在单个TCP连接上进行全双工通信的协议。与传统的HTTP请求 - 响应模式不同,它允许服务器主动向客户端推送数据。例…