

Прежде чем перейти к карточке, кратко проговариваю структурные решения, в которых пришлось принять выбор:

1. **Идентификация статьи.** «Skeleton Contrastive (Li et al., CVPR 2021)» — это **CrosSCLR** (Li, Wang, Ni, Wang, Yang, Zhang, _3D Human Action Representation Learning via Cross-View Consistency Pursuit_, CVPR 2021). Внутри неё определяется и SkeletonCLR (single-view) — отсюда сленговое имя «Skeleton Contrastive». Уточнил по тексту PDF, чтобы не спутать с _Skeleton-Contrastive 3D Action Representation Learning_ (Thoker et al., ACM MM 2021) — это другая статья.
2. **Поле `direction` в шаблоне.** Шаблон по умолчанию проставляет 🅰 (One-class AQA / Self-supervised motion). Но эта статья — **не AQA, не one-class и не periodicity**. Это SSL для multi-class распознавания действий по скелету. Честнее поставить 🅲 (Few-shot/SSL adaptation), и явно прокомментировать расхождение в разделе релевантности.
3. **Раздел «Эксперименты (AQA & Motion)».** Шаблон предполагает SOTA-таблицу AQA и Spearman/AUROC. В статье таких метрик нет вообще — только linear/finetune accuracy на NTU. Не подменяю — фиксирую факт «не делается» и ставлю это в Gap.
4. **Edge feasibility.** Авторы дают только косвенный сигнал — «ST-GCN с 1/4 каналов». Конкретных GFLOPs/латентности нет → «НЕ УКАЗАНО».
5. **Релевантность для SmartRep.** Финальная оценка — **3/5**. Backbone-SSL для скелетов полезен направлению 🅲, но не закрывает ни одну из задач 🅰 напрямую. Домен NTU (бытовые действия) сильно отличается от штанговых упражнений.

---

```yaml
---
title: "3D Human Action Representation Learning via Cross-View Consistency Pursuit"
title_ru: "Обучение представлений 3D-действий через согласованность между видами скелета"
short_name: "CrosSCLR / SkeletonCLR"
authors: [Li L., Wang M., Ni B., Wang H., Yang J., Zhang W.]
year: 2021
venue: "CVPR"
venue_tier: "A*"
doi: "https://openaccess.thecvf.com/content/CVPR2021/papers/Li_3D_Human_Action_Representation_Learning_via_Cross-View_Consistency_Pursuit_CVPR_2021_paper.pdf"
code: "https://github.com/LinguoLi/CrosSCLR"
tags: [ssl, contrastive, few_shot]
relevance_to_smartrep: 3
direction: "🅲"   # Few-shot / SSL adaptation. NOT 🅰 — статья не про AQA и не one-class.
status: "reviewed"
---
```

# CrosSCLR (Li et al., CVPR 2021) — литобзор для SmartRep

## 2. Core Contribution (TL;DR)

Авторы предлагают **CrosSCLR** — фреймворк self-supervised обучения представлений для 3D-скелетов, состоящий из (i) одно-видового контрастивного модуля **SkeletonCLR** в стиле MoCo v2 и (ii) модуля **CVC-KM (Cross-View Consistent Knowledge Mining)**, который переносит «уверенные» соседи между видами скелета (joint, motion, bone). Решаемая задача SSL — **contrastive instance discrimination** + **cross-view consistency**: одна и та же запись скелета даёт несколько «бесплатных» представлений, и близость в одном виде используется как pseudo-supervision для другого. Это снимает ограничение классического InfoNCE, при котором семантически близкие сэмплы той же категории попадают в негативы.

[КОММЕНТАРИЙ РЕЦЕНЗЕНТА] Это не AQA-метод и не anomaly-detection; это backbone-SSL для общего распознавания действий. Для SmartRep это означает: метод применим как **этап pretraining** для скелетного энкодера, а не как готовое решение задачи оценки техники.

## 3. Архитектура и метод

**Механизм SSL.** Контрастивное обучение с memory bank (MoCo-style) + cross-view knowledge transfer. На раннем этапе обучения cross-view сигнал не используется (модели в каждом виде ещё не дают надёжных соседей); после warm-up loss переключается с InfoNCE на cross-view контрастив.

