飞桨花滑骨骼点动作识别比赛——从 baseline 调优讲解

news2024/11/25 10:34:00

  • 赛题介绍
    • 背景
    • 数据集
  • 思路讲解
    • backbone 模型
    • 文件结构 -- PaddleVideo 框架
      • configs 文件夹
      • paddlevideo 文件夹
  • 模型介绍
    • 1. ST-GCN -- Baseline 模型
      • 整体结构
      • GCN部分
      • TCN部分
    • 2. 2s-AGCN
      • 自适应图卷积
      • 双流网络
    • 3. CTR-GCN
      • CTR-GC

赛题介绍

背景

2021 CCF BDCI 基于飞桨实现花样滑冰选手骨骼点动作识别赛题再开放,旨在探索基于骨骼点的细粒度人体动作识别方法,要求参赛选手构建基于骨骼点的时空细粒度动作识别模型,完成测试集的动作识别任务。

人体运动分析是近几年众多领域研究的热点问题。在学科交叉研究方面,人体运动分析涉及到计算机科学、运动人体科学、环境行为学和材料科学等。随着相关研究的逐步深入以及计算机视觉、5G通信的飞速发展,人体运动分析技术已应用于自动驾驶、影视创作、安防异常事件监测和体育竞技分析、康复等实际场景,人体运动分析已成为人工智能领域研究的前沿课题,此类研究也将在竞技体育、运动康复、日常健身等方面发挥非常重大的意义。

然而,目前的研究数据普遍缺少细粒度语义信息,导致现存的分割或识别任务缺少时空细粒度动作语义模型。相较于图片细粒度研究,时空细粒度语义的人体动作具有动作类内方差大、类间方差小等特点,这将导致由细粒度语义产生的一系列问题,而利用粗粒度语义的识别模型进行学习也难以获得理想的结果。

数据集

在本次比赛最新发布的数据集中,所有视频素材均从2017-2020 年的花样滑冰锦标赛中采集得到。源视频素材中视频的帧率被统一标准化至每秒30 帧,图像大小被统一标准化至1080 * 720 ,以保证数据集的相对一致性。之后通过2D姿态估计算法Open Pose,对视频进行逐帧骨骼点提取,最后以.npy格式保存数据集。请各位选手基于本次比赛最新发布的训练集数据训练模型,并基于本次比赛最新发布的测试集数据提交对应结果文件。

|–train.zip
|–train_data.npy
|–train_label.npy
|–test_A.zip
|–test_A_data.npy
|–test_B.zip
|–test_B_data.npy
  • 本次比赛最新发布的数据集共包含30个类别,训练集共2922个样本,A榜测试集共628个样本,B榜测试集共634个样本;
  • train_label.npy文件通过np.load()读取后,会得到一个一维张量,张量中每一个元素为一个值在0-29之间的整形变量,代表动作的标签;
  • data.npy文件通过np.load()读取后,会得到一个形状为N×C×T×V×M的五维张量,每个维度的具体含义如下:

在这里插入图片描述

  • 骨架示例图:

在这里插入图片描述

思路讲解

这些过程都在该项目的各个版本中。
Steps:

  1. 模型选择 -> CTR-GCN
  2. 优化(针对数据集的类别不平衡和序列长度不均问题)
  3. 高阶特征提取,多流框架
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

backbone 模型

介绍了三种模型,ST-GCN 是比赛提供的 Baseline 模型,在此基础上,实现了 2s-AGCN 和 CTR-GCN 模型。见下文模型介绍。

在这里插入图片描述

三种模型均基于大赛提供的 PaddleVideo 框架。

文件结构 – PaddleVideo 框架

博文参考:PaddleVideo 简介以及文件目录详解

PaddleVideo 是一个基于飞桨的视频理解工具库,它支持视频数据标注工具、轻量化的RGB和骨骼点的行为识别模型、以及视频标签和运动检测等实用应用。

configs 文件夹

configs 文件夹存放各种模型和数据集的 配置文件。PaddleVideo 支持 通过修改配置文件实现不同的模型和数据集的组合,以及进行 模型训练、测试、推理等操作

PaddleVideo 分类别 存放不同模型和数据集的配置文件:
PaddleVideo/configs/ 下有 recognition(行为识别)、segmentation(视频分割)、localization(动作定位)、detection(动作检测) 等文件夹。

举例来说, recognition 文件夹下有很多行为识别方向的模型和数据集的 配置文件,如图:

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

