使用YOLOV5进行手势识别(详细教程)

您所在的位置:网站首页 手部动作手绘 使用YOLOV5进行手势识别(详细教程)

使用YOLOV5进行手势识别(详细教程)

2023-12-16 10:35| 来源: 网络整理| 查看: 265

yolov5的配置相对简单,但是网上大部分博客都没有仔细介绍具体步骤,本文将详细介绍YOLOv5在windows10系统下的环境配置的全过程,以及yolov5使用的一些细节,以及如何制作和训练自己的数据集。

目录

一.搭建环境

二.安装配置

1.安装anconda3

2.安装pytorch

3.安装pycharm

4.下载yolov5资源包

 三.制作训练自己的数据集

1.准备工作

2.训练自己的数据集

3.测试

4.手势识别

一.搭建环境

1.本项目所需环境为:pycharm+anconda3+pytorch

2.版本要求:YOLOV5官方要求Python>=3.7;pytorch>=1.6

                   CUDA:10.2(可在cmd下查询自己电脑的cuda版本)

       写作之前新手必看:

    CUDA

CUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。 开发人员可以使用C语言来为CUDA™架构编写程序,C语言是应用最广泛的一种高级编程语言。所编写出的程序可以在支持CUDA™的处理器上以超高性能运行。CUDA3.0已经开始支持C++和FORTRAN。

   PyTorch

PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序。它是一个基于Python的可续计算包,提供两个高级功能:1、具有强大的GPU加速的张量计算(如NumPy)。2、包含自动求导系统的深度神经网络。

二.安装配置 1.安装anconda3

       清华源下载,如图所示蓝色区域

下载完成后进行安装,安装过程将conda环境添加到系统环境中。

在conda中create Python3.7

2.安装pytorch

进入pytorch官网(PyTorch)选择适配自己电脑的下载链接

打开 anconda prompt,我们用conda指令创建一个虚拟环境叫做:pytorch

指令如下:

                conda create -n pytorch python=3.7

因为我创建过了所以他提示我是否打开,没有创建过的等他创建好后再打开。

输入指令:conda activate pytorch进入(pytorch)C:\Users\zhiyao>环境(根据自己创建的pytorch屋子所在地址),然后输入在pytorch官网复制的下载链接:

conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch

,等待安装完成即可。

 安装完成打开pycharm配置YOLOv5的项目环境。

3.安装pycharm

      下载Community版本的pycharm,然后进行安装,pycharm的安装教程网上有很多自行安装吧。

4.下载yolov5资源包

    下载地址如下:

GitHub - ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite

   下载zip文件并完成解压

 在pycharm中打开yolov5文件设置项目的Python解释器为我们conda环境下创建虚拟环境的pytorch(可以在anconda安装地址中找到)

5.安装labelImg

参考文章:Windows下深度学习标注工具LabelImg安装和使用指南 - 云+社区 - 腾讯云 (tencent.com)

 三.制作训练自己的数据集 1.准备工作

(1)安装项目所需要的packages,在项目终端下输入指令:pip install -r requirements.txt

其中,如果pycocotools安装失败我们可以安装 visual studio installer。下载链接:Microsoft C++ 生成工具 - Visual Studio

安装完成后我们继续在pycharm项目终端中输入指令:pip install pycocotools,即可解决问题。

我们还可以利用python库镜像下载:pip install pycocotools -i https://pypi.tuna.tsinghua.edu.cn/simple

(2)模型下载

官方链接:Releases · ultralytics/yolov5 · GitHub yolov5l.pt yolov5s.pt yolov5x.pt yolov5m.pt 将权重文件放入yolov5/weights文件夹下

(3)在yolov5目录下创建mydata文件夹(名字可以自定义),目录结构如下,将之前labelImg标注好的xml文件和图片放到对应目录下 mydata --images # 存放图片 --Annotations # 存放图片对应的xml文件 --ImageSets/Main #之后会在Main文件夹内自动生成train.txt,val.txt,test.txt和trainval.txt四个文件,存放训练/存放train.txt/val.txt/test.txt/trainval.txt文件。

例如:

 建立my_test.py文件(用于在ImageSets/Main下生成.txt文件):

# coding:utf-8 import os import random import argparse parser = argparse.ArgumentParser() #xml文件的地址,根据自己的数据进行修改 xml一般存放在Annotations下 parser.add_argument('--xml_path', default='Annotations', type=str, help='input xml label path') #数据集的划分,地址选择自己数据下的ImageSets/Main parser.add_argument('--txt_path', default='ImageSets/Main', type=str, help='output txt label path') opt = parser.parse_args() trainval_percent = 1.0 train_percent = 0.9 xmlfilepath = opt.xml_path txtsavepath = opt.txt_path total_xml = os.listdir(xmlfilepath) if not os.path.exists(txtsavepath): os.makedirs(txtsavepath) num = len(total_xml) list_index = range(num) tv = int(num * trainval_percent) tr = int(tv * train_percent) trainval = random.sample(list_index, tv) train = random.sample(trainval, tr) file_trainval = open(txtsavepath + '/trainval.txt', 'w') file_test = open(txtsavepath + '/test.txt', 'w') file_train = open(txtsavepath + '/train.txt', 'w') file_val = open(txtsavepath + '/val.txt', 'w') for i in list_index: name = total_xml[i][:-4] + '\n' if i in trainval: file_trainval.write(name) if i in train: file_train.write(name) else: file_val.write(name) else: file_test.write(name) file_trainval.close() file_train.close() file_val.close() file_test.close()

