基于matlab使用视频和深度学习进行手势识别(附源码)

news2024/10/5 16:31:24

一、前言

此示例首先演示如何使用预训练的SlowFast视频分类器执行手势识别,然后演示如何使用迁移学习在自定义手势识别数据集上训练分类器。

基于视觉的人类手势识别涉及使用一组视频帧预测手势,例如挥手打招呼、手语手势或鼓掌。手势识别的一个吸引人的特点是,它们使人类能够与计算机和设备进行通信,而无需外部输入设备,如鼠标或遥控器。来自视频的手势识别有许多应用,例如消费电子和机械系统的控制、机器人学习和计算机游戏。例如,在线预测来自多个摄像头的传入视频的多个动作对于机器人学习非常重要。与图像分类相比,使用视频进行人类手势识别的建模具有挑战性,因为视频数据集的地面实况数据不准确,视频中的演员可以执行的手势种类繁多,数据集严重类不平衡,以及从头开始训练强大的分类器所需的大量数据。深度学习技术,如SlowFast双通路卷积网络,已经显示出使用迁移学习和在大型视频活动识别数据集上预先训练的网络在较小数据集上的性能有所提高。

注意:此示例需要用于慢速视频分类的计算机视觉工具箱模型。可以从加载项资源管理器安装用于慢速视频分类的计算机视觉工具箱模型。

二、使用预训练的视频分类器执行手势识别

下载预训练的 SlowFast 视频分类器以及要在其上执行手势识别的视频文件。下载的zip文件的大小约为245 MB。

加载预训练的慢速视频分类器。显示预训练视频分类器的类标签名称。

选择10个随机选择的视频序列对视频进行分类,以统一覆盖整个文件以找到视频中占主导地位的动作类。使用该函数对视频文件进行分类。该分类也可以应用于流视频。

三、训练用于手势识别的视频分类器

示例的这一部分显示了如何使用迁移学习训练上面显示的视频分类器。将变量设置为 使用预训练的视频分类器,而无需等待训练完成。

下载地面实况训练数据

此示例使用包含四个手势的可下载手势数据集训练 SlowFast 视频分类网络:。数据集包含使用视频标记器标记的视频和相应的真实数。下载数据集。

提取培训视频序列

若要训练视频分类器,需要视频集合及其相应的场景标签集合。

从下载的地面实况数据中提取了总共40个视频场景。

加载数据集

此示例使用数据存储读取从真实数据中提取的视频场景和标注。

指定每次从数据存储读取数据时应将数据存储配置为输出的视频帧数。

此处使用值 16 来平衡内存使用情况和分类时间。要考虑的常见值是 8、16、32、64 或 128。使用更多帧有助于捕获其他时态信息,但需要更多的内存。需要进行实证分析以确定最佳帧数。接下来,指定应将数据存储配置为输出的帧的高度和宽度。数据存储会自动将原始视频帧的大小调整为指定大小,以启用多个视频序列的批处理。

值 [112 112] 用于捕获视频场景中较长的时间关系,这有助于对持续时间较长的手势进行分类。大小的常见值是 [112 112]、[224 224] 或 [256 256]。较小的尺寸允许使用更多的视频帧,但代价是内存使用量、处理时间和空间分辨率。与帧数一样,需要进行实证分析以确定最佳值。将通道数指定为 3,因为视频是 RGB。

使用该函数创建用于迁移学习的慢速视频分类器。该函数创建一个 SlowFast 视频分类器对象,该对象在 Kinetics-400 数据集  上进行了预训练。指定 ResNet-50 作为 SlowFast 分类器的基本网络卷积神经网络 3D 体系结构。

指定慢速视频分类器的输入大小。通过指定手势数据集的类和网络输入大小来创建慢速视频分类器。指定视频分类器的模型名称。

扩充和预处理训练数据

数据增强提供了一种使用有限数据集进行训练的方法。对于基于网络输入大小的帧集合,视频数据的增强必须相同。细微的更改(例如翻译、裁剪或转换图像)可提供新的、独特的和独特的图像,您可以使用这些图像来训练强大的视频分类器。数据存储是读取和扩充数据集合的便捷方式。使用此示例末尾定义的支持函数扩充训练视频数据。

通过使用此示例末尾定义的 ,预处理训练视频数据以调整为 SlowFast 视频分类器输入大小。将视频分类器的属性和预处理函数的输入大小指定为结构中的字段值。该属性用于在 0 和 1 之间重新缩放视频帧,然后使用平均值和标准偏差规范化重新缩放的数据。输入大小用于根据结构中的值调整视频帧的大小。或者,您可以使用 或 作为随机裁剪或将输入数据中心裁剪为视频分类器的输入大小的值。

定义模型梯度函数

本示例末尾列出的函数将 SlowFast 视频分类器、一小批输入数据和一小批真实标签数据作为输入。该函数返回训练损失值、相对于分类器可学习参数的损失梯度以及分类器的小批量精度。损失是通过计算视频分类器预测的交叉熵损失来计算的。网络的输出预测是每个类的 0 到 1 之间的概率。

