STGCN(时空图卷积网络)详解:原理、结构与代码实现
创作时间:
作者:
@小白创作中心
STGCN(时空图卷积网络)详解:原理、结构与代码实现
引用
CSDN
1.
https://blog.csdn.net/qq_42980908/article/details/143606847
时空图卷积网络(STGCN)是一种结合了图卷积神经网络(GCN)和时间卷积网络(TCN)的深度学习模型,主要用于基于骨架图的动作识别任务。本文将详细介绍STGCN的原理、网络结构及其PyTorch实现。
STGCN介绍
STGCN是基于图卷积(GCN)的扩展,用于处理时空图数据。其输入是一系列骨架图,其中每个节点对应人体的一个关节,边分为两类:
- 空间边:符合节点自然连通性(图1中淡蓝色线条)
- 时间边:跨越连续时间步长连接相同节点(淡绿色线条)
网络结构
STGCN的网络结构主要包括三个部分:
- 归一化:对输入数据进行归一化处理
- 时空变化:通过多个ST-GCN块,每个块中交替使用GCN和TCN
- 输出:使用平均池化和全连接层对特征进行分类
ST-GCN块的详细结构
每个ST-GCN块包含以下步骤:
- 引入一个可学习的权重矩阵,与邻接矩阵按位相乘,得到加权后的邻接矩阵
- 将加权后的邻接矩阵与输入数据送入GCN进行运算
- 利用TCN网络实现时间维度信息的聚合
代码实现
以下是STGCN的完整PyTorch实现代码:
import torch
import torch.nn as nn
import torch.nn.functional as F
import numpy as np
# 空域图卷积
class SpatialGraphConvolution(nn.Module):
def __init__(self, in_channels, out_channels, s_kernel_size):
super().__init__()
self.s_kernel_size = s_kernel_size
self.conv = nn.Conv2d(in_channels=in_channels,
out_channels=out_channels * s_kernel_size,
kernel_size=1)
def forward(self, x, A):
x = self.conv(x)
n, kc, t, v = x.size()
x = x.view(n, self.s_kernel_size, kc//self.s_kernel_size, t, v)
x = torch.einsum('nkctv,kvw->nctw', (x, A))
return x.contiguous()
# STGCN块
class STGCN_block(nn.Module):
def __init__(self, in_channels, out_channels, stride, t_kernel_size, A_size, dropout=0.5):
super().__init__()
self.s_gcn = SpatialGraphConvolution(in_channels=in_channels,
out_channels=out_channels,
s_kernel_size=A_size[0])
self.M = nn.Parameter(torch.ones(A_size))
self.t_gcn = nn.Sequential(nn.BatchNorm2d(out_channels),
nn.ReLU(),
nn.Dropout(dropout),
nn.Conv2d(out_channels,
out_channels,
(t_kernel_size, 1), # kernel_size
(stride, 1), # stride
((t_kernel_size - 1) // 2, 0), # padding
),
nn.BatchNorm2d(out_channels),
nn.ReLU())
def forward(self, x, A):
x = self.t_gcn(self.s_gcn(x, A * self.M))
return x
# STGCN网络模型
class STGCN(nn.Module):
def __init__(self, A, num_classes, in_channels, t_kernel_size):
super().__init__()
self.A = A
A_size = A.size()
self.bn = nn.BatchNorm1d(in_channels * A_size[1])
self.stgcn1 = STGCN_block(in_channels, 32, 1, t_kernel_size, A_size)
self.stgcn2 = STGCN_block(32, 32, 1, t_kernel_size, A_size)
self.stgcn3 = STGCN_block(32, 32, 1, t_kernel_size, A_size)
self.stgcn4 = STGCN_block(32, 64, 2, t_kernel_size, A_size)
self.stgcn5 = STGCN_block(64, 64, 1, t_kernel_size, A_size)
self.stgcn6 = STGCN_block(64, 64, 1, t_kernel_size, A_size)
self.fc = nn.Conv2d(64, num_classes, kernel_size=1)
def forward(self, x):
N, C, T, V = x.size()
x = x.permute(0, 3, 1, 2).contiguous().view(N, V * C, T)
x = self.bn(x)
x = x.view(N, V, C, T).permute(0, 2, 3, 1).contiguous()
x = self.stgcn1(x, self.A)
x = self.stgcn2(x, self.A)
x = self.stgcn3(x, self.A)
x = self.stgcn4(x, self.A)
x = self.stgcn5(x, self.A)
x = self.stgcn6(x, self.A)
x = F.avg_pool2d(x, x.size()[2:])
x = x.view(N, -1, 1, 1)
x = self.fc(x)
x = x.view(x.size(0), -1)
return x
def random_adjacency_matrix(num_nodes):
upper_triangle = np.triu(np.random.randint(0, 2, size=(num_nodes, num_nodes)), k=1)
diagonal = np.eye(num_nodes, dtype=int)
adjacency_matrix = upper_triangle + upper_triangle.T + diagonal
return adjacency_matrix
if __name__ == "__main__":
num_nodes = 25
adjacency_matrix = random_adjacency_matrix(num_nodes)
adjacency_tensor_3d = torch.tensor(adjacency_matrix, dtype=torch.float32).unsqueeze(0)
model = STGCN(adjacency_tensor_3d,
num_classes=10,
in_channels=3,
t_kernel_size=9,
)
input = torch.randn(200, 3, 80, 25)
output = model(input)
print(output.shape)
输出结果为torch.Size([200, 10])
,表示对应动作类别的概率。
总结
STGCN通过结合图卷积神经网络(GCN)和时间卷积网络(TCN),能够有效地处理时空图数据,特别适用于基于骨架图的动作识别任务。本文详细介绍了其原理和实现,并提供了完整的代码示例,有助于读者深入理解STGCN的工作机制。
热门推荐
科学解读打哈欠:提升氧气、放松身心的自然反应
当心!频繁打哈欠或暗藏5大健康隐患
这类来电涉诈风险高,可一键免费拦截!
北大肿瘤医院Nature发文:全球最大规模研究证实幽门螺旋杆菌社区防控效果显著
新药rifasutenizol vs 新版指南:谁更能有效根除幽门螺杆菌?
小年夜祭灶仪式,你家的灶王爷上线了吗?
小年夜祭灶:千年传承的文化记忆
霉霉能否饰演甄嬛?网友热议不断,专家解析性格与演技契合度
甄嬛传被指歪曲历史人物,多家平台确认暂无下架风险
退保需谨慎:损失现金价值还存多重风险
《甄嬛传》:六个外号里的角色命运变迁
从案例看退保:现金价值、核保陷阱全解析
小年夜祭灶:千年习俗里的家国情怀
从环境到疾病:全面解读夜间盗汗的原因与对策
C# Moq 入门指南:与模拟愉快玩耍
北京到崇礼滑雪场:三种便捷出行方式推荐
崇礼:冬奥场馆赋能四季旅游,年接待游客超580万
孙千陈靖可因戏生情曝光同居,从荧幕情侣走进现实
爆破安全距离及安全措施
孙俪女儿追星《甄嬛传》:从7遍追剧到与“娘娘们”合影
射流泵:高速射流产生真空效应,实现物质高效输送
张柏芝复出首秀:憔悴面容引关注,四胎传闻再起
前三季度深圳GDP增1466亿,广东如何破解区域发展不平衡
香港电影三杰闪耀戛纳,传承华语电影荣光
“中华文化节”牵手“流行文化节”,香港打造中外文化交流新平台
浙江10处5A景区上榜全国百强,横店影视城排名第七
语言不通就学,文化不同就融:张柏芝的国际演艺之路
足底疼痛的治疗是什么
直播带货破亿,张柏芝用实力回应私生活传闻
沈阳北陵公园:清代皇太极陵寝里的满汉文化交融