【论文复现】基于深度学习的手势识别算法

本文所涉及所有资源均在这里可获取。

在这里插入图片描述


📕作者简介:热爱跑步的恒川,致力于C/C++、Java、Python等多编程语言,热爱跑步,喜爱音乐、摄影的一位博主。
📗本文收录于论文复现系列,大家有兴趣的可以看一看
📘相关专栏C语言初阶、C语言进阶系列、恒川的日常汇报系列等,大家有兴趣的可以看一看
📙Python零基础入门系列,Java入门篇系列、docker技术篇系列、Apollo的学习录系列正在发展中,喜欢Python、Java、docker的朋友们可以关注一下哦!

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

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

本文所涉及所有资源均在这里可获取。

概述

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

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

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

算法原理

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

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

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

核心逻辑

模型结构如下所示:

import torch
import torch.nn as nn
import torchvision.models as models

    
class PoseNetwork(nn.Module):
    def __init__(self, joints_num=21, depth=50, pretrained=False):
        super(PoseNetwork, self).__init__()
        if pretrained:
            weights = 'DEFAULT'
        else:
            weights = None
        if 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所示。
在这里插入图片描述

使用方式

解压附件压缩包并进入工作目录。如果是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。


  如果这份博客对大家有帮助,希望各位给恒川一个免费的点赞👍作为鼓励,并评论收藏一下,谢谢大家!!!
  制作不易,如果大家有什么疑问或给恒川的意见,欢迎评论区留言。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

云上拼团GO指南——腾讯云博客部署案例,双11欢乐GO

知孤云出岫-CSDN博客 目录 腾讯云双11活动介绍 一.双十一活动入口 二.活动亮点 (一)双十一上云拼团Go (二)省钱攻略 (三)上云,多类型服务器供您选择 三.会员双十一冲榜活动 (一)活动内容 &#x…

跨境独立站新手,如何用DuoPlus云手机破局海外社媒引流?

独立站作为电商领域的一个重要组成部分,其发展在最近几年里确实令人瞩目,对于想要进入跨境赛道的新手卖家来说,手上握着有优势的货源,建立小型的DTC独立站确实会比入驻第三方平台具有更大的灵活性。本文将给跨境卖家们总结独立站和…

解决VMware和物理机网络不通问题(保姆式教学)

VMware配置网络打通虚拟机和物理机之间得网络通道,并通过xshell连接 配置网络VMware配置虚拟机配置物理机配置Xshell连接其他问题 配置网络 网络配置是通过NAT方式,只要物理机能上网,虚拟机就能上网 VMware配置 网络连接选择NAT方式&#x…

微服务系列三:微服务核心——网关路由

目录 前言 一、登录存在的问题归纳 二、*微服务网关整体方案 三、认识微服务网关 四、网关鉴权实现 五、OpenFeign微服务间用户标识信息传递实现 六、微服务网关知识追问巩固 实验环境说明 本文有部分地方需要实验进行。首先对于看过黑马微服务的同学应该会比较熟悉。…

在第三方公有云服务器上部署AS-V1000视频接入汇聚平台,请求视频出现黑屏的问题解决

目录 一.背景和问题描述 1.1平台介绍 1.2背景和问题描述 二.排查流程 2.1初步解析 2.2排查服务器防火墙 2.3排查平台模块 2.3.1排查sippgw模块 2.3.2排查mrrs模块 2.3.3排查平台公网设置 2.4排查安全组 三.问题解决过程和结果 3.1问题解决过程 3.2问题解决结果 一…

学习threejs,使用对象组合

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.Object3D 三维物体 二…

从技术创新到商业应用,智象未来(HiDream.ai)创新不止步

在人工智能领域的最新动态中,智象未来(HiDream.ai)公司,作为全球领先的多模态生成式人工智能技术先驱,已经引起了广泛的行业瞩目。该公司专注于深度学习和计算机视觉技术的融合,致力于开发和优化视觉多模态…

数据血缘追踪是如何在ETL过程中发挥作用?

在大数据环境下,数据血缘追踪具有重要意义,它能够帮助用户了解数据的派生关系、变换过程和使用情况,进而提高数据的可信度和可操作性。通过数据血缘追踪,ETL用户可以准确追溯数据的来源,快速排查数据异常和问题。 一、…

八、Spring Boot集成Spring Security之前后分离认证最佳实现测试

文章目录 往期回顾:Spring Boot集成Spring Security专栏及各章节快捷入口前言一、正常流程测试1、登录接口测试2、业务接口测试3、登出接口测试 二、非正常流程测试1、输入错误用户名密码登录2、无请求头访问业务接口3、无效请求头访问业务接口4、登出时未携带有效请…

OCM认证备考技巧

Oracle Certified Master(OCM)认证是Oracle公司颁发的顶级专业资格认证,它专为那些旨在验证其在Oracle数据库管理领域拥有深厚专业知识和高级技能的专业人士设计。这一认证标志着持有者在数据库性能优化、备份恢复、高级配置以及故障排除等方…

动态规划理论基础和习题【力扣】【算法学习day.25】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴&am…

kafka+zookeeper的搭建

kafka从2.8版本开始,就可以不用配置zookeeper了,但是也可以继续配置。我目前使用的kafka版本是kafka_2.12-3.0.0.tgz,其中前面的2.12表示是使用该版本的scala语言进行编写的,而后面的3.00才是kafka当前的版本。 通过百度网盘分享…

智象未来(HiDream.ai):从科技创新启程,绘制智能未来新篇章

在人工智能领域飞速演进的当下,智象未来(HiDream.ai)作为全球领先的多模态生成式人工智能技术供应商,正以其独树一帜的视觉多模态大模型及创新应用,推动行业趋势的前进。智象未来(HiDream.ai)自…

给电脑加水印的软件有哪些?分享5个快速添加水印的小神器,快来试试!

怎么给电脑加水印呢? 如果一个个手动添加水印,不仅费时费力,还容易出错。那么,有没有更方便快捷的方法呢? 答案是肯定的!市面上有许多专门给电脑加水印的软件,能够快速高效地实现这一目的。接下…

mac m1 docker本地部署canal 监听mysql的binglog日志

mac m1 docker本地部署canal监听mysql的binglog日志(虚拟机同理) 根据黑马视频部署 1.docker 部署mysql 1.docker拉取mysql 镜像 因为m1是arm架构.需要多加一条信息 正常拉取 docker pull mysql:tagm1拉取 5.7的版本. tag需要自己指定版本 docker pull --platform linux/x…

TARE-PLANNER学习记录

参考: CMU-TARE 探索算法官方社区问答汇总_cmu localplanner 部署-CSDN博客 Tare_planner学习笔记_tare planner-CSDN博客 Tare_planner 学习教程(二)_tareplanner-CSDN博客 (学习笔记)机器人自主导航从零开始第七步——TARE Planner自主…

JMeter基础篇

目录 总目录: 一、JMeter简介: -用途: -优缺点: 二、JMeter安装: 三、项目简介: -学生管理系统: -API接口清单: 查询: 新增: 更新: 删…

AWTK-HarmonyOS NEXT 发布

AWTK 全称为 Toolkit AnyWhere,是 ZLG 倾心打造的一套基于 C 语言开发的 GUI 框架。旨在为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的 GUI 引擎,支持跨平台同步开发,一次编程,到处编译,跨平台使…

右旋圆极化散射后的stocks矢量 与T3矩阵的关系

T3矩阵如下 斯托克斯与T3的关系如下。 斯托克斯与T3均没有平均处理,即斯托克斯是完全极化波的(一种琼斯矢量得到),T3是由一个散射矩阵得到,只有一个特征值。