分类器的精度是通过将分类器与输入的地面实况标签进行比较来计算的。

指定训练选项

使用 5 的小批量大小进行训练,进行 600 次迭代。使用该参数指定要保存具有最佳小批量损失的模型的迭代。

指定余弦退火学习速率计划参数:

  • 最低学习率为 1e-4。

  • 最大学习率为 1e-3。

  • 余弦迭代次数为 200、300 和 400,之后学习率计划周期将重新启动。该选项定义每个余弦周期的宽度。

指定 SGDM 优化的参数。在训练开始时初始化 SGDM 优化参数:

  • 动量为0.9。

  • 初始化为 的初始速度参数。

  • L2 正则化因子为 0.0005。

指定使用并行池在后台调度数据。如果设置为 true,则打开具有指定数量的并行工作线程的并行池,并创建一个作为此示例的一部分提供的 ,该 在后台调度数据以使用异步数据加载和预处理加快训练速度。

训练视频分类器

使用视频数据训练慢速视频分类器。

对于每个纪元:

  • 在循环访问小批量数据之前随机排列数据。

  • 用于循环访问小批量。本示例末尾列出的支持函数使用给定的训练数据存储来创建 

  • 使用本示例末尾列出的支持函数显示每个时期的损失和精度结果。

对于每个小批量:

  • 将视频数据和标签转换为基础类型为single的对象。

  • 若要使用慢速视频分类器处理视频数据的时间维度,请指定时态序列维度。为视频数据和标签数据指定维度标签(空间、空间、通道、时间、批次)。

该对象使用此示例末尾列出的支持函数来批处理 RGB 视频数据。

四、评估经过训练的视频分类器

要评估经过训练的慢速视频分类器的准确性,请将变量设置为 false 并创建一个 .请注意,数据增强不适用于评估数据。理想情况下,测试和评估数据应代表原始数据,并且不加修改以进行无偏评估。

加载训练期间保存的最佳模型或使用预训练模型。创建一个对象以加载测试数据的批次。对于每批评估数据,使用 SlowFast 视频分类器进行预测,并使用混淆矩阵计算预测准确性。计算经过训练的慢速视频分类器的平均剪辑分类精度。显示混淆矩阵。

在 Kinetics-400 数据集上预训练的 SlowFast 视频分类器为迁移学习中的人类手势识别提供了强大的性能。上述训练在 24GB Titan-X GPU 上运行了大约 60 分钟。在小手势识别视频数据集上从头开始训练时,训练时间和收敛时间比预训练视频分类器要长得多。使用 Kinetics-400 预训练 SlowFast 视频分类器的跨频器学习还可以避免在如此小的手势识别视频数据集上运行大量纪元时过度拟合分类器。

五、程序

使用Matlab R2022b版本,点击打开。(版本过低,运行该程序可能会报错)

程序下载:基于matlab使用视频和深度学习进行手势识别资源-CSDN文库

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

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

相关文章

启动失败之源发行版 17 需要目标发行版 17

一、java: 警告: 源发行版 17 需要目标发行版 17 1.1.原因 :JDK 版本不对。 这里可以看到,项目需要的是JDK17,而我这里用的是JDK1.8。 1.2.修改 这里有两种操作,一种是修改项目版本,一种是修改JDK版本。无论是哪一种&#xff0…

CentOS7使用ping命令测试主机或者外部网络不通(已解决)

CentOS7使用ping命令测试主机或外部网路显示“目标主机不可达”或者其他原因失败。 说明 当尝试了所有修改配置,关闭防火墙等操作之后,还是没有成功的条件下。 查看计算机中的VMware相关的服务是否打开。 此电脑–右击–管理–服务与应用程序–服务 …

【小吉带你学Git】Git命令(用户签名,本地库,暂存区,文件,版本 等命令)

🎊专栏【Git】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 🌺欢迎并且感谢大家指出小吉的问题🥰 文章目录 🍔设置用户签名⭐命令⭐如何在Windows上面查看自己的签名 &am…

eNSP-静态路由表的配置

eNSP-静态路由表的配置 文章目录 eNSP-静态路由表的配置一、拓扑结构二、关键语句三、完整代码四、测试验证 一、拓扑结构 二、关键语句 ip route-static x.x.x.x y z.z.z.z 语法:目标网段 掩码 下一跳 例如 PC1所在网段访问PC2所在网段 在AR1中输入 ip route-st…

scratch 鼠标控制角色移动

scratch 鼠标控制角色 本程序使用鼠标操作“机器人”角色跟随鼠标,距离较小时暂停移动;“小狗”角色连续在随机位置生成、水平移动、碰到边缘反弹、碰到“机器人”角色时删除。 目前scratch程序的制作已经告一段落了,进一步开发需要更多规划…

Redis【实战篇】---- 达人探店

