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

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

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

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

概述


本文基于论文 [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.mzph.cn/diannao/62368.shtml

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

相关文章

硬件基础22 反馈放大电路

目录 一、反馈的基本概念与分类 1、什么是反馈 2、直流反馈与交流反馈 3、正反馈与负反馈 4、串联反馈与并联反馈 5、电压反馈与电流反馈 二、负反馈四种组态 1、电压串联负反馈放大电路 2、电压并联负反馈放大电路 3、电流串联负反馈放大电路 4、电流并联负反馈放大…

亚马逊开发视频人工智能模型,The Information 报道

根据《The Information》周三的报道,电子商务巨头亚马逊(AMZN)已开发出一种新的生成式人工智能(AI),不仅能处理文本,还能处理图片和视频,从而减少对人工智能初创公司Anthropic的依赖…

Spring Boot教程之十二: Spring – RestTemplate

Spring – RestTemplate 由于流量大和快速访问服务,REST API越来越受欢迎。REST 不是一种协议或标准方式,而是一组架构约束。它也被称为 RESTful API 或 Web API。当发出客户端请求时,它只是通过 HTTP 将资源状态的表示传输给请求者或端点。传…

通过 JNI 实现 Java 与 Rust 的 Channel 消息传递

做纯粹的自己。“你要搞清楚自己人生的剧本——不是父母的续集,不是子女的前传,更不是朋友的外篇。对待生命你不妨再大胆一点,因为你好歹要失去它。如果这世上真有奇迹,那只是努力的另一个名字”。 一、crossbeam_channel 参考 cr…

CSS笔记(一)炉石传说卡牌设计1

目标 我要通过html实现一张炉石传说的卡牌设计 问题 其中必须就要考虑到各个元素的摆放,形状的调整来达到满意的效果。通过这个联系来熟悉一下CSS的基本操作。 1️⃣ 基本概念 在CSS里面有行元素,块元素,内联元素,常见的行元…

GAMES101:现代计算机图形学入门-笔记-09

久违的101图形学回归咯 今天的话题应该是比较轻松的:聊一聊在渲染中比较先进的topics Advanced Light Transport 首先是介绍一系列比较先进的光线传播方法,有无偏的如BDPT(双向路径追踪),MLT(梅特罗波利斯…

Oracle 数据库 IDENTITY 列

IDENTITY列是Oracle数据库12c推出的新特性。之所以叫IDENTITY列,是由于其支持ANSI SQL 关键字 IDENTITY,其内部实现还是使用SEQUENCE。 不过推出这个新语法也是应该的,毕竟MyQL已经有 AUTO_INCREMENT列,而SQL Server也已经有IDENT…

前端学习笔记之文件下载(1.0)

因为要用到这样一个场景,需要下载系统的使用教程,所以在前端项目中就提供了一个能够下载系统教程的一个按钮,供使用者进行下载。 所以就试着写一下这个功能,以一个demo的形式进行演示,在学习的过程中也发现了中文路径…

【阅读记录-章节4】Build a Large Language Model (From Scratch)

文章目录 4. Implementing a GPT model from scratch to generate text4.1 Coding an LLM architecture4.1.1 配置小型 GPT-2 模型4.1.2 DummyGPTModel代码示例4.1.3 准备输入数据并初始化 GPT 模型4.1.4 初始化并运行 GPT 模型 4.2 Normalizing activations with layer normal…

Python PDF转JPG图片小工具

Python PDF转JPG图片小工具 1.简介 将单个pdf装换成jpg格式图片 Tip: 1、软件窗口默认最前端,不支持调整窗口大小; 2、可通过按钮选择PDF文件,也可以直接拖拽文件到窗口; 3、转换质量有5个档位,(0.25&a…

使用SOAtest进行功能回归测试

持续集成是将所有开发人员的工作副本合并到共享的主线上。这个过程使软件开发对开发人员来说更容易访问、更快、风险更小。 阅读这篇文章,让我们了解如何配置Parasoft SOAtest作为持续集成过程的一部分,来执行功能测试和回归测试。我们将介绍如何使用主…

ais_server 学习笔记

ais_server 学习笔记 一前序二、ais init1、时序图如下2. 初始化一共分为以下几个重要步骤:2.1.1、在ais_server中启动main函数,然后创建AisEngine,接着初始化AisEngine2.1.2、解析/var/camera_config.xml 文件,获取相关配置参数。…

L1G3000 任务-浦语提示词工程

基础任务 (完成此任务即完成闯关) 背景问题:近期相关研究指出,在处理特定文本分析任务时,语言模型的表现有时会遇到挑战,例如在分析单词内部的具体字母数量时可能会出现错误。任务要求:利用对提示词的精确设计&#xf…

Unity之一键创建自定义Package包

内容将会持续更新,有错误的地方欢迎指正,谢谢! Unity之一键创建自定义Package包 TechX 坚持将创新的科技带给世界! 拥有更好的学习体验 —— 不断努力,不断进步,不断探索 TechX —— 心探索、心进取! …

python的Flask框架使用

python的Flask框架使用 python环境搭建conda安装python自带的虚拟环境:venv python环境搭建 官网地址 点击downloads 选择你需要的版本,我这里使用的3.12.6 选择Windows installer (64-bit) 选择自定义安装,勾选以管理员权限安装&#xff0…

网络原理(一)—— http

什么是 http http 是一个应用层协议,全称为“超文本传输协议”。 http 自 1991 年诞生,目前已经发展为最主流使用的一种应用层协议。 HTTP 往往基于传输层的 TCP 协议实现的,例如 http1.0,http1.0,http2.0 http3 是…

103.【C语言】数据结构之建堆的时间复杂度分析

1.向下调整的时间复杂度 推导 设树高为h 发现如下规律 按最坏的情况考虑(即调整次数最多) 第1层,有个节点,最多向上调整h-1次 第2层,有个节点,最多向上调整h-2次 第3层,有个节点,最多向上调整h-3次 第4层,有个节点,最多向上调整h-4次 ... 第h-1层,有个节点,最多向上调整1次 第…

用Python爬虫“偷窥”1688商品详情:一场数据的奇妙冒险

引言:数据的宝藏 在这个信息爆炸的时代,数据就像是一座座等待挖掘的宝藏。而对于我们这些电商界的探险家来说,1688上的商品详情就是那些闪闪发光的金子。今天,我们将化身为数据的海盗,用Python这把锋利的剑&#xff0…

Python基础学习-12匿名函数lambda和map、filter

目录 1、匿名函数: lambda 2、Lambda的参数类型 3、map、 filter 4、本节总结 1、匿名函数: lambda 1)语法: lambda arg1, arg2, …, argN : expression using arg 2) lambda是一个表达式,而不是一个语…

【JavaEE初阶 — 网络编程】TCP流套接字编程

TCP流套接字编程 1. TCP & UDP 的区别 TCP 的核心特点是面向字节流,读写数据的基本单位是字节 byte 2 API介绍 2.1 ServerSocket 定义 ServerSocket 是创建 TCP 服务端 Socket 的API。 构造方法 方法签名 方法说明 ServerS…