一、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/zh-hk/n/371106.html