paddlevideo 文件夹

paddlevideo 文件夹存放 视频模型库相关的代码和文件 的文件夹。

  • paddlevideo/utils 文件夹中包含了一些 通用的工具函数预处理方法,用于 辅助视频数据的加载、预处理和后处理 等。
  • paddlevideo/tasks 文件夹的作用是存放一些 用于定义和执行不同的机器学习任务的类或函数
  • paddlevideo/loader 文件夹的作用是存放一些用于 加载和处理数据 的类或函数。
  • paddlevideo/modeling 文件夹的作用是存放一些用于 构建和定义模型 的类或函数。
  • paddlevideo/solver 文件夹的作用是存放一些用于 优化和求解模型 的类或函数。
  • paddlevideo/metrics 文件夹存放一些用于 评估模型性能的指标 的类或函数。

模型介绍

1. ST-GCN – Baseline 模型

整体结构

ST-GCN是AAAI 2018中提出的经典的基于骨骼的行为识别模型,不仅为解决基于人体骨架关键点的人类动作识别问题提供了新颖的思路,在标准的动作识别数据集上也取得了较大的性能提升。算法整体框架如下图所示:


ST-GCN算法示意图

时空图卷积网络模型 ST-GCN 通过将图卷积网络(GCN)和时间卷积网络(TCN)结合起来,扩展到时空图模型,设计出了用于行为识别的骨骼点序列通用表示,该模型将人体骨骼表示为图,其中图的每个节点对应于人体的一个关节点。图中存在两种类型的边,即符合关节的自然连接的空间边(spatial edge)和在连续的时间步骤中连接相同关节的时间边(temporal edge)。在此基础上构建多层的时空图卷积,它允许信息沿着空间和时间两个维度进行整合。

ST-GCN 的网络结构大致可以分为三个部分,首先,对网络输入一个五维矩阵 ( N , C , T , V ; M ) \left(N,C,T,V;M\right) (N,C,T,V;M).其中N为视频数据量;C为关节特征向量,包括 ( x , y , a c c ) \left(x,y,acc\right) (x,y,acc);T为视频中抽取的关键帧的数量;V表示关节的数量,在本项目中采用25个关节数量;M则是一个视频中的人数,然后再对输入数据进行Batch Normalization批量归一化,接着,通过设计ST-GCN单元,引入ATT注意力模型并交替使用GCN图卷积网络和TCN时间卷积网络,对时间和空间维度进行变换,在这一过程中对关节的特征维度进行升维,对关键帧维度进行降维,最后,通过调用平均池化层、全连接层,并后接 SoftMax 层输出,对特征进行分类。



ST-GCN模型结构示意图

GCN部分

图卷积网络(Graph Convolutional Network,GCN)借助图谱的理论来实现空间拓扑图上的卷积,提取出图的空间特征,具体来说,就是将人体骨骼点及其连接看作图,再使用图的邻接矩阵、度矩阵和拉普拉斯矩阵的特征值和特征向量来研究该图的性质。
在原论文中,作者提到他们使用了「Kipf, T. N., and Welling, M. 2017. Semi-supervised classification with graph convolutional networks. In ICLR 2017」中的GCN架构,其图卷积数学公式如下:
f o u t = Λ −   1 2 ( A + I ) Λ −   1 2 f i n W f_{out}=\Lambda^{-\ \frac{1}{2}}\left(A+I\right)\Lambda^{-\ \frac{1}{2}}f_{in}W fout=Λ 21(A+I)Λ 21finW

其中, f o u t f_{out} fout为输出,A为邻接矩阵,I为单位矩阵, A i i =   ∑ j ( A i j + I i j ) A^{ii}=\ \sum_{j}{(A^{ij}+I^{ij})} Aii= j(Aij+Iij), W是需要学习的空间矩阵。
原文中,作者根据不同的动作划分为了三个子图 ( A 1 , A 2 , A 3 ) \left(A_1,A_2,A_3\right) (A1,A2,A3),分别表达向心运动、离心运动和静止的动作特征。



骨骼点子图划分

在实际的应用中,最简单的图卷积已经能达到很好的效果,所以实现中采用的是 D − 1 A D^{-1}A D1A图卷积核。D为度矩阵。

TCN部分

