ST-GCN:骨骼动作识别的图卷积神经网络

一、ST-GCN简介

ST-GCN(Spatial Temporal Graph Convolutional Network)是一种基于图卷积神经网络的动作分类算法,能够对通过骨骼传感器采集到的人体运动数据进行分类。ST-GCN的核心思想是将骨骼序列建模为图结构,并且在这个图结构上进行卷积操作,从而捕捉时间和空间的相关性。这个算法的出现,极大地提高了人体运动的识别精度。

ST-GCN最早由瑞士苏黎世联邦理工学院(ETH Zurich)的谭依桐(Yitong Tang)团队在2017年的论文《2s-AGCN: Two-Stream Adaptive Graph Convolutional Networks for Skeleton-Based Action Recognition》中提出。该论文提出了一种双流ST-GCN模型,能够更好地处理不同动作的分布差异性。

二、ST-GCN的核心思想

ST-GCN的最大特点是使用图卷积神经网络(GCN)对骨骼序列进行分类,通过空间和时间上的变化来预测不同动作。因此,ST-GCN面临的主要问题是如何构建一个能够很好地反映空间和时间相关性的图形结构。

在构建图形结构之前,需要确定关节数量。ST-GCN使用的是C3D网络方法,对每个关节进行自我的建模,这使得ST-GCN在保持运动数据连续性的同时,能够在不同动作的起点和停止点之间更精确地建立联系。

接下来,需要对每个关节之间的关系进行建模,ST-GCN使用骨骼连接结构来表示骨骼间的关系,从而构建图形结构。在这个骨骼连接结构中,每个骨骼都被视为一个节点,并通过边相互连接。这里需要注意的是,边的长度在不同场景中是不同的,因此ST-GCN使用了一种自适应空间关系的方法,通过将边的时间信息考虑在内来捕捉不同场景中的空间相关性。

三、ST-GCN的网络架构

import torch.nn as nn
import torch.nn.functional as F
from st_gcn import st_gcn, st_gcn_3d
from functools import partial
    
class Model(nn.Module):
    def __init__(self, graph_args, in_channels, num_classes):
        super(Model, self).__init__()
        self.graph = graph_args
        self.data_bn = nn.BatchNorm1d(in_channels * self.graph['num_nodes'])
        self.layer1 = self._make_layer(1, 64, 1)
        self.layer2 = self._make_layer(64, 64, 1)
        self.layer3 = self._make_layer(64, 64, 1)
        self.layer4 = self._make_layer(64, 128, 2)
        self.layer5 = self._make_layer(128, 128, 1)
        self.layer6 = self._make_layer(128, 128, 1)
        self.layer7 = self._make_layer(128, 256, 2)
        self.layer8 = self._make_layer(256, 256, 1)
        self.layer9 = self._make_layer(256, 256, 1)
        self.fc = nn.Linear(256, num_classes)
        self.dropout = nn.Dropout(p=0.5)

    def _make_layer(self, in_channels, out_channels, stride):
        layer = []

        layer.append(st_gcn_3d(in_channels, out_channels, self.graph, stride=stride))
        layer.append(nn.BatchNorm2d(out_channels))
        layer.append(nn.ReLU())
        layer.append(st_gcn_3d(out_channels, out_channels, self.graph, stride=1))
        layer.append(nn.BatchNorm2d(out_channels))
        layer.append(nn.ReLU())

        return nn.Sequential(*layer)

    def forward(self, x):
        N, C, T, V, M = x.size()
        x = x.permute(0, 4, 3, 1, 2).contiguous()
        x = x.view(N * M, V * C, T)
        x = self.data_bn(x)
        x = x.view(N * M, C, V, T)
        x = x.permute(0, 3, 2, 1).contiguous()
        x = self.layer1(x)
        x = self.layer2(x)
        x = self.layer3(x)
        x = self.layer4(x)
        x = self.layer5(x)
        x = self.layer6(x)
        x = self.layer7(x)
        x = self.layer8(x)
        x = self.layer9(x)
        x = F.avg_pool2d(x, x.size()[2:])
        x = x.view(N, M, -1)
        ## Different pooling method according to taget task definition
        x = torch.mean(x, dim=1)
        x = self.dropout(x)
        x = self.fc(x)

        return x