运行代码后在Main文件夹生成四个txt文档:

将数据集格式转换为yolo_txt格式,同时生成label标签 ,创建my_label.py文件。

# -*- coding: utf-8 -*- import xml.etree.ElementTree as ET import os from os import getcwd sets = ['train', 'val', 'test'] classes = ["A","B","C","D"] # 改成自己的类别 abs_path = os.getcwd() print(abs_path) def convert(size, box): dw = 1. / (size[0]) dh = 1. / (size[1]) x = (box[0] + box[1]) / 2.0 - 1 y = (box[2] + box[3]) / 2.0 - 1 w = box[1] - box[0] h = box[3] - box[2] x = x * dw w = w * dw y = y * dh h = h * dh return x, y, w, h def convert_annotation(image_id): in_file = open('F:\web\yolov5-master\mydata\Annotations\%s.xml' % (image_id), encoding='UTF-8') #改成自己数据存放的地址 out_file = open('F:\web\yolov5-master\mydata\labels\%s.txt' % (image_id), 'w') #同上 tree = ET.parse(in_file) root = tree.getroot() size = root.find('size') w = int(size.find('width').text) h = int(size.find('height').text) for obj in root.iter('object'): difficult = obj.find('difficult').text cls = obj.find('name').text if cls not in classes or int(difficult) == 1: continue cls_id = classes.index(cls) xmlbox = obj.find('bndbox') b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text), float(xmlbox.find('ymax').text)) b1, b2, b3, b4 = b # 标注越界修正 if b2 > w: b2 = w if b4 > h: b4 = h b = (b1, b2, b3, b4) bb = convert((w, h), b) out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n') wd = getcwd() for image_set in sets: if not os.path.exists('F:\web\yolov5-master\mydata\labels'): #同上 os.makedirs('F:\web\yolov5-master\mydata\labels') #同上 image_ids = open('F:\web\yolov5-master\mydata\ImageSets\Main\%s.txt' % (image_set)).read().strip().split() #同上 list_file = open('F:\web\yolov5-master\mydata\%s.txt' % (image_set), 'w') #同上 for image_id in image_ids: list_file.write(abs_path + 'F:\web\yolov5-master\mydata\images\%s.jpg\n' % (image_id)) #同上 convert_annotation(image_id) list_file.close()

运行后在mydata文件夹下生成labels文件夹和txt文件,labels中为不同图像的标注文件,

 

 (4)配置文件

在mydata文件夹下创建ABCD.yaml(名字可自定义)文件。

2.训练自己的数据集

 在train.py进行以下几个修改:

 以上参数解释如下: epochs:指的就是训练过程中整个数据集将被迭代多少次,显卡不行你就调小点。 batch-size:一次看完多少张图片才进行权重更新,梯度下降的mini-batch,显卡不行你就调小点。 cfg:存储模型结构的配置文件 data:存储训练、测试数据的文件 img-size:输入图片宽高,显卡不行你就调小点。 rect:进行矩形训练 resume:恢复最近保存的模型开始训练 nosave:仅保存最终checkpoint notest:仅测试最后的epoch evolve:进化超参数 bucket:gsutil bucket cache-images:缓存图像以加快训练速度 weights:权重文件路径 name: 重命名results.txt to results_name.txt device:cuda device, i.e. 0 or 0,1,2,3 or cpu adam:使用adam优化 multi-scale:多尺度训练,img-size +/- 50% single-cls:单类别的训练集 原文链接:https://blog.csdn.net/qq_36756866/article/details/109111065

 训练结束会在yolov5目录下生成一个runs文件,所以训练结果都放在runs\train文件中。

3.测试

参考链接:https://blog.csdn.net/qq_36756866/article/details/109111065

4.手势识别

(1)收集你所需的手势照片放在文件夹mydata\images中,使用labelImg对照片进行打标签,保存在文件夹mydata\Annotations(XML文件)中;

(2)在pycharm中运行my_label.py生成TXT文件并保存在文件夹mydata\labels中;

(3)这样我们就可运行train.py文件进行训练,完成后我们在终端输入指令:python F:/yolov5/yolov5-master/detect.py --source 0 --weight="F:/yolov5/yolov5-master/runs/train/exp6/weights/best.pt"调用电脑摄像头,基本可以实现你所打标签的手势识别。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3