基于骨骼的行为识别笔记(NTU RGBD数据集解析)

2023-11-18

1. 人类行为(层次):

  1. 身体的一部分移动(比如手势识别)
  2. 单个人类活动(比如跑步、拳击)
  3. 两个或者两个以上的多人交互活动(会议握手)
    多人团体活动(篮球比赛、足球比赛)

2. 输入数据

  1. RGB video
  2. RGBD video(有深度信息、基于骨架)

3. 基于骨架的行为识别

输入:骨架序列(video)
输出:动作类别标签
来源:Kinect,Human pose estimation algorithms
优点:不受环境的干扰,数据量级小,可以实现端到端的系统

4. 数据集

目前使用的是NTU RGBD中的Action Recognition中的3D skeletons(body joints),大小为5.8GB。

4.1 NTU RGBD

4.1.1 下载方式

下载地址:http://rose1.ntu.edu.sg/datasets/login.asp?DS=3

4.1.2 Benchmark

  • Cross-Subject
    我们将40个志愿者划分为training和testing团体。每个团体包含20个志愿者,其中1,2,4,5,8,9,13,14,15,16,17,18,19,25,27,28,31,34,35,38为训练集,其余为测试集。
  • Cross-View
    我们将cameras2和3作为训练集,1为测试集。
    4.1.3 Skeleton数据集详解
    否NTU RGBD包含60个动作种类以及56880个录像。数据集是由三个kinect V2摄像机实时捕获。NTU RGBD数据集中的RGB录像大小为19201080,深度矩阵和红外录像大小为512424。而在3D skeletal数据集中包含志愿者在每一帧的三维坐标(包含每帧25个主要身体关节的三维位置)。3D骨骼节点信息是通过Kinect相机中的骨骼追踪技术获得的。

在这里插入图片描述
每个数据集的格式为SsssCcccPpppRrrrAaaa(eg:S001C001P001R001A001.skeleton)。每个符号代表的意思分别为:

  • sss是下载的顺序号(整个数据集特别大,所以要分开放)
  • ccc是摄像头ID,分别是degree、front、side
  • ppp是志愿者编号
  • rrr是同一个动作的表演次数
  • aaa动作类别

关于具体如何使用该数据集,简单代码实现为(matlab):https://github.com/shahroudy/NTURGB-D/blob/master/Matlab/read_skeleton_file.m
事实上,在打开skeleton文档后,我们看到的是如下画面:
在这里插入图片描述

  • 102表示共有102帧3d骨架图;
  • 1是指单张骨架图中有多少骨架,
  • 72057594037931691是指追踪的骨架编号;
  • 接下来是6个整型数,分别是clipedEdges,handLeftConfidence,handLeftState,handRightConfidence,handRightState,isResticted,
  • 该行接下来是骨架的x,y偏置(骨架位置?),该行最后一个数字是该骨架的trackingState(?);
  • 25表示有25个关键点(关节)信息,接下来有25行;每个关键点信息行上有11个数据,前三个是关键点的3D位置(x,y,z),第四五个是在2D帧中的位置(用于匹配IR帧),第六第七个是在2D帧中的位置(用于匹配RGB帧),第八第九第十第十一是该关键点的方向(WXYZ)
  • 第十二个是该关键点的trackingState(?)
    是keleton的60个动作类别

5. 相关论文

5.1 Skeleton-based Action Recognition with Convolution Neural Networks(2017.8 海康威视)

5.1.1 论文亮点

  1. 在该论文发表之前,大部分的基于骨骼的行为识别都使用了LSTM网络,并以LSTM为基础进行改进。该论文提出了双流CNN,取得了比起LSTM(STA-LSTM、VA-LSTM)更快更好的结果(在NTU RGBD数据集上达到了89.3%的准确度)。
    事实上,双流CNN(2014)并不是该论文的首创。在传统的数据集(基于视频而非人体骨架的数据集)上,双流CNN一直都是主流算法。在RGB视频数据集上,双流CNN的输入为原始RGB图和光流图。
  2. 该论文使用的双流CNN是第一次在基于骨骼的动作识别上使用的RCNN
    在这里插入图片描述
  3. 上图是论文设计的用于裁剪后(代码实现为30帧)的骨骼序列识别高效CNN网络。输入分为两部分,一部分是正常的骨骼序列,一部分是连续序列的移动(motion,从代码上实现其实就是相邻两帧之间做差)。论文同时提出了一种新的结构叫Skeleton Transformer(事实上是一种线性函数),这种网络结构据说可以自动学习一种更好的骨架排序,比人工选取相应的骨架有更好的效果(有点类似于注意力机制,选择更加重要的骨架,选择更重要的帧)。为了处理多骨架任务,使用了maxout来合并不同骨架的特征。每一个骨架最后的输入其实是T(帧数)*N(骨架数)*3的图像。
  4. 论文网络中未执行任何的正则化。
  5. 在这里插入图片描述