Redis【实战篇】---- 达人探店 1. 达人探店 - 发布探店笔记2. 达人探店 - 查看探店笔记3. 达人探店 - 点赞功能4. 达人探店 - 点赞排行榜 1. 达人探店 - 发布探店笔记 发布探店笔记 探店笔记类似点评网站的评价,往往是图文结合。对应的表有两个: tb_bl…

集成算法概述

集成算法的基本思想:训练时用多种分类器一起完成同一份任务。 测试时对待测试样本分别通过不同的分类器,汇总最后的结果。投票方式,可分为软投票和硬投票。 集成算法一般有三种,分别是Bagging模型、Boosting模型和Stacking模型。 …

微前端(拆分和细化,整合历史系统)

接入微前端 项目背景说明 假如我们完成了基于Vue2的项目,假设另外一个团队的小伙伴来实现前台可视化部分,他们使用的是最新的Vue3技术栈,现在有一个需求,他们的前台项目想直接使用我们的登录功能,获得token&#xff…

使用Thread和队列Queue实现线程池复用线程

线程池实现 线程池是一个线程管理技术,创建一个或者多个线程进行管理,避免线程的创建和销毁带来的开销线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这…

【BUG历险记】vivado报错:binding vhdl entity ‘ xxxxx ‘does not have port ‘ xxxxx ‘解决方案

🏔【BUG历险记】vivado报错:binding vhdl entity xxxxx does not have port xxxxx 解决方案 问题描述 我在编写雷达的脉冲压缩仿真时,先例化了FFT和复数乘法器,并仿真验证通过了;再例化IFFT,结果仿真时…

可信区块链运行监测服务平台(TBM)正式发布

6月29日,“Web3.0信任科技大会”于长沙开幕,大会由长沙市人民政府、中国信息通信研究院、中国通信标准化协会联合主办,长沙市委网络安全和信息化委员会办公室、长沙市工业和信息化局、长沙经济技术开发区管理委员会、可信区块链推进计划和中国…

leetcode周赛352

leetcode周赛352 1. 最长奇偶子数组 思路分析 这是一道变形的双指针题目我们可以使用相关算法模板基础上来书写左边界:偶数,且小于值threshold;所以我们需要寻找符合要求的左边界判断是否奇偶相间:只有 奇数偶数奇数 class Solution {static…

国产MCU-CW32F030开发学习--移植rtthread-nano

国产MCU-CW32F030开发学习–移植rtthread-nano 硬件平台 CW32_48F大学计划板CW32_IOT_EVA物联网开发评估套件 RT-Thread Nano RT-Thread Nano 是一个极简版的硬实时内核,它是由 C 语言开发,采用面向对象的编程思维,具有良好的代码风格&…

git clone 丢东西

1. git clone 丢东西 使用git clone https://gitee.com/123456789/123456789.git 克隆gitee 远程库上的代码发现少了一部分,只克隆了一部分下来,反复删除重新克隆都是一样的结果 2. 克隆下来后的文件,该目录下只有5 个文件,少了…

一文读懂北斗三号短报文!通信频度、电文长度、北斗民用智能卡申请、典型终端全面介绍

一、北斗短报文概述 北斗卫星导航系统(Beidou Navigation Satellite System)是中国自主研发和建设的全球卫星导航系统。该系统由一系列卫星、地面监控站和用户终端组成,旨在提供高精度、高可靠性的定位、导航和授时服务。北斗卫星导航系统的发…

QT编写的数字键盘

https://download.csdn.net/download/qq_20189555/88001237

Heroku 实践:如何成功将 Vue.js 的前端内容部署到 Heroku

文章目录 Vue.js 脚手架安装Vue CLI(如果你还没有安装):创建新项目 Heroku 部署 Vue2项目目录server.jspackage.json创建 Procfile按照 heroku 的引导初始化 git 并提交代码 可能问题 Vue.js 脚手架 首先要使用 Vue 的脚手架来创建一个 vue …

nodeJs学习笔记

创建服务器 在根目录下创建server.js的文件,里面写如入以下代码: // 请求nodejs自带的http模块 var http require(http);http.createServer(function (request, response) {// 发送 HTTP 头部 // HTTP 状态值: 200 : OK// 内容类型: text/plainrespon…

Update the WSL kernel by running “wsl --update“ or……【老电脑装Docker】

给老电脑装Docker遇到了这个问题记录一下 Update the WSL kernel by running “wsl --update” or follow instructions at https://docs.microsoft.com/windows/wsl/wsl2-kernel. 打开Docker一直报这个界面,然后就退出 根据上面的意思,试着更新了下 …

汇编学习教程:走进 bp

引言 此前我们学习了 bp 寄存器,我们知道 bp 的作用是为访问栈空间数据提供方便,其默认绑定的段寄存器就是 SS 段寄存器。在此前的博文中博主提及到,bp 的作用其实不止方便访问栈空间数据这一条,对于栈如此重要的空间&#xff0c…