**Backbone.** ST-GCN (Yan et al., AAAI 2018), но **число каналов в каждом слое уменьшено до 1/4** от оригинала. Энкодеры `f` и `f̂` — siamese-пара, `f̂` обновляется моментум-усреднением: $\hat\theta \leftarrow \alpha\hat\theta + (1-\alpha)\theta$. Проектор `g` — один FC-слой с ReLU. Memory bank размером **M = 30k** (уменьшен относительно MoCo v2 65k).

**Виды (views) скелета.** Три представления, генерируемые из одного и того же $x \in \mathbb{R}^{C \times T \times V}$:

- **joint** — сами координаты;
- **motion** — временные смещения $x_{:,t+1,:} - x_{:,t,:}$;
- **bone** — пространственные смещения между смежными суставами $x_{:,:,v_2} - x_{:,:,v_1}$.

**Аугментации.** Только две: **Shear** (линейная пространственная деформация с амплитудой $\beta = 0.5$) и **Crop** (симметричный паддинг отражением + случайный кроп; padding ratio $\gamma = 6$, т.е. длина паддинга $T/\gamma$).

**Loss-функции.**

Стандартный InfoNCE для одного вида: $$ \mathcal{L}_{\text{InfoNCE}} = -\log \frac{\exp(z \cdot \hat z / \tau)}{\exp(z \cdot \hat z / \tau) + \sum_{i=1}^{M} \exp(z \cdot m_i / \tau)} $$

Top-K knowledge mining (всё ещё single-view) — расширение позитивного множества за счёт ближайших соседей в memory bank: $$ \mathcal{L}_{\text{KM}} = -\log \frac{\exp(z \cdot \hat z / \tau) + \sum_{i \in \mathcal{N}_+} \exp(z \cdot m_i / \tau)}{\exp(z \cdot \hat z / \tau) + \sum_{i \in \mathcal{N}} \exp(z \cdot m_i / \tau)} $$

Cross-view loss (вид $v$ обучает вид $u$): индексы позитивов $\mathcal{N}_+^{v}$ берутся из top-K в виде $v$, **а сходства $s_i^v = z^v \cdot m_i^v$ из вида $v$ используются как веса** для соответствующих эмбеддингов в виде $u$: $$ \mathcal{L}_{v \rightarrow u} = -\log \frac{\exp(z^u \cdot \hat z^u / \tau) + \sum_{i \in \mathcal{N}_+^v} \exp(s_i^u s_i^v / \tau)}{\exp(z^u \cdot \hat z^u / \tau) + \sum_{i \in \mathcal{N}} \exp(s_i^u s_i^v / \tau)} $$

Полный лосс — сумма по всем парам видов: $$ \mathcal{L}_{\text{cross}} = \sum_u \sum_{v \neq u} \mathcal{L}_{u \rightarrow v} $$

**Геометрический смысл.** Cross-view loss требует, чтобы **распределение похожестей** (а не только сами позитивы) было консистентно между видами — то есть подталкивает энкодеры к согласованной геометрии эмбеддинг-пространств для joint/motion/bone. Эффект подтверждается t-SNE визуализацией: после 300 эпох joint и motion дают похожие кластеры.

**Гиперпараметры обучения.** SGD (momentum 0.9, weight decay 1e-4), batch 128, 300 эпох. Первые 150 эпох — только InfoNCE; после 150-й эпохи loss переключается на $\mathcal{L}_{\text{cross}}$. **K = 1** в top-K (т.е. реально добавляется один сосед на сэмпл). LR 0.1 с шагом 0.1 на 250-й эпохе.

**Диаграмма потока данных.**

```mermaid
flowchart LR
    X[Raw skeleton x in R^CxTxV] --> VG[View Generation]
    VG --> Xj[joint]
    VG --> Xm[motion]
    VG --> Xb[bone]

    Xj --> Aug1[Shear + Crop] --> Ej[ST-GCN/4 -> g] --> Zj[z_j]
    Xm --> Aug2[Shear + Crop] --> Em[ST-GCN/4 -> g] --> Zm[z_m]
    Xb --> Aug3[Shear + Crop] --> Eb[ST-GCN/4 -> g] --> Zb[z_b]

    Zj <--> MBj[Memory Bank M_j 30k]
    Zm <--> MBm[Memory Bank M_m 30k]
    Zb <--> MBb[Memory Bank M_b 30k]

    Zj -. similarities S_j .-> KM[CVC-KM TopK + sim weights]
    Zm -. similarities S_m .-> KM
    Zb -. similarities S_b .-> KM

    KM --> LC[L_cross]
    LC --> Total[Total Loss after epoch 150]
```