5.2 Co-ocurrence Feature Learning from Skeleton Data for Action Recognition and Detection with Hierachial Aggregation(2018.8)

5.2.1 论文亮点

  1. 论文指出基于骨骼行为识别任务要解决两个方面的问题:首先是,同一帧内骨架同时出现的表示;然后是骨架随时间变化的帧间表示
  2. 论文提出一种端到端的卷积共现(co-occurrence)特征学习框架,这种共现特征是以分层的方式进行学习,这种分层使不同层次的语义信息逐渐聚合。
  3. CNN模型卓越的能力在抽象高层次的信息,它们能够使用来从骨架中学习时空特征[Du et al.,2016;Ke at al.,2017]。
  4. 由于在空间维度的权值共享,CNN模型不能够学习到所有骨架的参数,这些是论文提出一个能够从所有骨架得到整体反馈来探索不同骨架之间的相关性。
    在这里插入图片描述
  5. 如上图,在最开始,输入的大小是framesjoints3,在红色(0,2,1)部分,joints变为了channel。这里的依然使用的是双流CNN的想法,一个输入是frames,一个输入是motions。
  6. 在这里插入图片描述
  7. 不同的人在第六层卷积后进行融合。
    在这里插入图片描述
  8. 最后的损失函数使用了交叉熵。
    在这里插入图片描述

5.3 Skeleton-based action recognition with synch(2019.6.12)

5.3.1 论文亮点

  1. 提出了一种残差频次注意力机制(rFA,residual frequency attention)来关注一些经常出现的域;同时提出了一种同步局部以及非局部的块(SLnL,synchronous local and non-local)来捕获在时空域的细节和语义。
  2. 可以从下图看出,经过transformed的图像进入rFA,之后会进行2D的FFT(快速傅里叶变化,FFT是计算机实现离散傅里叶变化DFT的算法)
    在这里插入图片描述
    在这里插入图片描述
  3. 论文提出了一种软边界聚焦损失(SMFL,soft-margin focal loss),用来优化整个网络,该损失函数可以帮助自动数据选择和强化分类器内部的边界。
  4. 文章指出之前的RNN、CNN、GCN有两个严重的问题:首先,之前的操作基本都是在相邻的局部操作,因此局部细节信息和全局语义信息在在低层和高层异步获取,阻碍了动作在细节和语义上的融合;其次,人类动作类似握手、刷牙、鼓掌有频次的特征,但是之前的工作受时空动力学的限制,并且忽略了周期性和经常性的域。这也是rFA和SLnL提出的原因。
    在这里插入图片描述
  5. 在时空域同步局部和非局部学习的示意图如下:
    在这里插入图片描述
  6. 软边界聚焦损失:对于分类任务有一项非常重要的困难,那就是如何增强各个类别之间的不同,目前有两种方法:数据挑选或者边界增强。直观上讲,一个样本的预测的置信度越高,它可能离预测边界越远。因此,论文提出了一种SM(soft-margin)损失
    在这里插入图片描述
    其中,Pt为置信度,m为边界(margin)参数。
    我们将交叉熵和软边界损失进行了结合,得出了软边界交叉熵(SMCE)损失
    在这里插入图片描述
    Focal loss是用来解决正负样本不平衡,解决易分反例样本导致的整体学习方向跑偏:
    在这里插入图片描述
    其中,y是一个聚焦参数。
    类似于SMCE,我们将SM损失与FL损失结合,提出SMFL损失函数:
    在这里插入图片描述
    我们将双流CNN的两个部分分别计算损失,并将两者结合之后也计算了损失,最后的整体损失函数为:
    在这里插入图片描述

