System Development распознавания действий человека (Action Recognition)
Action Recognition — классификация действий человека на видео: ходьба, бег, падение, драка, работа с инструментом, занятие спортом. В отличие от pose estimation (что за поза?), action recognition отвечает на вопрос «что делает человек?» и использует временную последовательность кадров как входные данные.
Подходы к классификации действий
Skeleton-based (через pose keypoints) — лёгкий и быстрый. Keypoints извлекаются через YOLOv8-pose / MediaPipe, затем последовательность keypoints классифицируется LSTM/GRU или ST-GCN (Spatial-Temporal Graph Convolutional Network):
import torch
import torch.nn as nn
class ActionLSTM(nn.Module):
"""Классификатор действий по последовательности keypoints"""
def __init__(self, input_size=34, # 17 keypoints * 2 координаты
hidden_size=256,
num_classes=10,
seq_len=30): # 30 кадров = 1 сек при 30fps
super().__init__()
self.lstm = nn.LSTM(input_size, hidden_size, num_layers=2,
batch_first=True, dropout=0.4)
self.attention = nn.MultiheadAttention(hidden_size, num_heads=4)
self.classifier = nn.Sequential(
nn.Linear(hidden_size, 128),
nn.GELU(),
nn.Dropout(0.3),
nn.Linear(128, num_classes)
)
def forward(self, x): # [batch, seq_len, 34]
lstm_out, _ = self.lstm(x)
# Self-attention по временной оси
attn_out, _ = self.attention(lstm_out, lstm_out, lstm_out)
# Global average pooling по времени
pooled = attn_out.mean(dim=1)
return self.classifier(pooled)
Video-based (RGB frames) — более точный, требует больше ресурсов. Обрабатывает напрямую RGB-кадры:
- SlowFast — два потока с разной частотой дискретизации (медленный для семантики, быстрый для движения)
- Video Swin Transformer — лучший на Kinetics-400: Top-1 84.9%
- TimeSformer — temporal attention через transformers
import torch
from torchvision.models.video import r3d_18, R3D_18_Weights
# R3D-18 — лёгкий 3D CNN для action recognition
model = r3d_18(weights=R3D_18_Weights.KINETICS400_V1)
# Для кастомных классов
model.fc = nn.Linear(model.fc.in_features, num_custom_classes)
Система детекции падений
Детекция падений — высокоприоритетное применение для систем безопасности пожилых людей и производственного контроля. Специфика: класс «падение» очень редкий и занимает 0.5–2 секунды. Решение:
- Skeleton-based детекция (быстро, работает на edge)
- Признаки: изменение высоты центра масс, угол наклона тела, скорость движения keypoints
- Threshold-based rule + ML классификатор для снижения false positives
def detect_fall_rule_based(prev_keypoints, curr_keypoints) -> bool:
"""Быстрая rule-based детекция падения"""
# Высота центра масс (нормализованная)
prev_hip_y = (prev_keypoints['left_hip']['y'] +
prev_keypoints['right_hip']['y']) / 2
curr_hip_y = (curr_keypoints['left_hip']['y'] +
curr_keypoints['right_hip']['y']) / 2
# Угол тела (вертикальность)
head_y = curr_keypoints['nose']['y']
feet_y = max(curr_keypoints['left_ankle']['y'],
curr_keypoints['right_ankle']['y'])
body_height = abs(feet_y - head_y)
# Признаки падения: тело горизонтально И быстрое снижение ЦМ
sudden_drop = (curr_hip_y - prev_hip_y) > 0.15 # нормализованные координаты
horizontal_body = body_height < 0.3
return sudden_drop and horizontal_body
Датасеты
| Датасет | Классы | Видео | Специфика |
|---|---|---|---|
| Kinetics-400/700 | 400/700 | 650k | Общий, YouTube |
| UCF-101 | 101 | 13k | Спорт, активности |
| HMDB-51 | 51 | 7k | Разнообразные |
| NTU RGB+D | 120 | 114k | Skeleton-based, RGBD |
| FallDetection | 5 | 500 | Детекция падений |
Временное окно и задержка детекции
Длина временного окна: 16–32 кадра (0.5–1 секунда при 30fps) — стандарт для большинства действий. Для длительных действий (рубка дров, поднятие груза): 64–128 кадров.
Sliding window inference: новый результат каждые 8–16 кадров при overlap 50–75%.
| Metrics | Top-1 Kinetics-400 | FPS |
|---|---|---|
| R3D-18 | 63.8% | 120 |
| SlowFast R50 | 76.8% | 40 |
| Video Swin-B | 82.7% | 15 |
| Skeleton LSTM | ~75% (NTU) | 500+ |
| Применение | Срок |
|---|---|
| Детекция падений, skeleton-based | 2–4 недели |
| Классификация 10–30 действий | 4–7 недель |
| Сложная аналитика поведения | 7–12 недель |







