# CTR-GCN — пространственно-временные граф-сети для обнаружения насилия

> Второй этап конвейера GuardianAI принимает последовательности скелетов из 64 кадров и классифицирует паттерны движения как «насилие» или «норма» — работая исключительно с координатами суставов, без пикселей.

## Что такое граф-свёрточная сеть
Скелет человека — естественный граф: узлы — это суставы (запястье, локоть, плечо и т.д.), рёбра — это кости, их соединяющие. Вместо того чтобы сглаживать это в плоский вектор признаков, граф-свёрточная сеть (GCN) сохраняет структуру и обменивается информацией вдоль реальных соединений тела.

Добавьте временно́е измерение (последовательность кадров), и получите *пространственно-временную* GCN: каждый узел подключён к своим соседям по телу *и* к тому же суставу в соседних кадрах. Это даёт модели возможность одновременно видеть *как* и *когда* движется каждая часть тела.

## Почему CTR-GCN, а не сквозная CNN
Сквозные видео-CNN (например, SlowFast или I3D) требуют тысяч видеоклипов для обобщения. Датасеты с боевыми сценами в школах — редкость и по этическим соображениям невозможно получить в большом объёме. CTR-GCN обучается эффективно на маленьких датасетах, потому что входное пространство уже структурировано: 17 × 3 (x, y, conf) × 64 кадра на человека. Никакого фонового шума. Никакой вариации освещения. Только геометрия движения.

- **Параметров.** ~1,5 М (некоторые конфигурации до 2,7 М) — в 100 раз меньше, чем у сравнимой видео-CNN.
- **Инференс.** ~4 мс на клип на Jetson Orin Nano.
- **Устойчивость к смещению.** Скелеты удаляют цвет кожи, одежду и освещение — основные источники расовой предвзятости в пиксельных моделях.

## Три потока, один ансамбль
Один скелетный тензор информативен, но представительно узок. Мы вычисляем три представления и запускаем три классификатора:

- **Поток суставов (joint).** Сырые координаты (x, y, conf). Описывает абсолютную позу тела.
- **Поток костей (bone).** Векторные разности между соединёнными суставами (например, запястье − локоть). Описывает ориентацию конечностей, инвариантна к положению в кадре.
- **Поток скоростей (velocity).** Покадровые дельты. Описывает магнитуду движения — разницу между «протянуть руку» и «нанести удар».

Три выхода объединяются с весами `[0,5, 0,3, 0,2]` (подобраны на валидации), затем сигмоид даёт финальную вероятность. Ансамбль даёт ~+3 пункта F1 над лучшим одиночным потоком.

## Входной тензор
Для каждой пары (атакующий, жертва) второй этап получает тензор формы `[2, 64, 17, 3]` — 2 человека, 64 кадра, 17 ключевых точек, 3 значения (x, y, conf). Паддинг нулями применяется, если один из людей вошёл в кадр менее чем 64 кадра назад. Если в кадре больше двух людей, модель оценивает все пары и сообщает о паре с наивысшей оценкой.

## Скользящее окно
Классификатор работает с окном из 64 кадров, но реальное видео длиннее. Для потоков с камер мы запускаем модель на окне 64 кадра с **шагом 32 кадра** — свежий прогноз каждую ~1 секунду. Для загруженных клипов длиннее 2 с скользим по всей длине и сообщаем окно с максимальной уверенностью плюс его временную метку.

## Обучение и данные
Модель предобучена на NTU RGB+D 120 (скелетный датасет для распознавания действий) и дообучена на:

- UBI-Fights — датасет боевых сцен из уличного наблюдения.
- Кадрированные клипы из школьных CCTV-записей (строго анонимизированные, только скелеты).
- Отрицательные примеры: спорт, активные игры, объятия, рукопожатия.

Пороговое значение по умолчанию — 0,50. Для начальной школы рекомендуем 0,65+, чтобы снизить число ложных срабатываний на активные игры. Цикл обратной связи «подтвердить / ложная тревога» обновляет оптимальный порог для каждой конкретной школы в течение 90 дней.

## Режимы отказа (честно)
- **Ошибки извлечения позы распространяются.** Неверно локализованное запястье на нескольких кадрах создаёт фантомный удар в потоке скоростей. Смягчаем порогом достоверности ключевых точек 0,3.
- **Предположение о двух людях.** Поставляемая модель обрабатывает 2 взаимодействующих тела. Драка 5 на 1 обнаруживается (сработает любая пара), но точная семантика толпового насилия теряется.
- **Окклюзии в толпе.** В переполненных столовых видны только ключевые точки выше пояса. Модель обучена на частичной видимости, но точность в этих сценариях ниже на ~10 пунктов.

## Непрерывное улучшение
Каждый подтверждённый или отклонённый инцидент становится размеченной обучающей точкой. Ежеквартально мы проводим дообучение модели на агрегированных анонимных скелетных данных с флотов развёртываний (без пикселей, без возможности деанонимизации) и рассылаем обновлённые веса через защищённый канал обновлений.

## Связанное чтение
- [Этап 1 — извлечение позы](https://guardianai.tech/ru/technology/pose-detection/index.md)
- [Школы K-12](https://guardianai.tech/ru/use-cases/schools/index.md)
- [Университетские кампусы](https://guardianai.tech/ru/use-cases/campuses/index.md)

---
*Markdown-зеркало страницы https://guardianai.tech/ru/technology/spatiotemporal-graph.*