上述代码为双流ST-GCN的实现。首先,我们定义了一个图形结构,并在构建模型时使用它。接下来,我们定义了一系列卷积层,这些卷积层对空间和时间上相关性进行建模。最后,我们使用全局平均池化层和全连接层对特征进行分类。

四、应用场景

ST-GCN的应用场景主要涉及人体运动数据的分类,例如动作识别等。除此之外,ST-GCN还可以应用到一些需要分类的动态图像数据上,例如手语识别等。

在工业应用方面,ST-GCN可以被应用到健康监测领域。通过安装骨骼连接传感器,ST-GCN可以对人体运动情况进行实时监测,预测并识别出一些不利于健康的运动行为,帮助人们更好地做出生活和运动上的决策。

五、总结

ST-GCN在动作分类领域取得了非常好的表现,成为目前最常用的骨骼动作识别算法之一。它的核心思想是通过构建图形结构,捕捉运动数据中的时间和空间相关性。ST-GCN的应用范围很广,对人体健康的监测也有很多潜在可行性。未来,ST-GCN还有许多可以改进的方向,例如优化图形结构、改进模型可解释性等。

原创文章,作者:WKKDC,如若转载,请注明出处:https://www.506064.com/n/371106.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
WKKDCWKKDC
上一篇 2025-04-23 00:48
下一篇 2025-04-23 00:48

相关推荐

  • 神经网络BP算法原理

    本文将从多个方面对神经网络BP算法原理进行详细阐述,并给出完整的代码示例。 一、BP算法简介 BP算法是一种常用的神经网络训练算法,其全称为反向传播算法。BP算法的基本思想是通过正…

    编程 2025-04-29
  • Python实现BP神经网络预测模型

    BP神经网络在许多领域都有着广泛的应用,如数据挖掘、预测分析等等。而Python的科学计算库和机器学习库也提供了很多的方法来实现BP神经网络的构建和使用,本篇文章将详细介绍在Pyt…

    编程 2025-04-28
  • 遗传算法优化神经网络ppt

    本文将从多个方面对遗传算法优化神经网络ppt进行详细阐述,并给出对应的代码示例。 一、遗传算法介绍 遗传算法(Genetic Algorithm,GA)是一种基于遗传规律进行优化搜…

    编程 2025-04-27
  • ABCNet_v2——优秀的神经网络模型

    ABCNet_v2是一个出色的神经网络模型,它可以高效地完成许多复杂的任务,包括图像识别、语言处理和机器翻译等。它的性能比许多常规模型更加优越,已经被广泛地应用于各种领域。 一、结…

    编程 2025-04-27
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • UE4骨骼重定向:全面解析

    骨骼重定向是游戏开发中一个非常重要的功能,尤其是在角色动画方面。在UE4中,使用骨骼重定向可以实现不同角色之间共用同一套动画,减少重复劳动,提高开发效率。本篇文章将详细阐述UE4中…

    编程 2025-04-25
  • 深入理解ANN人工神经网络

    一、什么是ANN人工神经网络 ANN人工神经网络(Artificial Neural Network)是一种模拟人类神经网络行为和功能的数学模型。它是一个由多个神经元相互连接组成的…

    编程 2025-04-25
  • 神经网络量化

    一、什么是神经网络量化? 神经网络量化是指对神经网络中的权重和激活函数进行压缩和量化,使得神经网络模型在保证较高精度的前提下,减小计算量和模型大小的方法。量化可以在不影响模型性能的…

    编程 2025-04-24
  • 亚像素卷积详解

    一、亚像素卷积的基本概念 亚像素卷积是一种计算机视觉领域的技术,是用于图像缩放的重要方法。图像缩放的目的是将一个图像的大小调整为另一个尺寸,从而使其在不同环境下更适合使用。亚像素卷…

    编程 2025-04-23
  • 脉冲神经网络

    脉冲神经网络(Spiking Neural Network, SNN)是模拟生物神经系统的一种计算模型。相较于其他神经网络模型,SNN最为贴近神经元的生理结构与生物功能,以脉冲为信…

    编程 2025-04-23

发表回复

登录后才能评论