基于深度学习的手势识别算法

在这里插入图片描述
在这里插入图片描述

基于深度学习的手势识别算法

  • 概述
  • 算法原理
  • 核心逻辑
  • 效果演示
  • 使用方式
  • 参考文献

概述


本文基于论文 [Simple Baselines for Human Pose Estimation and Tracking[1]](ECCV 2018 Open Access Repository (thecvf.com)) 实现手部姿态估计。

手部姿态估计是从图像或视频帧集中找到手部关节位置的任务。近年来,姿态估计取得了显著进展。同时,姿态估计相关算法和系统的复杂性也在增加,使得算法分析和比较变得更加困难。
在这里插入图片描述

对此,该论文[1]提供了简单且有效的基线方法。具体来说,该论文所提出的姿态估计方法基于在骨干网络 ResNet 上添加的几个反卷积层,以此从深层和低分辨率特征图估计热图(Heatmap)。

  • 参考文献:本文所涉及的所有资源的获取方式:https://www.aspiringcode.com/content?id=17111441004954&uid=ca17507691274861976eacc1dfc5d827

算法原理


ResNet [2] 是图像特征提取中最常见的骨干网络,也常常被用于姿态估计。本文所使用的模型在 ResNet 的最后一个卷积阶段上简单添加了几个反卷积层。基于这种方式,其可以利用深层和低分辨率的特征生成热图,并基于热图估计关节位置。整个网络结构如图 2 所示,其使用了三个具有批量归一化和 ReLU 激活的反卷积层。每层有256个 4×4 内核的滤波器,步幅为 2。最后添加一个 1×1 的卷积层,以生成所有 k 个关键点的预测热图。

在这里插入图片描述

均方误差 (MSE) 被用作预测热图和目标热图之间的损失。关节 k 的目标热图是通过在第 k 个关节的真实位置上应用二维高斯分布生成的。训练过程中的损失变化如图3所示。我选取了 FreiHand[3] 作为数据集,ResNet-18 作为骨干网络进行训练。FreiHand 的训练集包含 130240 张尺寸为 224 × 224 的RGB图像。

在这里插入图片描述

将训练完成后的模型应用于FreiHAND测试集,得到结果如图4所示

在这里插入图片描述

								图4:手势识别结果

核心逻辑


模型结构如下所示:

import torch
import torch.nn as nn
import torchvision.models as modelsclass PoseNetwork(nn.Module):def __init__(self, joints_num=21, depth=50, pretrained=False):super(PoseNetwork, self).__init__()if pretrained:weights = 'DEFAULT'else:weights = Noneif depth == 18:resnet = models.resnet18(weights = weights)elif depth == 34:resnet = models.resnet34(weights = weights)elif depth == 50:resnet = models.resnet50(weights = weights)elif depth == 101:resnet = models.resnet101(weights = weights)elif depth == 152:resnet = models.resnet152(weights = weights)else:resnet = models.resnet50()self.encoder = nn.Sequential(*list(resnet.children())[:-2])self.decoder = nn.Sequential(nn.ConvTranspose2d(resnet.inplanes, 256, kernel_size=4, stride=2, padding=1, output_padding=0, bias=False),nn.BatchNorm2d(256),nn.ReLU(inplace=True),nn.ConvTranspose2d(256, 256, kernel_size=4, stride=2, padding=1, output_padding=0, bias=False),nn.BatchNorm2d(256),nn.ReLU(inplace=True),nn.ConvTranspose2d(256, 256, kernel_size=4, stride=2, padding=1, output_padding=0, bias=False),nn.BatchNorm2d(256),nn.ReLU(inplace=True),nn.Conv2d(256, joints_num, kernel_size=1, stride=1))def forward(self, x):x = self.encoder(x)x = self.decoder(x)return x

以上代码仅作展示,更详细的代码文件请参见附件。

效果演示


配置环境并运行 main.py脚本,效果如图4所示。
在这里插入图片描述

此外,网站还提供了在线体验功能。用户只需要输入一张大小不超过 1MB 的单手 JPG 图像,网站就会标记出图中手的姿势,如图6所示。

在这里插入图片描述

								图6:在线体验结果

使用方式


  • 解压附件压缩包并进入工作目录。如果是Linux系统,请使用如下命令:
unzip hand-pose-estimation.zip
cd hand-pose-estimation
  • 代码的运行环境可通过如下命令进行配置:
pip install -r requirements.txt
  • 如果希望在本地运行实时手势识别程序,请运行如下命令:
python main.py
  • 如果希望在本地运行训练模型,请运行如下命令:
python main.py -r "train"
  • 请注意,训练前需要自行制作或下载并处理相关公开数据集,具体格式可以参考我事先基于FreiHAND制作的一个迷你的样例数据集,其位于data\datasets\mini-example。
  • 如果希望在线部署,请运行如下命令:
python main-flask.py

参考文献


[1] Xiao B, Wu H, Wei Y. Simple baselines for human pose estimation and tracking[C]//Proceedings of the European conference on computer vision (ECCV). 2018: 466-481.

[2] Targ S, Almeida D, Lyman K. Resnet in resnet: Generalizing residual architectures[J]. arXiv preprint arXiv:1603.08029, 2016.

[3] Zimmermann C, Ceylan D, Yang J, et al. Freihand: A dataset for markerless capture of hand pose and shape from single rgb images[C]//Proceedings of the IEEE/CVF International Conference on Computer Vision. 2019: 813-822.

  • 参考文献:本文所涉及的所有资源的获取方式:https://www.aspiringcode.com/content?id=17111441004954&uid=ca17507691274861976eacc1dfc5d827

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

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

相关文章

2024-11-25 二叉树的定义

一、基本概念 1.二叉树是n(n>0)个结点的有限集合: ① 或者为空二叉树,即n0。 ②或者由一个根结点和两个互不相交的被称为根的左子树和右子树组成。左子树和右子树又分别是一棵二叉树。 特点: ①每个结点至多只有两棵子树。 ②左右子树不能颠倒&am…

网络中出现二层环路会产生什么问题?

在企业局域网中,二层交换机通过简单高效的方式转发数据包,构建了通信的基石。然而,当网络中出现二层环路时,这一切可能迅速崩溃。从广播风暴到MAC地址漂移,再到网络延迟和瘫痪,二层环路问题带来的影响既深远…

安卓悬浮窗应用外无法穿透事件问题

现象: 应用内悬浮窗如何设置了 WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE在自己应用内事件穿透正常,但到应用外就无法点击。 原因: 解决方法: layoutParams.alpha 0.8f …

8. SpringCloud Alibaba Nacos 注册中心 + 配置中心 Nacos “分类配置” 超超详细使用+配置解析

8. SpringCloud Alibaba Nacos 注册中心 配置中心 Nacos “分类配置” 超超详细使用配置解析 文章目录 8. SpringCloud Alibaba Nacos 注册中心 配置中心 Nacos “分类配置” 超超详细使用配置解析前言1. Spring Cloud Alibaba Nacos 概述1.2 安装 Spring Cloud Alibaba Naco…

linux安装部署mysql资料

安装虚拟机 等待检查完成 选择中文 软件选择 网络和主机名 开始安装 设置root密码 ADH-password 创建用户 等待安装完成 重启 接受许可证 Centos 7 64安装完成 安装mysql开始 Putty连接指定服务器 在 opt目录下新建download目录 将mysql文件传到该目录下 查看linux服务器的…

【Python入门】Python数据类型