ST-GCN单元通过GCN学习空间中相邻关节的局部特征,而时序卷积网络(Temporal convolutional network,TCN)则用于学习时间中关节变化的局部特征。卷积核先完成一个节点在其所有帧上的卷积,再移动到下一个节点,如此便得到了骨骼点图在叠加下的时序特征。对于TCN网络,项目中通过使用 9 × 1 9\times1 9×1的卷积核进行实现。为了保持总体的特征量不变,当关节点特征向量维度©成倍变化时,步长取2,其余情况步长取1。

2. 2s-AGCN

参见博文:
2s-AGCN 论文解读
2s-AGCN 代码理解

2s-AGCN 是发表在CVPR2019上的一篇针对 ST-GCN 进行改进的文章,文章提出双流自适应卷积网络,针对原始 ST-GCN 的缺点进行了改进。在现有的基于 GCN 的方法中,图的拓扑是手动设置的,并且固定在所有图层和输入样本上。另外,骨骼数据的二阶信息(骨骼的长度和方向)对于动作识别自然是更有益和更具区分性的,在当时方法中很少进行研究。因此,文章主要提出一个基于骨架节点和骨骼两种信息融合的双流网络,并在图卷积中的邻接矩阵加入自适应矩阵,大幅提升骨骼动作识别的准确率,也为后续的工作奠定了基础(后续的骨骼动作识别基本都是基于多流的网络框架)。

从名字可以看出,文章主要创新点有两个,一个是自适应性,另外一个是双流网络。

自适应图卷积

这是针对 ST-GCN 的第一个缺点进行的改进,对邻接矩阵进行了改进。

图的拓扑实际上是由邻接矩阵和掩码决定的,分别为 A k A_k Ak M k M_k Mk A k A_k Ak 决定了两个顶点之间是否有连接 M k M_k Mk 决定了连接的强度。为了使图结构自适应,将公式改为如下形式: f o u t = ∑ k K v W k f i n ( A k + B k + C k ) (3) \mathbf f_{out} = \sum^{K_v}_k \mathbf W_k \mathbf f_{in}(\mathbf A_k + \mathbf B_k + \mathbf C_k)\tag{3} fout=kKvWkfin(Ak+Bk+Ck)(3)主要区别在于图的邻接矩阵,它分为三部分: A k A_k Ak B k B_k Bk C k C_k Ck

第一部分 ( A k ) (A_k) (Ak) 与 ST-GCN 原公式中原归一化 N × N N × N N×N 邻接矩阵 A k A_k Ak 相同,它代表人体的物理结构。

第二部分 ( B k ) (B_k) (Bk) 也是一个 N × N N × N N×N 邻接矩阵。与 A k A_k Ak 相比, B k B_k Bk元素在训练过程中与其他参数一起参数化和优化 B k B_k Bk 的值没有约束,这意味着图完全是根据训练数据学习的。注意,矩阵中的元素可以是任意值。它不仅表明两个关节之间是否存在连接,而且还表明连接的强度

第三部分 ( C k ) (C_k) (Ck) 是一个依赖于数据的图,它为每个样本学习一个唯一的图。

自适应图卷积层的总体结构如下图所示:

在这里插入图片描述
每一层共有三种类型的图,分别是 A k A_k Ak B k B_k Bk C k C_k Ck。橙色框表示该参数是可学习的。 ( 1 × 1 ) (1 × 1) (1×1) 为卷积核的大小, K v K_v Kv 表示子集的数量。 ⊕ ⊕ 表示按元素求和, ⊗ ⊗ 表示矩阵乘法。残差框(虚线)仅在 C i n C_{in} Cin C o u t C_{out} Cout 不相同时才需要。

在这里插入图片描述
上图为自适应图卷积块的说明,Convs 表示空间 GCN,Convt 表示时间 GCN,后面都有 BN 层和 ReLU 层。此外,为每个块添加一个残差连接。

在这里插入图片描述
上图为自适应图卷积层的说明,是基本块的堆栈。图中,每个块的三个数字分别表示输入通道数、输出通道数和步幅。GAP 表示全局平均池化层。

双流网络

我们使用 J-stream 和 B-stream 分别表示关节和骨骼的网络。整体架构(2s-AGCN)如下图所示。

在这里插入图片描述

给定一个样本,我们首先根据关节数据计算骨骼数据。然后将关节数据和骨骼数据分别输入 J-stream 和 B-stream。最后,将两个流的 s o f t m a x softmax softmax 分数相加,得到融合分数并预测动作标签。

3. CTR-GCN

参见博文:
CTR-GCN 论文解读
CTR-GCN 代码理解