5.4 Actional-Structural Graph Convolutional Networks for Skeleton-based Action Recognition(2019 CVPR)

5.4.1 论文亮点

  1. 文章提出了A-link Inference Module(AIM)来推断能够捕获特殊动作潜在依赖性的actional links(A-link)
  2. 文章提出了动作结构性图卷积网络(AS-GCN)在多图中提取有用的时间空间信息。
  3. 文章引入了一种额外的预测姿态的机制,通过捕获细节动作信息来提高分类的准确度。
  4. 下图是A-links和S-links的一个解释:下如是一个“走路”的表示,其中a是骨骼图,是人体骨骼的自然连接;b是结构连接允许左手与手臂进行连接;c是动作连接,捕获一个长时间的特定动作关联。
    A-links: 许多人类动作需要长距离的关节点配合移动,这是一种关节点间的非物理依赖。为了捕获对不同动作相应的依赖,我们引入了A-links。A-links是由任意两个关节点通过动作生成。为了从动作中自动地推断A-links,我们提出了AIM(A-link inference module)。
    在这里插入图片描述
  5. 下图是AIM的数据流图,为了在两个关节点之间推测出A-link,关节点特征被串联起来放入AIM的自编码器结构。编码器生成A-link,解码器根据A-link和之前的动作生成未来的姿态预测。
    在这里插入图片描述
  6. 下图是ASGCN的整体流程图,
    在这里插入图片描述

5.5 Skeleton-Based Action Recognition with Directed Graph Neural Networks(2019CVPR)