文章一览 前言一、变量1.1.如何使用变量1.2.如何定义变量的名字(标识符) 二、数据类型2.1 整型数据2.2 浮点型数据2.3 布尔型(bool)数据2.4 复数型数据2.5 字符串类型1 > 字符串相加(合并)(&…

MySQL - 表的增删查改

文章目录 1.新增1.1语法1.2单行插入1.3多行插入1.4插入后更新1.5替换 2.查找2.1语法2.2使用 3.修改3.1语法3.2使用 4.删除4.1语法4.2使用4.3截断表 5.插入查询结果5.1语法5.2使用 1.新增 1.1语法 INSERT [INTO] table_name [(column1, column2, ...)] VALUES (value1, value2…

Mac 系统上控制台常用性能查看命令

一、top命令显示 在macOS的控制台中,top命令提供了系统当前运行的进程的详细信息以及整体系统资源的利用情况。下面是对输出中各个字段的解释: Processes: 483 total: 系统上总共有483个进程。 2 running: 当前有2个进程正在运行。 481 sleeping: 当前有…

小程序-基于java+SpringBoot+Vue的微信小程序养老院系统设计与实现

项目运行 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a…

单片机知识总结(完整)

1、单片机概述 1.1. 单片机的定义与分类 定义: 单片机(Microcontroller Unit,简称MCU)是一种将微处理器、存储器(包括程序存储器和数据存储器)、输入/输出接口和其他必要的功能模块集成在单个芯片上的微型…

如何监控Elasticsearch集群状态?

大家好,我是锋哥。今天分享关于【如何监控Elasticsearch集群状态?】面试题。希望对大家有帮助; 如何监控Elasticsearch集群状态? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 监控 Elasticsearch 集群的状态对于确保…

命令行使用ssh隧道连接远程mysql

本地电脑A 跳板机B 主机2.2.2.2 用户名 B ssh端口号22 登录密码bbb 远程mysql C 地址 3.3.3.3 端口号3306 用户名C 密码ccc A需要通过跳板机B才能访问C; navicat中配置ssh可以实现在A电脑上访问C 如何实现本地代码中访问C呢? # 假设本地使…

Rook入门:打造云原生Ceph存储的全面学习路径(下)

文章目录 六.Rook部署云原生CephFS文件系统6.1 部署cephfs storageclass6.2 创建容器所需cephfs文件系统6.3创建容器pod使用rook-cephfs提供pvc6.4 查看pod是否使用rook-cephfs 七.Ceph Dashboard界面7.1 启用dashboard开关7.2 ceph-dashboard配置外部访问7.3 Dashboard web ad…

知识库助手的构建之路:ChatGLM3-6B和LangChain的深度应用

ChatGLM3-6B和LangChain构建知识库助手 安装依赖库 使用pip命令安装以下库: pip install modelscope langchain0.1.7 chromadb0.5.0 sentence-transformers2.7.0 unstructured0.13.7 markdown3.0.0 docx2txt0.8 pypdf4.2.0依赖库简介: ModelScope&a…

面经-综合面/hr面

面经-综合面/hr面 概述1.大学期间遇到的困难,怎么解决的2. 大学期间印象最深/最难忘的是什么3. 大学里面担任了什么职务没?做了什么工作?4. 大学最大的遗憾是什么?5. 对自己的未来规划6. 对自己的评价7. 自己的优缺点8. 对公司的认…

群控系统服务端开发模式-应用开发-邮箱配置功能开发

邮箱配置主要是将管理员数据做归属。具体见下图: 一、创建表 1、语句 CREATE TABLE cluster_control.nc_param_mail (id int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 编号,title varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT…

sd webui整合包怎么安装comfyui

环境: sd webui整合包 comfyui 问题描述: sd webui整合包怎么安装comfyui 扩展安装不成功 解决方案: 1.直接下载 ,解压到SD文件夹里(或者git拉一下) 2.ComfyUI模型共享:如果本机部署过Webui,那么ComfyUI可以与WebUI公用一套模型,防止复制大量模型浪费空间 将…

python基础(二)

函数 函数定义 函数是组织好的,可重复使用的,用来实现单一或相关联功能的代码段。 python函数定义规则: def my_max(a,b): #定义函数用def关键字开头,函数名-》my_max ()定义参数 if a>b: #函数体以&#xff1a…

【Springboot入门知识总结】

SpringBoot Web入门 一.Spring1.springBoot入门程序2.Spring官方脚手架连接不上的解决方案3.为什么一个main方法就将web应用 二. HTTP协议1.http协议的概念和特点2.Get请求和Post请求的区别3.http响应状态码分类4.获取http的参数 三.springBoot中的常用注解四.分层解耦五.总结 …

华为IPD流程学习之——深入解读123页华为IPD流程体系设计方法论PPT

该方案全面介绍了华为IPD流程体系设计方法论,包括流程体系建设的背景、理念、架构、核心特征、构建模型、与组织和战略的关系、运营机制、数字化转型以及流程管理组织等内容,旨在为企业提供一套系统的流程体系建设指导,以提升运营效率、质量和…