## 4. Эксперименты

**Datasets.** NTU-RGB+D 60 (56 578 последовательностей, 60 классов, 25 суставов; протоколы xsub / xview), NTU-RGB+D 120 (113 945 последовательностей, 120 классов; xsub / xset), NTU-61-120 (последние 60 классов NTU-120 — для проверки трансфера).

⚠ Никаких fitness-датасетов, никакого AQA, никакой periodicity-разметки.

**Метрики.** Linear evaluation accuracy и finetune accuracy (Top-1). Никаких Spearman's ρ, AUROC, Recall@K — то есть _стандартные метрики качества классификации, не AQA_.

**Ключевые результаты (linear evaluation, 3-stream ensemble):**

|Method|Encoder|NTU-60 xsub|NTU-60 xview|NTU-120 xsub|NTU-120 xset|
|---|---|---|---|---|---|
|LongT GAN (AAAI'18)|GRU|39.1|48.1|—|—|
|MS²L (ACM MM'20)|GRU|52.6|—|—|—|
|AS-CAL (Inf.Sci.'21)|LSTM|58.5|64.8|48.6|49.2|
|P&C (CVPR'20)|GRU|50.7|76.3|—|—|
|**3s-CrosSCLR (LSTM)**|LSTM|70.4|79.9|53.9|53.2|
|**3s-CrosSCLR (ST-GCN)**|ST-GCN|**77.8**|**83.4**|**67.9**|**66.7**|

**Few-label режим (NTU-60, тот же протокол что в MS²L):**

|Метод|1% xsub|1% xview|10% xsub|10% xview|
|---|---|---|---|---|
|LongT GAN|35.2|—|62.0|—|
|MS²L|33.1|—|65.2|—|
|**3s-CrosSCLR**|**51.1**|**50.0**|**74.4**|**77.8**|

**Абляция top-K.** K = 1 оптимум (xsub 74.5 / xview 82.1); K = 10 валит точность до 64.4 / 69.9 — большие соседства привносят шум, поскольку нет меток.

**Finetune.** 3s-CrosSCLR (FT) → NTU-60 xsub 86.2 / xview 92.5 — обходит supervised 3s-ST-GCN* (85.2 / 91.4) с тем же числом параметров.

[КОММЕНТАРИЙ РЕЦЕНЗЕНТА] Цифры для 2021 года сильные, но методология _классификационная_. Для нашей задачи это сигнал «энкодер выучил полезные глобальные признаки действия», а не «энкодер чувствителен к мелким техническим ошибкам внутри одной категории».

## 5. Edge Feasibility (критично для SmartRep)

|Параметр|Значение|
|---|---|
|Число параметров (M)|НЕ УКАЗАНО (только сказано: ST-GCN с 1/4 каналов → ≈ 1/16 от base ST-GCN по конволюциям, но точная цифра не приводится)|
|GFLOPs|НЕ УКАЗАНО|
|Latency (любое железо)|НЕ УКАЗАНО|
|Квантизация / дистилляция|НЕ ОБСУЖДАЕТСЯ|
|Edge / mobile deployment|НЕ ОБСУЖДАЕТСЯ|
|Memory bank во время инференса|Не используется (только pretraining)|

[КОММЕНТАРИЙ РЕЦЕНЗЕНТА] Это серьёзный пробел для SmartRep. Хорошая новость: финальный энкодер на инференсе — это лёгкий ST-GCN/4, без memory bank и без момент-копий. Плохая новость: количественные edge-бенчмарки нужно будет получать самостоятельно.

## 6. Релевантность для SmartRep

**6.1. One-class AQA.** ❌ **НЕ ПРИМЕНИМ напрямую.** CrosSCLR — это instance discrimination среди _всех_ классов, и cross-view loss целенаправленно «склеивает» сэмплы одной категории. Если применить его к датасету «только эталонные подходы» (без ошибок), сигнал коллапсирует: все примеры — близкие соседи, top-K knowledge mining выберет «всё», и контрастив тривиализуется.

- Что _можно_ спасти: использовать **только SkeletonCLR без CVC-KM** на смеси правильных и ошибочных подходов как универсальный pretraining; ошибки тогда будут рассматриваться как часть распределения, и качество эмбеддингов будет нейтрально к таксономии ошибок.
- One-class AQA лучше строить на других механизмах (PatchCore-стиль, distance-based anomaly score) поверх энкодера, который дал CrosSCLR-style pretraining.

**6.2. LUPI-потенциал (Teacher → Student).** ⚠ **Слабая аналогия, не настоящий LUPI.** Авторы называют joint/motion/bone «views», но все три **тривиально вычисляются из одного скелета** — это не привилегированная информация, а математические преобразования. Настоящего LUPI (Teacher с богатым видео + барбелл-трекинг → Student только скелет) статья не делает. Однако сам _механизм CVC-KM_ — knowledge mining через top-K соседей и перенос распределения сходств — переносим: можно представить Teacher (RGB + IMU) и Student (скелет 33 точки) как два «вида» и заставлять их memory bank иметь согласованные распределения сходств. Это нетривиальная адаптация, но идея инфраструктурно поддержана статьёй.

**6.3. Periodicity-awareness.** ❌ **Не делается.** Никаких попыток моделировать периодичность повторов, ритм, частоту. Аугментация Crop с padding-reflection, наоборот, **разрушает** локальную периодичность. Для подсчёта повторов и анализа ритма нужна другая литература (RepNet, Counting Out Time).

**6.4. Что может быть полезно SmartRep.**

1. **Мульти-stream скелетный pretraining** на смеси Fit3D + FLAG3D + наш барбелл-датасет — joint/motion/bone уже дают complementary сигнал, особенно `motion` для скоростных/темповых ошибок (hitch, bouncing).
2. **Two-stage warm-up** (InfoNCE → cross-view) — практичный приём для стабилизации SSL на малых датасетах.
3. **Memory bank 30k + small ST-GCN** — реалистичный baseline для edge-friendly skeleton encoder.
4. **K=1** как урок: top-K больше единицы при отсутствии меток ломает обучение — учитывать при дизайне semi-supervised loss.

## 7. Gap для нас (ниша для новизны SmartRep)

1. **Нет fine-grained чувствительности к ошибкам внутри одного упражнения.** CrosSCLR оптимизирован под межклассовую дискриминацию (присед vs становая). Для нас критична **внутриклассовая** дискриминация (присед с butt-wink vs присед без него). Эмбеддинги, обученные cross-view consistency, наоборот склеивают всё, что «похоже на присед». **Гэп: разработать SSL-objective, явно поощряющий чувствительность к локальным геометрическим отклонениям (например, joint-angle residuals от эталонного шаблона) при сохранении инвариантности к скорости/телосложению.**
    
2. **Нет edge-бенчмарков.** Статья молчит про latency, FLOPs, INT8-квантизацию. **Гэп: воспроизвести 3s-CrosSCLR на ST-GCN/4 → измерить latency на Jetson Orin Nano / iPhone Neural Engine; проверить, как cross-view warm-up переносится на упрощённый pretraining-pipeline без memory bank (для последующего deployment).**
    
3. **«Views» — не настоящий LUPI.** joint/motion/bone все выводимы из одного входа. **Гэп: ввести в схему действительно привилегированный teacher (RGB + барбелл-трекер + IMU) и проверить, переносится ли механизм CVC-KM на асимметричный Teacher↔Student протокол с разной информационной ёмкостью видов.**
    
4. **Нет periodicity-сигнала и rep counting.** Crop с reflection-padding ломает циклическую структуру; для повторных движений это вредно. **Гэп: добавить periodicity-aware аугментации (фазовые сдвиги, ресэмплинг по фазе цикла) и cycle-consistency loss поверх CrosSCLR-pretraining.**
    
5. **Аугментаций всего две (Shear + Crop).** Никаких mask/dropout суставов — то есть метод **не учился восстанавливаться при окклюзии**. Это особенно важно нам: при бенче кисти и плечи часто скрыты грифом. **Гэп: оценить устойчивость CrosSCLR-features к joint-dropout и ввести occlusion-aware аугментации в pretraining (масочный CRP / частичное замкадровое исчезновение суставов).**
    

## 8. Вывод для литобзора

**Приоритет: СРЕДНИЙ.** Статья — **методологический фундамент** для SSL pretraining скелетного энкодера, но не закрывает ни одной из задач 🅰 SmartRep напрямую. Пропустить нельзя (на неё ссылается весь следующий пласт skeleton-SSL: AimCLR, CMD, HiCLR, ActCLR), но и переоценивать вклад в нашу задачу не стоит.

**Куда CrosSCLR встаёт в SmartRep-pipeline:** этап 0/pre-pretraining для скелетного backbone'а перед fine-tuning на Fit3D/FLAG3D. Это направление 🅲. Прямой вклад в 🅰 (fine-grained errors) — нулевой; в 🅱 (biomechanics-aware pose) — нулевой.

**Связанные статьи, обязательные к разбору следом:**

- **AimCLR** (Guo et al., AAAI 2022) — extreme augmentations + DDM-loss поверх CrosSCLR; это прямое продолжение и для нас, возможно, более полезное (occlusion-style augs).
- **CMD / HiCLR / ActCLR** (2022–2023) — линейка cross-modal distillation поверх CrosSCLR; релевантно LUPI-вопросу.
- **RepNet** (Dwibedi et al., CVPR 2020) — для periodicity-gap.
- **PatchCore** (Roth et al., CVPR 2022) — для one-class AQA поверх SSL-эмбеддинга, поскольку CrosSCLR сам по себе anomaly-detection не делает.
- **VideoMAE** (Tong et al., NeurIPS 2022) — masked-modeling альтернатива контрастивному SSL; релевантно для решения по выбору SSL-парадигмы.

**Не приоритетные для прочтения сейчас:** SkeletonCLR baseline'ы старше 2020 года (LongT GAN, P&C, MS²L) — все обогнаны и описаны в Related Work CrosSCLR.

---

### Мета-комментарий по работе промпта (для итерации)

Что **сработало** в твоём шаблоне:

- Поле «Gap для нас» оказалось самым плодотворным разделом — статья явно не для нашей задачи, и формализованное «что не делает» вытащило наружу пять конкретных направлений новизны.
- Жёсткое разделение фактов и `[КОММЕНТАРИЙ РЕЦЕНЗЕНТА]` помогло не натянуть AQA-нарратив на не-AQA статью.
- LaTeX в loss-функциях не пришлось редактировать — формулы из статьи переписались с минимальным шумом.

Что **трещит** в текущем шаблоне для SSL/AQA-карточек:

- **Поле `direction` слишком жёстко привязано к 🅰.** Для skeleton-SSL papers (CrosSCLR, AimCLR, PCM³, CMD) оно стабильно неверное — все они 🅲. Предложение: сделать его обязательным, но без default-значения, и добавить мини-комментарий «обоснуй direction в первом абзаце».
- **Раздел «4. Эксперименты (AQA & Motion)»** провоцирует подгонку: подразумевает Spearman/AUROC, которых в SSL-классификационных статьях нет. Лучше переименовать в «Эксперименты и метрики (что есть в статье)» с подпунктом «Если AQA-метрик нет — фиксируем явно».
- **Тэги из фиксированного словаря** (`pose_estimation, edge, aqa, ssl, few_shot, occlusion, one_class_anomaly, masked_modeling, contrastive, periodicity`) почти не различают подвиды contrastive learning. Полезно добавить хотя бы `cross_view`, `instance_discrimination`, `skeleton_only` — иначе все skeleton-CL карточки получают один и тот же тэг-набор.
- **Раздел Edge Feasibility** в SSL-статьях почти всегда даёт «НЕ УКАЗАНО» по 4 из 5 пунктов. Имеет смысл ввести компактный fallback: «если все НЕ УКАЗАНО — оценить edge-friendliness backbone'а на качественном уровне (lightweight / medium / heavy)».

Если согласен — могу переписать шаблон под две версии: «AQA paper» и «SSL backbone paper», с разными разделами 4 и 6.