5.5.1 论文亮点

  1. DGNN(有向图神经网络)
    在这里插入图片描述
  2. 由于是一个有向图,那么相邻两点之间就包含位置和方向,这里的位置就是关节点,而方向则是骨骼;边缘骨骼信息是由两点坐标之差进行表示。图片1里的根节点被定义为重心(蓝色点),每一个边只有一个源点和目标点。同时使用关节点信息和边缘骨骼信息的好处之一是可以快速推断出关节的角度。
  3. 在下图中,a是原始的图;b是顶点更新的过程,其中顶点本身的属性v2和它的传入边(e1)以及传出边(e2和e3)的属性组合在一起来获得更新的顶点v2’;c是边缘骨骼更新的过程,e1本身的属性以及它的源点v1’、目标点v2’的属性组合进行更新,
    在这里插入图片描述
  4. Directed graph network block(DGN block)在有向图神经网络中是一种基本模块,它包含了两个更新函数(更新关节点和边缘骨骼的值)和两个聚合函数(用于聚合连接到一个顶点的多条传入(传出)边中包含的属性)。设计聚合函数的原因是连接到每个顶点的传入(传出)边的数量是变化的,而参数是固定的。又因为这些边没有明显的顺序,所以聚合函数应该对其输入的排列保持不变,并可以接受可变数量的参数,比如平均池化、最大池化和逐元素求和。
  5. 关于具体的v和e的更新过程如下:
    对于每个顶点v,所有的指向它的边通过传入聚合函数g1(e-)处理,返回聚合后的结果 e ˉ − \bar{e}- eˉ
    对于所有由v发出的边都由传出聚合函数g2(e+)处理,返回聚合后的结果 e ˉ + \bar{e}+ eˉ+
    ( v ,   e ˉ − , e ˉ + ) (v,\ \bar{e}-,\bar{e}+) (v, eˉ,eˉ+)进行串联后输入顶点更新函数h1,返回更新后的v;
    对于每个边e,它的源点、它的目标点以及它自己串联后输入边更新函数h2,返回更新后的e。
    总之,整体的过程就是先进行顶点的更新,之后进行边的更新。
  6. 通过大量的实验,我们选择了平均池化作为聚合函数来处理输入边和输出边,并选择了全连接层作为更新函数
  7. 输入分为两部分:CTNv和CTNe;其中C是通道数,一般为2或3(关节点的坐标);T是帧数;Nv是关节点数;Ne是骨骼边缘数。论文设计了一种关联矩阵 A i j ,   i = 1 , … ,   N v ; j = 1 , … ,   N e ; A_{ij},\ i=1,\ldots,\ Nv;j=1,\ldots,\ Ne; Aij, i=1,, Nv;j=1,, Ne;这里的A是用来关联vj和ei之间的关系;以下是关联矩阵A的细节部分:
    如果vi是ej的源顶点,那么Aij=-1;
    如果vi是ej的目标顶点,那么Aij=1;
    其余则是Aij=0。

    为了将关联矩阵中的源顶点和目标顶点分开,与A矩阵相似,我们设计了 A s A^s As A t A^t At来表示源头关联矩阵。
    在这里插入图片描述
    给定一个输入张量和关联矩阵,我们可以过滤得到所需的顶点和边,通过矩阵乘法来聚合函数。比如,当我们得到一个CTNv的顶点矩阵时,我们通过该矩阵与 A s A^s As相乘得到CTNe张量,这个张量的每个元素对应的是顶点对应边的源顶点的和。我们使用的聚合函数是平均池化操作,关联矩阵需要进行规范化(normalized)。我们将规范化后的矩阵A定义为 A ~ = A Λ − 1 \widetilde{A}=A\Lambda^{-1} A =AΛ1,其中Λ是一个对角矩阵 Λ i i = ∑ j A i j + α \Lambda_{ii}=\sum_{j}{A_{ij}+\alpha} Λii=jAij+α其中α是一个很小的数,避免矩阵不可逆。论文设计的更新函数具体公式如下:
    在这里插入图片描述
    其中H是一个单层全连接网络,论文在每个DGN block中添加了BN层和ReLU层。
  8. DGN块的输入是根据人体自然结构来设计的,但论文作者认为,人体的自然结构并不能适合所有种类的行为识别,比如拍手这个动作,左右手之间的关系对于识别非常重要,但左手和右手之间并没有联系。我们可以将邻接矩阵A作为模型的参数,但在前几个epoch中保持参数不变。这样前期保持A参数不变可以简化训练,而后期变更参数则为图提供了更大的灵活性。
  9. 伪3D CNN(pseudo-3D CNN)在基于RGB的动作识别领域取得了很大的成果。P3D CNN是利用(1,3,3)的空间卷积(深度可分离卷积)和(3,1,1)的时间卷积(点卷积)来近似代替(3,3,3)的3D卷积思想。论文同时也利用了P3D的思想,在时间维度上也进行了点卷积。和DGN块一样,每个点卷积之后都要添加一个BatchNormal以及ReLU来组成Temporal convolutional block(TCN),最后由softmax来输出。
  10. 论文同样使用了双流网络,即骨骼点本身、相邻时间的骨骼点的差作为输入,这一点是延续了之前双流CNN的一个设计思想。在网络的最后使用softmax作为输出,两个网络的softmax相加作为结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于骨骼的行为识别笔记(NTU RGBD数据集解析) 的相关文章

