基于matlab基于预训练的膨胀双流卷积神经网络的视频分类器执行活动识别(附源码)

一、前言

此示例首先展示了如何使用基于预训练的膨胀 3-D (I3D) 双流卷积神经网络的视频分类器执行活动识别,然后展示了如何使用迁移学习来训练此类视频分类器使用 RGB 和来自视频的光流数据 [1]。

基于视觉的活动识别涉及使用一组视频帧预测物体的动作,例如走路、游泳或坐着。视频活动识别有很多应用,如人机交互、机器人学习、异常检测、监控、物体检测等。例如,在线预测来自多个摄像头的传入视频的多个动作对于机器人学习非常重要。与图像分类相比,使用视频的动作识别建模具有挑战性,因为视频数据集的地面实况数据不准确,视频中的参与者可以执行的各种手势,严重类不平衡的数据集,以及从头开始训练强大的分类器所需的大量数据。深度学习技术,如I3D双流卷积网络[1],R(2+1)D [4]和SlowFast [5],已经显示出使用迁移学习和在大型视频活动识别数据集(如Kinetics-400)上预先训练的网络在较小数据集上的性能有所提高[6]。注意:此示例需要用于膨胀 3D 视频分类的计算机视觉工具箱模型。可以从加载项资源管理器安装用于膨胀 3D 视频分类的计算机视觉工具箱模型。

二、使用预训练的充气 3D 视频分类器执行活动识别

下载预训练的膨胀 3D 视频分类器以及要执行活动识别的视频文件。下载的zip文件的大小约为89 MB。加载预训练的充气 3D 视频分类器。

显示预训练视频分类器的类标签名称。使用 和 读取和显示视频。选择10个随机选择的视频序列对视频进行分类,以统一覆盖整个文件以找到视频中占主导地位的动作类。使用该函数对视频文件进行分类。

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

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

3.1下载训练和验证数

 此示例使用 HMDB3 数据集训练膨胀 3D (I51D) 视频分类器。使用此示例末尾列出的支持函数将 HMDB51 数据集下载到名为 的文件夹中。下载完成后,将 RAR 文件解压缩到文件夹中。接下来,使用此示例末尾列出的支持函数来确认下载和提取的文件已到位。

该数据集包含大约 2 GB 的视频数据,涉及 7000 个类别的 51 个剪辑,例如喝酒跑步握手。每个视频帧的高度为 240 像素,最小宽度为 176 像素。帧数范围从 18 到大约 1000。

为了减少训练时间,此示例训练活动识别网络对 5 个动作类进行分类,而不是数据集中的所有 51 个类。设置为使用所有 51 个类进行训练。

将数据集拆分为用于训练分类器的训练集和用于评估分类器的测试集。将 80% 的数据用于训练集,其余数据用于测试集。使用 和 从文件夹中创建标签信息,并通过从每个标签中随机选择一定比例的文件,将基于每个标签的数据拆分为训练数据集和测试数据集。

为了规范化网络的输入数据,数据集的最小值和最大值在附加到此示例的MAT文件中提供。

3.2加载数据集

此示例使用数据存储从视频文件中读取视频场景、相应的光流数据和相应的标签。

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

此处使用值 64 来平衡内存使用情况和分类时间。要考虑的常见值是 16、32、64 或 128。使用更多帧有助于捕获其他时态信息,但需要更多的内存。您可能需要降低此值,具体取决于您的系统资源。需要进行实证分析以确定最佳帧数。

接下来,指定应将数据存储配置为输出的帧的高度和宽度。数据存储会自动将原始视频帧的大小调整为指定大小,以启用多个视频序列的批处理。

值 [112 112] 用于捕获视频场景中较长的时间关系,这有助于对持续时间较长的活动进行分类。大小的常见值是 [112 112]、[224 224] 或 [256 256]。较小的尺寸允许使用更多的视频帧,但代价是内存使用量、处理时间和空间分辨率。HMDB51数据集中视频帧的最小高度和宽度分别为240和176。如果要为数据存储指定大于最小值的帧大小(如 [256, 256]),请先使用 调整帧大小。与帧数一样,需要进行实证分析以确定最佳值。imresize

