图卷积网络进行骨骼识别代码_动作识别——人体骨架时空图卷积网络的关节图构造方法简介...

2d790bff33366ea5a2644e7320cf7df5.gif

人体骨架的动力学传达出一个重要信息,它会有助于人类动作识别的研究。本文将介绍来自港中文的Sijie Yan团队所做的工作,他们的论文《Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition》发表在近期的AAAI上。

用于建模骨架的常规方法通常依赖于手工制作的身体部位或遍历规则,因此导致表达能力有限和泛化困难。在本项工作中,港中文团队提出了一种动态骨架的新模型,称为时空图卷积网络(ST-GCN),它通过自动从数据中学习时空模式,超越了先前方法的局限。这种表述不仅产生更强的表达能力,而且具有更强的泛化能力。在Kinetics和NTU-RGBD这两个大型数据集上,与主流方法相比,它取得了实质性的改进。

66ab494f2da6b9f26005f52cb2cd3386.png

港中文团队论文的主要内容

66ab494f2da6b9f26005f52cb2cd3386.png

1 Introduction 

近年来,人类动作识别已成为活跃的研究领域,因为它在视频理解中起着重要作用。一般而言,人类行为可以从多种形式中识别,例如外观、深度、 光流和人体骨架。在这些方式中,动态的人体骨架通常传达重要的信息,这些信息是其他信息的补充。但是,与外观和光流相比,动态骨架的建模受到的关注相对较少。在这项工作中,团队系统地研究了这种模式,目的是开发一种有效的方法来对动态骨架建模并利用它们进行动作识别。

动态骨架模态可以由人类关节位置的时间序列,以2D或3D坐标的形式自然地表示,然后可以通过分析其动作模式来识别其动作。早期,使用骨架进行动作识别的方法只是在各个时间步上使用关节坐标来形成特征向量,然后对其进行时间分析。但这些方法的能力有限,因为它们未明确利用关节之间的空间关系,

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这里提供一个使用 PyG 训练 GCN 进行骨骼识别代码参考: ```python import torch import torch.nn.functional as F from torch_geometric.nn import GCNConv from torch_geometric.datasets import HumanProteinAtlas # 加载数据集 dataset = HumanProteinAtlas() data = dataset[0] # 构建模型 class Net(torch.nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = GCNConv(dataset.num_features, 16) self.conv2 = GCNConv(16, dataset.num_classes) def forward(self): x, edge_index = data.x, data.edge_index # 第一层卷积 x = self.conv1(x, edge_index) x = F.relu(x) x = F.dropout(x, training=self.training) # 第二层卷积 x = self.conv2(x, edge_index) return F.log_softmax(x, dim=1) device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model = Net().to(device) data = data.to(device) optimizer = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=5e-4) # 训练模型 model.train() for epoch in range(200): optimizer.zero_grad() out = model(data.x, data.edge_index) loss = F.nll_loss(out[data.train_mask], data.y[data.train_mask]) loss.backward() optimizer.step() # 测试模型 model.eval() _, pred = model(data.x, data.edge_index).max(dim=1) correct = float(pred[data.test_mask].eq(data.y[data.test_mask]).sum().item()) acc = correct / data.test_mask.sum().item() print('Accuracy: {:.4f}'.format(acc)) ``` 这个示例代码使用 HumanProteinAtlas 数据集进行训练,使用了两层 GCNConv。在训练过程,使用了 Adam 优化器和交叉熵损失函数。在测试过程,使用了准确率作为评估指标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值