随机推荐

  • sql 2008 R2 修改数据库表编辑行200小技巧

    在使用sql server 2008 R2时 有时候要打开一个表 看里面的数据 发现只能编辑前面200行 如下图 如果我的数据库表的数据 超过200 怎么办呢 其实只要修改下配置 就可以了 如下图 点击选项 进入选项界面 如下图 在sql
  • nginx配置主域名跳转www域名并支持ssl

    server listen 80 listen 443 ssl server name xxxx com return 301 https www xxx com request uri server listen 80 server na
  • 视频转码后有色差要如何处理

    目录 视频转码后有色差要如何处理 KEY COLOR STANDARD KEY COLOR RANGE 视频转码后有色差要如何处理 以下是回答 欢迎大家留言讨论补充 1 色差是如何产生的 1 有损压缩产生的质量损失 解决方法为尽可能的提高码
  • 如何用计算机计算log除法,对数计算器_如何使用计算器计算对数

    如何使用计算器计算对数 示例 使用Windows自带的计算器 这理假设要计算的对数是logaN a 32 N 2 1 打开计算器 快捷键WIN R 输入calc 然后回车 怎样使用科学计算器计算对数 计算机上的log都是默认以10为底的对数
  • c语言实现面向对象编程(const * ,* const)

    c语言实现面向对象编程 面向对象思想 封装 继承 多态 代码实现 函数签名及返回值的约定 const 重载 参考了onlyshi的博客代码 orz传送门 参考了嵌入式实践一些代码 这里就不加了 面向对象思想 面向对象编程 OOP 并不是一种
  • 千年虫及UNIX时间

    转自 http hi baidu com dugucloud blog item b903ba803e5192c59123d99d html 千年虫何来 在上个世纪 许多计算机系统只用二进制7 8位数 足够十进制二位数使用 表示年份 比如说
  • ANR触发机制分析

    ANR是一套监控Android应用程序响应是否及时的机制 可以把发生ANR比作是引爆炸弹 那么整个流程包含三部分组成 埋定时炸弹 system server进程启动倒计时 在规定时间内如果目标应用进程没有干完所有的活 则system ser
  • MySQL的基本语法

    Welcome Huihui s Code World 接下来看看由辉辉所写的关于MySQL的相关操作吧 目录 Welcome Huihui s Code World 一 数据库 建立 查看 使用 删除 建库 查看数据库 使用数据库 删除数
  • decrypt()解密和encrypt()加密

    1 解密函数 select dbo decrypt StName from student 2 加密函数 select dbo encrypt StName from student
  • CxImage的编译及简单使用举例

    1 从http sourceforge net projects cximage 下载最新的CxImage 702源码 2 解压缩后 以管理员身份打开CxImageFull vc10 sln工程 在编译之前先将每个工程属性的Characte
  • Vue中props组件和slot标签的区别

    在 Vue 中 props 和 slot 都是组件之间进行通信的机制 它们的作用和应用场景有一些区别 props 是一种组件的数据传递机制 通过在父组件中以属性的形式向子组件传递数据 子组件接收这些数据 并可以进行相应的处理和渲染 prop
  • 每日一练——day2

    前言 小亭子正在努力的学习编程 接下来将开启编程题的练习 分享的文章都是学习的笔记和感悟 如有不妥之处希望大佬们批评指正 同时如果本文对你有帮助的话 烦请点赞关注支持一波 感激不尽 第一题 题目描述 链接 https www nowcode
  • Jenkins执行python代码

    在ide运行正常 在jenkins运行提示 模块不存在 找了一圈 原来是jenkin运行python的环境没设置 解决方式 在Manage Jenkins System Configuration Configure System中设置全局
  • WSL2连接到宿主Windows程序的网络代理设置

    WSL2想要连上宿主机Windows里设置的网络代理端口很是蛋疼 前置条件 PS C Users overlord gt wsl l v NAME STATE VERSION Ubuntu 20 04 Running 2 获取Host和WS
  • Consul的简介与安装

    1 Consul简介 Consul是一套开源的分布式服务发现和配置管理系统 由HashiCorp公司用Go语言开发 Consul提供了微服务系统中的服务治理 配置中心 控制总线等功能 这些功能中的每一个都可以根据需要单独使用 也可以一起使用
  • wsl配置

    文章目录 1 systemd服务开启 2 固定IP 2 1 官网的方案 2 2 通过WSL2的Linux子系统设置静态IP 2 3 其他方案 3 运行 Linux GUI 应用安装 Chrome 浏览器 此文接我放弃了VMware 1 sy
  • vue(3)调整 App.vue 文件和router路由

    调整 App vue 文件 我们先把默认项目里面没用的东西先删除掉 把代码调整为下面的样子
  • js延迟加载的性能优化

    js的延迟加载有助于提高页面的加载速度 特别是竞价优化站是有一定的好处 今天来说说我是如何优化竞价站打开速度 案例 http yzmb pengchenggroup cn 动态创建DOM方式
  • 每日一题——有向网的邻接矩阵、邻接表、逆邻接表创建、打印及深度、广度遍历

    有向网的三种创建和深度广度遍历 include
  • 基于骨骼的行为识别笔记(NTU RGBD数据集解析)

    目录 1 人类行为 层次 2 输入数据 3 基于骨架的行为识别 4 数据集 4 1 NTU RGBD 4 1 1 下载方式 4 1 2 Benchmark 5 相关论文 5 1 Skeleton based Action Recogniti