指定 RGB 视频子网和 I3D 视频分类器的光流子网的通道数。

使用帮助程序函数 配置两个用于加载数据的对象,一个用于训练,另一个用于验证。此示例末尾列出了帮助程序函数。每个数据存储读取一个视频文件以提供 RGB 数据和相应的标签信息。

3.3定义网络架构

I3D 网络

使用 3-D CNN 是从视频中提取时空特征的自然方法。您可以通过扩展二维过滤器并将内核池化为 3-D,从预先训练的 2-D 图像分类网络(如 Inception v1 或 ResNet-50)创建 I2D 网络。此过程重用从图像分类任务中学习的权重来引导视频识别任务。

下图是一个示例,显示了如何将 2-D 卷积层膨胀为 3-D 卷积层。膨胀涉及通过添加第三个维度(时间维度)来扩展滤波器大小、权重和偏差。

双流 I3D 网络

视频数据可以认为分为两部分:空间分量和时间分量。

  • 空间组件包含有关视频中对象的形状、纹理和颜色的信息。RGB 数据包含此信息。

  • 时间分量包括有关对象在帧中的运动的信息,并描绘了摄像机和场景中对象之间的重要运动。计算光流是从视频中提取时间信息的常用技术。

双流 CNN 包含一个空间子网和一个时间子网 [2]。与原始堆叠 RGB 帧相比,在密集光流和视频数据流上训练的卷积神经网络可以在有限的训练数据下获得更好的性能。下图显示了典型的双流 I3D 网络。

3.5 配置膨胀 3D (I3D) 视频分类器以进行迁移学习

在此示例中,您将创建一个基于 GoogLeNet 架构的 I3D 视频分类器,这是一个在 Kinetics-3 数据集上预训练的 400D 卷积神经网络视频分类器。

指定 GoogLeNet 作为 I3D 视频分类器的骨干卷积神经网络体系结构,该分类器包含两个子网,一个用于视频数据,另一个用于光流数据。

指定膨胀 3D 视频分类器的输入大小。从文件加载的结构中获取 RGB 和光流数据的最小值和最大值。需要这些值来规范化输入数据。使用该函数创建 I3D 视频分类器。指定视频分类器的模型名称。

3.6 扩充和预处理训练数据

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

使用此示例末尾定义的 ,预处理训练视频数据以调整为膨胀的 3D 视频分类器输入大小。将视频分类器的属性和预处理函数的输入大小指定为结构中的字段值。该属性用于在 -1 和 1 之间重新缩放视频帧和光流数据。输入大小用于根据结构中的值调整视频帧的大小。或者,您可以使用 或 将输入数据随机裁剪或居中裁剪为视频分类器的输入大小。请注意,数据增强不适用于测试和验证数据。理想情况下,测试和验证数据应代表原始数据,并且不加修改以进行无偏评估。

创建本示例末尾列出的支持函数。该函数将 I3D 视频分类器、一小批输入数据和 以及一小批地面实况标签数据作为输入。该函数返回训练损失值、相对于分类器可学习参数的损失梯度以及分类器的小批量精度。

损失是通过计算来自每个子网的预测的交叉熵损失的平均值来计算的。网络的输出预测是每个类的 0 到 1 之间的概率。

3.7 训练 I3D 视频分类器

使用 RGB 视频数据和光流数据训练 I3D 视频分类器。

对于每个纪元:

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

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

  • 使用验证数据验证网络。dsVal

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

对于每个小批量:

  • 将视频数据或光流数据和标签转换为具有底层类型单一的对象。dlarray

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

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

四、评估训练的网络

使用测试数据集评估经过训练的视频分类器的准确性。

