当前位置: 首页 > article >正文

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

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 YOLO

if __name__ == "__main__":
    # 显示当前设备是GPU设备还是CPU
    device = "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.kler.cn/a/411908.html

相关文章:

  • 基于vite创建的react18项目的单元测试
  • 使用ENSP实现默认路由
  • 网络协议——BGP(边界网关协议)全网最详解
  • docker run m3e 配置网络,自动重启,GPU等 配置渠道要点
  • Spring Boot 实战:基于 Validation 注解实现分层数据校验与校验异常拦截器统一返回处理
  • Spire.PDF for .NET【页面设置】演示:打开 PDF 时自动显示书签或缩略图
  • 《气味传感器:嗅觉科技的新前沿》
  • LeetCode题练习与总结:替换后的最长重复字符--424
  • 使用 Jina Embeddings v2 在 Elasticsearch 中进行后期分块
  • React Native 应用程序测试指南
  • 网络安全:攻击和防御练习(全战课), DDos压力测试
  • shodan(7)
  • upload-labs-master第12关详细教程
  • 使用Go 语言连接并操作 MySQL 数据库
  • python+django5.1+docker实现CICD自动化部署springboot 项目前后端分离vue-element
  • Jackson、Gson、FastJSON三款JSON利器比拼
  • 用web前端写出一个高校官网
  • iOS 19 重大更新泄露,将带来更“聪明”的 Siri 挑战 ChatGPT
  • sqlite3自动删除数据的两种设置方式记录
  • 【单点知识】基于PyTorch进行模型部署
  • Java基础夯实——2.7 线程上下文切换
  • IDEA实现Oracle连接以及基本的增删改查操作步骤详解
  • 网易游戏用户流失预测实践
  • 【公益接口】不定时新增接口,仅供学习
  • 高校宿舍节能用电现状及智慧监管平台构建
  • javax.xml.ws.soap.SOAPFaultException: ZONE_OFFSET