CTR-GCN 是 ICCV 2021提出的基于骨骼的行为识别模型,通过将改动应用在具有拓扑结构的人体骨骼数据上的图卷积,使用时空图卷积提取时空特征进行行为识别,提升了基于骨骼的行为识别任务精度。

提出了一种新的通道拓扑优化图卷积(CTR-GC),以动态学习不同的拓扑,并有效地聚合不同通道中的关节特征,用于基于骨骼的动作识别。提出的 CTR-GC 通过学习共享拓扑作为所有通道的通用先验,并使用每个通道的特定通道相关性对其进行细化,从而对通道拓扑进行建模。

这篇文章最大的创新就是细化训练了拓扑结构,CTR-GCN 的代码完全基于2s-AGCN 改进的。


上图为所提出的通道拓扑优化图卷积的框架。基于通道的拓扑建模使用推断出的特定于通道的相关性来细化可训练的共享拓扑。特征转换的目的是将输入特征转换为高级表示形式。最终,通过通道聚合获得输出特征。

CTR-GC

CTR-GC 包含三个部分

  • 特征转换,通过变换函数 T ( ⋅ ) \mathcal T(·) T() 进行特征变换;
  • 通道拓扑建模,包括相关建模函数 M ( ⋅ ) \mathcal M(·) M() 和细化函数 R ( ⋅ ) \mathcal R(·) R()
  • 通道聚合,由聚合函数 A ( ⋅ ) \mathcal A(·) A() 完成。