加载训练期间保存的最佳模型或使用预训练模型。创建一个对象以加载测试数据的批次。对于每批测试数据,使用 RGB 和光流网络进行预测,取预测的平均值,并使用混淆矩阵计算预测精度。计算已训练网络的平均分类精度。显示混淆矩阵。

在 Kinetics-3 数据集上预训练的 Inflated-400D 视频分类器为迁移学习中的人类活动识别提供了更好的性能。上述训练在 24GB Titan-X GPU 上运行了大约 100 分钟。在小型活动识别视频数据集上从头开始训练时,训练时间和收敛时间比预训练视频分类器花费的时间要长得多。使用 Kinetics-400 预训练的 Inflated-3D 视频分类器的 Transer 学习还可以避免在运行大量 epoch 时过度拟合分类器。但是,与膨胀的 2D 视频分类器相比,在 Kinetics-1 数据集上预训练的 SlowFast 视频分类器和 R(400+3)D 视频分类器在训练期间提供了更好的性能和更快的收敛。

五、程序

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

程序下载:基于matlab基于预训练的膨胀双流卷积神经网络的视频分类器执行活动识别资源-CSDN文库

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

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

相关文章

STM32外设系列—DHT11

文章标题 一、DHT11简介二、数据手册分析2.1 接口说明2.2 串行通信说明2.2.1 单总线通信2.2.2 单总线传输数据位定义2.2.3 时序图 三、DHT11程序设计3.1 初始化GPIO3.2 发送起始信号3.3 接收一个字节数据3.4 接收温湿度信息并校准 四、总结 一、DHT11简介 DHT11是一款常用的数…

快速点特征直方图(FPFH)描述子提取

快速点特征直方图(Fast Point Feature Histograms,FPFH)介绍 快速点特征直方图(Fast Point Feature Histograms,FPFH)是一种基于点的描述子,用于描述点云数据中的局部几何信息。FPFH描述子是在…

浅尝kubernetes

浅尝kubernetes 前言:我们早学习一门技术之前并不需要从头到尾的详细的查看一遍,只需要看一看是什么?能干什么?怎么用?即可! 一、了解kubernetes Kubernetes 也称为 K8s,是用于自动部署、扩缩和…

【C/C++实现进程间通信 二】消息队列

