ST-GCN (Пространственно-временная графовая сверточная сеть)

Автор:

Архитектура нейросети, предназначенная для анализа последовательностей, представленных в виде графов, чаще всего — скелетонов человека во времени

ST-GCN (англ. Spatial-Temporal Graph Convolutional Network — Пространственно-временная графовая сверточная сеть) — это архитектура нейросети, предназначенная для анализа последовательностей, представленных в виде графов, чаще всего — скелетонов человека во времени.ST-GCN — это модель, которая анализирует, как двигается скелет человека во времени.

Во многих задачах компьютерного зрения сначала применяется:

  • Pose Estimation → получаем ключевые точки (суставы)
  • затем нужно понять движение

Проблема:

  • обычные модели (CNN, LSTM) не учитывают структуру скелета
  • суставы связаны между собой (граф), это не просто набор точек

ST-GCN решает это так:

  • представляет скелет как граф
  • применяет графовые свёртки
  • добавляет временное измерение

Скелет человека — это граф:

  • вершины (nodes / keypoints) → суставы (локти, колени, плечи)
  • рёбра (edges) → связи между суставами

Ключевая идея ST-GCN

ST-GCN объединяет два типа зависимостей:

Пространственные (Spatial)

  • как суставы связаны между собой
  • структура тела

Временные (Temporal)

  • как положение суставов меняется во времени
  • движение

Как работает ST-GCN

Модель делает следующее:

  • принимает последовательность скелетов
  • применяет графовые свёртки (по структуре тела)
  • применяет временные свёртки (по времени)
  • извлекает признаки движения
  • делает предсказание (например, действие)

Где используется ST-GCN

  • распознавание действий (Action Recognition)
  • анализ спорта (удары, техника)
  • реабилитация
  • биомеханика
  • системы безопасности
  • взаимодействие человек-компьютер

Почему ST-GCN лучше обычных подходов

  • учитывает структуру тела (граф)
  • устойчив к шуму в изображении
  • не зависит от фона
  • работает только с координатами точек

Минимальный пример на PyTorch

Ниже — упрощённая реализация ST-GCN блока.

Импортируем необходимые библиотеки:

import torch
import torch.nn as nn

Создадим графовую свёртку:

class GraphConv(nn.Module):
    def __init__(self, in_channels, out_channels, A):
        super().__init__()
        self.A = A  # матрица смежности (adjacency matrix)
        self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=1)

    def forward(self, x):
        # x: (batch, channels, time, nodes)
        x = torch.einsum(nctv,vw-