给定输入特征 X ∈ R N × C \mathbf X∈\mathbb R^{N×C} XRN×C,则 CTR-GC 的输出 Z ∈ R N × C ′ \mathbf Z∈\mathbb R^{N×C'} ZRN×C 表示为 Z = A ( T ( X ) , R ( M ( X ) , A ) ) (2) \mathbf Z = \mathcal A( \mathcal T(\mathbf X) , \mathcal R( \mathcal M(\mathbf X) , \mathbf A ) ) \tag{2} Z=A(T(X),R(M(X),A))(2)其中 A ∈ R N × N \mathbf A∈\mathbb R^{N×N} ARN×N 为可学习共享拓扑。

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

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

相关文章

初识JavaScript---(1)

初识JavaScript———(1)!!! 一、初识JavaScript 1.什么是JavaScript? JavaScript是运行在浏览器上的脚本语言,简称JS。JavaScript程序不需要我们程序员手动编译,编写完源代码之后…

shell编程-02-变量作用域

作用域 局部变量:变量只能在函数内部使用 全局变量:变量可以在当前 Shell 进程中使用 环境变量:变量还可以在子进程中使用 局部变量 函数中定义的变量默认是全局变量,在定义时加上local命令,此时该变量就成了局部变…

Spring系列-10 事务机制

背景: 在 事务-1 事务隔离级别和Spring事务传播机制 中对事务的特性、隔离级别、Spring事务的传播机制结合案例进行了分析;在 事务-2 Spring与Mybatis事务实现原理 中对JDBC、Mybatis、Spring整合Mybatis实现事务的原理结合框架源码进行了介绍&#xff…

如何免费使用GPT-4模型

一、引言 OpenAI 最近发布了ChatGPT最新的 GPT-4 模型,这是 OpenAI 迄今为止发布的最强大的语言模型系统。它不仅有视觉能力,而且是多模态的,可以解释文本和生成图像。此外,它在推理测试中表现良好,可以支持大约26种不…

Redis的ZipList和QuickList和SkipList和RedisObject

ZipList:压缩列表,为了节省内存而设计的一种数据结构 ZipList是一种特殊的双端链表,是由一系列的特殊编码的连续内存块组成,不需要通过指针来进行寻址来找到各个节点,可以在任意一端进行压入或者是弹出操作,并且该操作…

RocketMQ的学习历程(5)----broker内部设计

文章目录 概要整体架构流程技术名词解释CommitLog和ConsumeQueue页缓存和内存映射刷盘机制 小结 概要 在首个学习历程中,我们已经了解了,RokctMQ简单的工作流程。 如果想要更深的理解RokcetMQ消息处理的流程,broker内部流程的理解是必要的&…

【挑战全站最全】Linux系统的安装与配置教程——以CentOS为例

🚀作者:那个叫马尔的大夫🚀 ⭐专栏:操作系统⭐ 🌼内容:主要分享一些关于Linux操作系统的知识 🥧不忘初心,砥砺前行~ 目录 一、用到的软件环境——虚拟机软件(必需&#…

调用函数不仅仅只是传递正确的参数类型

这里有一个新手犯下的一个典型错误。 假设,我们想调用这个函数,GetBinaryType。 void sample() { if (GetBinaryType(TEXT(“explorer.exe”), ????)) { … } } 请问,这里的问号处应该传递什么类型的参数?你可能会说&#x…

python、pyqt5实现人脸检测、性别和年龄预测

摘要:这篇博文介绍基于opencv:DNN模块自带的残差网络的人脸、性别、年龄识别系统,系统程序由OpenCv, PyQt5的库实现。如图系统可通过摄像头获取实时画面并识别其中的人脸表情,也可以通过读取图片识别,本文提供完整的程…

设计模式入门:策略模式

现有一套模拟鸭子游戏,可以一边游泳,一边呱呱叫。 每种鸭子都会呱呱叫和游泳,只是外观不同。因此,quack和swim放在父类中,display放在子类中实现。 增加新的功能:鸭子飞翔。 1 我们可能想到直接在父类中增…

LeetCode——最小化字符串长度

目录 一、题目 二、题目解读 三、代码 1、set去重 2、用一个二进制数记录每个字母是否出现过 一、题目 6462. 最小化字符串长度 - 力扣(Leetcode) 给你一个下标从 0 开始的字符串 s ,重复执行下述操作 任意 次: 在字符串…

聊一聊数据库事务的那些事(隔离级别,传播行为)

我们平时使用事务的时候,可能脑子里面想到和事务有关的知识点无非就是,ACID,事务隔离级别那一套,使用的事务也就是是通过注解的形式,或者手动开启事务。更细致一点的问题或许没有深究下去,比如事务的传播行…

STM32F407的PWM

文章目录 32的PWM资源PWM输出原理捕获/比较模式寄存器(TIMx_CCMR1/2)捕获/比较使能寄存器(TIMx_CCER)捕获/比较寄存器(TIMx_CCR1~4) 库函数版本的PWM波输出开启 TIM3 时钟以及复用功能时钟置 ,配…

对CT数据进行最小最大值归一化(Min-Max Normalization)和消除过暗过亮值处理

文章目录 PIL库的图像失真问题使用最小最大值归一化(Min-Max Normalization)预处理消除过暗过亮值pytorch中对tensor使用最小最大值归一化处理(torchvision.transforms) 我们在处理CT图像时(以dcm格式为例)…

全栈小程序开发路线

目录 个人心得: 我的学习路线 个人心得: 我擅长的是小程序开发和技术变现,从2021年至今开发上线20于个小程序,矩阵用户超过10万,变现10万左右。 以下是部分小程序截图,追风口做的小程序,基本…

「Win」Windows注册表介绍与操作

✨博客主页:何曾参静谧的博客 📌文章专栏:「Win」Windows程序设计 相关术语 Windows的注册表:是一个重要的系统组件,用于存储操作系统和应用程序的配置信息。它类似于一个数据库,包含了各种键值对、参数、设…

Vue报错:Error: error:0308010C:digital envelope routines::unsupported解决

问题 node 环境 Node.js v18.14.2 使用npm start.出现以下报错 Error: error:0308010C:digital envelope routines::unsupported at new Hash (node:internal/crypto/hash:71:19) at Object.createHash (node:crypto:133:10) at module.exports (F:\RuoYi-Cloud\CourseSched…

SWAT模型系统学习(建模方法、实例应用、高级进阶)

目前,水环境问题逐渐成为制约社会经济和环境可持续发展的重要因素。根据国内外研究表明,受全球环境变化和经济快速发展的影响,面源污染已逐渐成为水环境污染的第一因素。但面源污染由于具有排放分散、隐蔽,排污随机、不确定、不易…

搜索算法(三) 回溯法

1.回溯法 回溯法可以理解成一种特殊的深度优先算法,比起普通的DFS,多了还原当前节点的一步。 修改当前节点、递归子节点、还原当前节点。 本质是一种试错的思想。 维基百科: 2.例题 1) 力扣https://leetcode.cn/problems/pe…

树莓派安装系统

0. 实验准备 树莓派一个,TF卡(4GB以上)一个,读卡器一个 1. 使用官方提供的工具 在搜索引擎中搜索树莓派(不要用百度,建议使用必应的国际版进行搜索),我这里直接放上树莓派官方超链…