文章目录 前情回顾思路源码Publisher.cppSubscriber.cpp 效果 前情回顾 上一期已经讲解过了进程的相关概念以及进程间通信的实现原理,下面仅展示消息传递机制实现1进程间通信的相关代码。 思路 /*本项目主要用于以消息传递机制的方式进行进程间通信的测试。1.主要…

Odoo16 微信公众号模块开发示例

Odoo16 微信公众号模块开发示例 本模块基于 aiohttp asyncio 进行异步微信公众号接口开发, 仅实现了部分 API 仅供学习参考,更完善的同步接口请参考:wechatpy 或 werobot,可用来替代 模块中的 wechat client。 业务需求 小程序中需要用户…

pdf文档多页内插入统一图片

常用来添加公司logo、签名、印章等等 概括来说就是插入同一个图片,然后复制在每一页(自动) 用的是福昕pdf阅读器 首先打开pdf: 点击图像标注功能: 在弹出窗口中选择浏览,点击需要插入的图片&#xff08…

在个人电脑上部署ChatGLM2-6B中文对话大模型

简介 ChatGLM2-6B 是清华大学开源的一款支持中英双语的对话语言模型。经过了 1.4T 中英标识符的预训练与人类偏好对齐训练,具有62 亿参数的 ChatGLM2-6B 已经能生成相当符合人类偏好的回答。结合模型量化技术,用户可以在消费级的显卡上进行本地部署&…

计算机网络—网络层

文章目录 网络层服务虚电路网络数据报网络 IPv4IP数据报IP数据报分片 IP编址(IPv4)有类IP地址IP子网划分子网掩码 无类IP地址(CIDR)DHCPNATICMP协议 路由算法链路状态路由算法距离向量路由算法不同子网之间的路由算法学习RIP协议O…

【深度学习】3-3 神经网络的学习- 导数梯度

导数 导数就是表示某个瞬间的变化量,式子如下: 式子的左边,表示f(x)关于x的导数,即f(x)相对于x的变化程度。式子表示的导数的含义是,x的“微小变化”将导致函数f(x)的值在多大程度上发生变化。其中,表示…

了解一下EPC模式和它的优势

目录 什么是EPCEPC的优势有哪些?BT、BOT、EPC分别是什么模式?总结 什么是EPC EPC是Engineering(工程):代表设计、采购和施工总承包。Procurement(采购):代表采购和物资管理。Constru…

各牌浏览器设置地址栏显示完整URL

有时候,我们在浏览器的地址栏输入URL后,需要查看完整的URL路径,比如想看到是http协议还是https协议。 目前大多数浏览器都直接将协议头隐藏,需要复制出地址,或者点击地址栏才能看到,比较麻烦。 浏览器支持通…

Docker 部署 jar 项目

文章目录 1、上传jar包2、新建 Dockerfile 文件3、新建 deploy.sh 脚本(创建并运行)4、新建 upgrade.sh 脚本(更新) 1、上传jar包 2、新建 Dockerfile 文件 添加jar包及修改端口 # 基础镜像 FROM java:8 # 添加jar包 ADD servic…

【STM32】基于stm32的阿里云智能家居

摘 要 智能家居是一种通过物联网将家里的各种电器设备连接在一起,并由中心控制器统一管理的信息系统。系统的核心是各类家居信息的采集与处理。阿里云能够提供云端的数据存储和分析功能,可以作为智能家居中心控制器的重要平台。 本文主要研究了基于阿里云…

WPF 控件设置透明度的方法

方法一:通过 Opacity 属性设置背景色透明度。范围从0-1,0表示完全透明,看不见。 通过 Opacity 属性去改变控件透明度 会影响子控件的透明度,是因为Opacity属性是在UIElement 类(以及Brush基类)中定义,所有元素都具有该…

Unity VR 开发教程:Meta Quest 一体机开发 (二)混合现实 MR 透视 Passthrough 环境配置

文章目录 📕教程说明📕配置透视的串流调试功能📕第一步:设置 OVRManager📕第二步:添加 OVRPassthroughLayer 脚本📕第三步:在场景中添加虚拟物体📕第四步:删除…

系统架构设计师 5:软件工程

一、软件工程 1 软件过程模型 软件要经历从需求分析、软件设计、软件开发、运行维护,直至被淘汰这样的全过程,这个全过程称为软件的生命周期。 为了使软件生命周期中的各项任务能够有序地按照规程进行,需要一定的工作模型对各项任务给予规…

JavaScript进阶----《getter 和 setter 是什么》

前言: 这两个属性在学习前端的时候看到过,但是由于项目中没有用到过,所以一直没有细致的了解。今天 review 同事代码的时候,遇到了这个写法,看了半天也不知道如何处理。再不学习真的以后连别人的代码都不知道什么意思了…

spring Cloud使用Skywalking搭建笔记

skywalking支持dubbo,SpringCloud,SpringBoot集成,代码无侵入,通信方式采用GRPC,性能较好,实现方式是java探针,支持告警,支持JVM监控,支持全局调用统计等等,功…

uniapp 中 引入vant组件 和 vant 报错Unclosed bracket 的问题解决

在uniapp 中引入vant组件,遇到一个报错,所以在此记录一下完整过程 一、引入vant组件 方式一:前往 GitHub官网 Vant 下载压缩文件,获取下载中的dist 文件 方式二:通过npm install 方式引入 npm i vant/weapp -S --pr…

Android Studio 找不到 uploadArchives 入口

在4.2之前版本的 Android Studio 中想要module 打包arr,上传Maven 我们只需要 在对应module的build.gradle文件顶部添加 apply plugin: maven然后每一次修改记得要修改版本号,相同版本号提交失败,是不会覆盖的 defaultConfig {......versi…