

Структурные решения перед карточкой:

1. **`paper_type` = `ssl_backbone` корректно.** AimCLR — прямой наследник SkeletonCLR/CrosSCLR; downstream-эвал классификационный (linear, KNN, finetune, semi-supervised); AQA-метрик нет. Шаблон B применим без оговорок.
2. **Direction = 🅲 primary, без spillover.** В отличие от TCLR (где fine-grained эффект на Diving-48 давал нетривиальную связку с 🅰), AimCLR не делает явных fine-grained экспериментов. Главный плюс — _робастность к шуму_ (PKU-MMD part II) и _широкий аугментационный набор_. Это всё ещё чисто SSL-pretraining-вклад, не AQA.
3. **Augmentations — главное содержательное отличие от CrosSCLR.** Восемь аугментаций, из которых четыре прямо релевантны нашей задаче (Gaussian Noise, Axis Mask, Spatial Flip, EADM-drop) и одна потенциально вредна (Temporal Flip). Этот аугментационный аудит выношу в отдельный фокус раздела 3.
4. **D³M-loss как distillation-объект.** Вместо InfoNCE, который требует one-hot позитивности, D³M требует совпадения _распределений_ над memory bank. Это distribution-matching между normally-augmented и extremely-augmented проекциями. Технически это soft knowledge distillation внутри одной модели — стоит явно отметить, потому что эта структура переносима на LUPI (teacher с богатой модальностью → student с бедной).
5. **PKU-MMD part II как нестандартный сигнал релевантности.** Это датасет с шумной разметкой из-за view variation; 3s-CrosSCLR деградирует на нём до 21.2%, а 3s-AimCLR держит 38.5% (+17 п.п.). Для нас, где pose estimator неизбежно зашумлён в зале, это самый прямой эмпирический сигнал применимости. Выношу отдельно.
6. **Edge feasibility — частичный fallback.** Параметры известны (наследуют CrosSCLR — ST-GCN/4 ≈ 0.85M в pre-trained checkpoints), но GFLOPs/латентности нет. Memory bank 32k — pretraining-only.

---

```yaml
---
title: "Contrastive Learning from Extremely Augmented Skeleton Sequences for Self-Supervised Action Recognition"
title_ru: "Контрастивное обучение на сильно аугментированных скелетных последовательностях для self-supervised распознавания действий"
short_name: "AimCLR / 3s-AimCLR"
authors: [Guo T., Liu H., Chen Z., Liu M., Wang T., Ding R.]
year: 2022
venue: "AAAI"
venue_tier: "A*"
doi: "https://ojs.aaai.org/index.php/AAAI/article/view/19957"
arxiv: "https://arxiv.org/abs/2112.03590"
code: "https://github.com/Levigty/AimCLR"
paper_type: "ssl_backbone"
tags: [ssl, contrastive, instance_discrimination, skeleton_only, gcn, action_recognition]
relevance_to_smartrep: 4
direction: "🅲"   # Backbone SSL pretraining. Никакого spillover в 🅰/🅱.
status: "reviewed"
---
```

# AimCLR (Guo et al., AAAI 2022) — литобзор для SmartRep

## 2. Core Contribution (TL;DR)

AimCLR — это контрастивный SSL для скелетных последовательностей, решающий проблему «слишком слабых» аугментаций предшественников (SkeletonCLR/CrosSCLR использовали только Shear+Crop) через введение **восьми разнотипных «extreme» аугментаций** и **специального loss'а D³M**, который не требует от сильно-аугментированных сэмплов сохранять one-hot positivity, а вместо этого выравнивает их _распределения_ над memory bank с распределениями нормально-аугментированных. Главные технические новинки относительно CrosSCLR — (i) **EADM** (Energy-based Attention-guided Drop Module), который через parameter-free SimAM-attention выбирает «важные» признаки и дропает их, заставляя модель учить менее тривиальные паттерны; (ii) **D³M Loss** для мягкого использования экстремальных аугментаций; (iii) **NNM** (Nearest Neighbors Mining) — top-K=1 расширение позитивов из memory bank во второй половине обучения. **Direction для нас — чисто 🅲 (SSL backbone pretraining)**: в отличие от TCLR, статья не показывает spillover в fine-grained классификацию или AQA; её ценность — _широта и качество аугментационного меню_ + эмпирически продемонстрированная _устойчивость к шуму_ в скелетных данных (PKU-MMD part II: +17 п.п. над CrosSCLR), что прямо релевантно нашему pose-estimator-noise сценарию.

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

**SSL-задача.** Двухкомпонентная: instance discrimination через стандартный InfoNCE + distribution matching между normally-augmented view и двумя extremely-augmented views (одной с EADM-дропом, одной без).

**Backbone.** ST-GCN с 1/4 каналов в каждом слое — наследуется напрямую от SkeletonCLR/CrosSCLR. Размер кода ≈ 0.85M параметров (по checkpoint'ам в репозитории; в самой статье число параметров не приводится, **НЕ УКАЗАНО** явно).

**Memory bank.** M = 32 768 (по конвенции из CrosSCLR/SkeletonCLR; в самом тексте AimCLR указано «follow that in SkeletonCLR»). Очередь FIFO, обновляется текущим momentum-encoder выходом. Momentum коэффициент m = 0.999 (стандарт MoCo v2). Memory bank используется только во время pretraining'а.

**Виды (streams) скелета.** Три потока, как в CrosSCLR: joint, motion (временные смещения), bone (пространственные смещения между смежными суставами). Multi-stream fusion на linear-evaluation стадии: weighted average с весами [0.6, 0.6, 0.4] для (joint, motion, bone) — взяты из supervised multi-stream GCN методов.

**Аугментации.** 8 преобразований, разбитых на normal T и extreme T':

|Аугментация|Тип|Параметр|Влияние на SmartRep|
|---|---|---|---|
|Shear (β=0.5)|spatial|linear distortion|нейтральная, имитация view variation|
|Crop (γ=6)|temporal|reflection padding + random crop|**ломает периодичность**, как и в CrosSCLR|
|Spatial Flip (p=0.5)|spatial|левая ↔ правая половина тела|✅ **полезна для нас** (атлеты с разной dominant side)|
|Temporal Flip (p=0.5)|temporal|реверс последовательности|❌ **критически вредна для нас** (см. ниже)|
|Rotate|spatial|основная ось ∈ {X,Y,Z}, угол ∈ [0, π/6]|✅ имитация камерного ракурса|
|Axis Mask (p=0.5)|spatial|случайно зануляет одну ось 3D-координаты|✅ **очень полезна для нас** — имитация 3D→2D проекции, что у нас и так на инференсе|
|Gaussian Noise (σ²=0.01)|spatio-temp|аддитивный шум на координаты|✅ **прямо моделирует шум pose estimator'а**|
|Gaussian Blur (σ ∈ [0.1, 2], kernel 15)|temporal|временное сглаживание joint trajectories|✅ полезна, но осторожно: может сглаживать быстрые фазы (lockout)|

⚠ **Temporal Flip для нашей задачи критичен.** В обычных action recognition датасетах (NTU «hand waving», «sitting down») реверс приемлем, потому что модель должна выучивать **invariant to direction**. У нас — **наоборот**: эксцентрическая (опускание) и концентрическая (подъём) фазы приседа физически разные (разная нагрузка, разные ошибки техники, разная скорость). Если модель выучит эквивалентность реверса, она потеряет различие между сильнейшим моментом упражнения (сход с груди в бенче, момент подъёма в становой) и приведёт его и опускание. **При адаптации необходимо отключить Temporal Flip.**

⚠ **EADM — концептуально близок к нашей задаче окклюзии.** EADM выбирает joints с самой низкой энергией (т.е. наиболее уникальные/важные) и принудительно их зануляет. Это форсирует модель учиться даже при потере «ключевых» суставов. Это **прямой суррогат barbell-occlusion**: гриф закрывает кисти и предплечья, и нам нужна модель, устойчивая к их пропаданию. EADM — практически готовый механизм для этого, переносимый практически без изменений.

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

Стандартный InfoNCE для query $\hat z$ и positive key $z$ (нормализованные, температура $\tau$): $$ \mathcal{L}_{\text{Info}} = -\log \frac{\exp(\hat z \cdot z / \tau)}{\exp(\hat z \cdot z / \tau) + \sum_{i=1}^{M} \exp(\hat z \cdot m_i / \tau)} $$

Перепишем InfoNCE через распределения над memory bank (для интерпретации D³M): $$ p(z \mid \hat z) = \frac{\exp(\hat z \cdot z / \tau)}{\exp(\hat z \cdot z / \tau) + \sum_{i=1}^{M} \exp(\hat z \cdot m_i / \tau)} $$ $$ p(m_i \mid \hat z) = \frac{\exp(\hat z \cdot m_i / \tau)}{\exp(\hat z \cdot z / \tau) + \sum_{i=1}^{M} \exp(\hat z \cdot m_i / \tau)} $$

Тогда InfoNCE — это cross-entropy между one-hot ideal $q$ ($q(z|\hat z)=1$, $q(m_i|\hat z)=0$) и learned $p$: $$ \mathcal{L}_{\text{Info}} = -q(z \mid \hat z) \log p(z \mid \hat z) - \sum_{i=1}^{M} q(m_i \mid \hat z) \log p(m_i \mid \hat z) $$

**D³M (Dual Distributional Divergence Minimization).** Главная новинка. Вместо one-hot ideal используется _learned distribution_ normally-augmented view $p(\cdot \mid \hat z)$ как целевое для extremely-augmented view $p(\cdot \mid \tilde z)$: $$ \mathcal{L}_{d_1} = -p(z \mid \hat z) \log p(z \mid \tilde z) - \sum_{i=1}^{M} p(m_i \mid \hat z) \log p(m_i \mid \tilde z) $$

И аналогично для дропнутой версии $\tilde z_{\text{drop}}$ (после EADM): $$ \mathcal{L}_{d_2} = -p(z \mid \hat z) \log p(z \mid \tilde z_{\text{drop}}) - \sum_{i=1}^{M} p(m_i \mid \hat z) \log p(m_i \mid \tilde z_{\text{drop}}) $$

$$ \mathcal{L}_{D} = \frac{1}{2}(\mathcal{L}_{d_1} + \mathcal{L}_{d_2}) $$

**Геометрический смысл D³M.** Это soft knowledge distillation _внутри одной модели_: «учитель» — менее аугментированный путь, «ученик» — сильно-аугментированный. Учитель не настаивает на абсолютной positivity (как InfoNCE), а передаёт ученику _структуру похожестей_ по всему memory bank. Эффект: extreme augmentation допустимо разрушает identity сэмпла (что ломало бы InfoNCE), но сохраняет полезный сигнал через выравнивание распределений.

[КОММЕНТАРИЙ РЕЦЕНЗЕНТА] D³M — это структурно ровно то же, что предлагал CrosSCLR в своём cross-view embedding context, но применённое к _одной_ view с разными уровнями аугментации, а не к _разным_ views. Хорошая новость для LUPI: эта же конструкция легко переносится на teacher (RGB+IMU) → student (только скелет), потому что D³M не требует, чтобы input teacher и student были одинаковыми — нужно только согласие распределений.

**NNM (Nearest Neighbors Mining)** — top-K расширение позитивов в стиле CrosSCLR/CLSA, но применённое сразу к трём query'ям ($\hat z$, $\tilde z$, $\tilde z_{\text{drop}}$): $$ \mathcal{L}_{N} = -\log \frac{\exp(\hat z \cdot z / \tau) + \sum_{i \in \mathcal{N}_+} \exp(\hat z \cdot m_i / \tau)}{\exp(\hat z \cdot z / \tau) + \sum_{i=1}^{M} \exp(\hat z \cdot m_i / \tau)} $$

где $\mathcal{N}_+ = \mathcal{N}^n_+ \cup \mathcal{N}^e_+ \cup \mathcal{N}^d_+$ — объединение топ-1 соседей всех трёх query'ев. K = 1 (как и в CrosSCLR, большие K деградируют без меток).

**Двухстадийность.** Жёсткая, по эпохам:

- Эпохи 1–150: $\mathcal{L}_1 = \alpha \mathcal{L}_{\text{Info}} + \beta \mathcal{L}_D$
- Эпохи 151–300: $\mathcal{L}_2 = \alpha \mathcal{L}_N + \beta \mathcal{L}_D$ (InfoNCE заменяется на NNM)
- $\alpha = \beta = 1$

Условие переключения — фиксированная эпоха, не loss-driven. Это упрощает воспроизведение, но менее адаптивно, чем CrosSCLR'овский плавный warm-up.

**Гиперпараметры.** SGD momentum 0.9, weight decay 1e-4, batch 128. LR 0.1 с шагом 0.1 на 250-й эпохе. 300 эпох. 50 кадров на сэмпл (стандарт NTU). Multi-stream weights [0.6, 0.6, 0.4].

**Diagram.**

```mermaid
flowchart LR
    S[Skeleton sequence s] --> NA[Normal Aug T: Shear+Crop]
    S --> EA[Extreme Aug T':  8 augs]

    NA --> XN[x normally-aug]
    EA --> XE1[x_tilde extremely-aug]
    EA --> XE2[x_tilde extremely-aug copy]

    XN --> QE1[Query Encoder f_q + MLP] --> ZH[z_hat]
    XE1 --> QE2[Query Encoder + EADM drop + MLP] --> ZD[z_tilde_drop]
    XE2 --> QE3[Query Encoder + MLP] --> ZE[z_tilde]
    XN --> KE[Key Encoder f_k EMA + MLP] --> Z[z positive]

    Z --> MB[Memory Bank M=32k]

    ZH & Z & MB --> LIC[L_Info: InfoNCE for hat]
    ZH & ZE & MB --> LD1[L_d1: D3M between hat and tilde]
    ZH & ZD & MB --> LD2[L_d2: D3M between hat and tilde_drop]

    LIC -.->|epoch 1-150| TOTAL[L_total]
    LD1 --> LD[L_D = L_d1 + L_d2 / 2]
    LD2 --> LD
    LD --> TOTAL

    NNM[NNM: top-K=1 from MB for hat / tilde / tilde_drop] -.->|epoch 151-300 replaces L_Info| TOTAL
```

## 4. SSL-эксперименты

**Pretraining datasets.**

- **NTU-60** (Shahroudy et al., CVPR 2016) — 56 578 сэмплов, 60 классов, 25 суставов, 2 протокола (xsub, xview);
- **NTU-120** (Liu et al., TPAMI 2019) — 113 945 сэмплов, 120 классов, 2 протокола (xsub, xset);
- **PKU-MMD** (Liu et al., ACM TOMM 2020) — ≈20 000 сэмплов, 51 класс, две части: part I (более чистая) и **part II (с шумной разметкой из-за view variation)** — последняя критична для нас.

**Downstream protocols.**

- **KNN evaluation** — frozen encoder + KNN classifier (без дополнительных весов);
- **Linear evaluation** — frozen encoder + 1 FC слой;
- **Semi-supervised** — pretrain на всех данных + finetune на 1% или 10% меток;
- **Finetune** — full encoder + linear head, end-to-end.

**Метрики downstream.** Top-1 accuracy для всех протоколов. **AQA-метрик нет — ожидаемо, статья не претендует на AQA.**

**Ключевые результаты (Linear evaluation, NTU-60).**

|Метод|xsub|xview|
|---|---|---|
|LongT GAN (AAAI'18)|39.1|48.1|
|MS²L (ACM MM'20)|52.6|—|
|AS-CAL (Inf.Sci.'21)|58.5|64.8|
|P&C (CVPR'20)|50.7|76.3|
|SkeletonCLR (CVPR'21)|68.3|76.4|
|**AimCLR (single stream, joint)**|**74.3**|**79.7**|
|3s-SkeletonCLR|75.0|79.8|
|3s-Colorization (ICCV'21)|75.2|83.1|
|3s-CrosSCLR (CVPR'21)|77.8|83.4|
|**3s-AimCLR**|**78.9**|**83.8**|

[КОММЕНТАРИЙ РЕЦЕНЗЕНТА] Single-stream AimCLR (74.3) практически догоняет three-stream SkeletonCLR (75.0). Это значит, что качество одного потока с правильными аугментациями ≈ качество трёх потоков без них. Для нас это аргумент: даже без многопоточной обработки skeleton-augmentations + D³M дают сильный baseline.

**Single-stream gains over SkeletonCLR (по потокам):**

|Stream|SkelCLR|AimCLR|Δ|
|---|---|---|---|
|joint|68.3|74.3|+6.0|
|motion|53.3|66.8|**+13.5**|
|bone|69.4|73.2|+3.8|

Огромный прирост в motion-stream указывает, что extreme augs (особенно Gaussian Noise и Temporal Flip) лучше регуляризуют именно временные деривативы. В bone-stream прирост скромнее, потому что spatial augs (Spatial Flip, Axis Mask) уже частично «попадают в цель» bone'а.

**PKU-MMD результаты (КРИТИЧНО для SmartRep — устойчивость к шуму):**

|Метод|part I|**part II (шумная)**|
|---|---|---|
|ST-GCN supervised|84.1|48.2|
|3s-CrosSCLR|84.9|**21.2**|
|ISC (ACM MM'21)|80.9|36.0|
|**3s-AimCLR**|**87.8**|**38.5 (+17.3 vs CrosSCLR)**|

3s-CrosSCLR катастрофически рушится на part II (21.2%) — это прямое свидетельство того, что cross-view consistency _коллапсирует_ при шумных данных, потому что пытается выровнять distorted views. **3s-AimCLR держит 38.5%** благодаря явной тренировке на сильно искажённых augmented version'ах. Это самый прямой эмпирический сигнал для нашего use case (gym camera + monocular pose estimator + occlusion).

**NTU-120 (большой multi-class):**

|Метод|xsub|xset|
|---|---|---|
|3s-CrosSCLR|67.9|66.7|
|ISC|67.9|67.1|
|**3s-AimCLR**|**68.2**|**68.8**|

Прирост скромный (+0.3 / +1.7), но AimCLR здесь — SOTA на момент публикации.

**Semi-supervised (1% labels, NTU-60):**

|Метод|xsub|xview|
|---|---|---|
|LongT GAN|35.2|—|
|3s-CrosSCLR|51.1|50.0|
|**3s-AimCLR**|**54.8**|**54.3**|

10% labels: 78.2 / 81.6 (vs 74.4 / 77.8 у CrosSCLR). Стабильное преимущество — для нашего малоразмеченного домена это значимо.

**Convergence speed.** 3s-AimCLR на 100 эпохах (76.5% xsub) > 3s-SkeletonCLR на 300 эпохах (75.0%). Сильные аугментации сокращают необходимое время обучения в 3 раза — практичное преимущество.

**KNN evaluation (без обучения дополнительных весов):**

|Stream|NTU-60 xsub: SkelCLR / AimCLR|PKU part I: SkelCLR / AimCLR|
|---|---|---|
|joint|56.1 / 62.0|68.9 / 72.0|
|motion|37.4 / 50.8 (+13.4)|51.0 / 60.6 (+9.6)|
|bone|44.0 / 58.4 (+14.4)|58.6 / 70.6 (+12)|

Особо большой прирост в KNN означает, что AimCLR-эмбеддинги _геометрически лучше структурированы_ — близкие сэмплы того же класса действительно близки в представлении. Это полезно для нашего AQA-сценария «найди ближайший эталон» / one-class anomaly head.

**Качественные результаты.** t-SNE визуализации (Figure 2 в статье) показывают, что кластеры классов у 3s-AimCLR компактнее, чем у 3s-CrosSCLR; для motion и bone потоков разница особенно заметна. Без cross-stream knowledge mining 3s-AimCLR уже превосходит 3s-CrosSCLR с CSKM, что говорит о том, что _augmentation matters more than cross-stream tricks_.

**Ablation (NTU-60).**

|NA|EA|EADM|NNM|xsub|xview|
|---|---|---|---|---|---|
|✓||||75.0|79.8|
||✓|||71.3|77.8 (деградация!)|
|✓|✓|||77.4|82.5|
|✓|✓|✓||78.2|82.8|
|✓|✓|✓|✓|**78.9**|**83.8**|

[КОММЕНТАРИЙ РЕЦЕНЗЕНТА] Самая показательная строка — вторая: EA-only **деградирует** на 3.7% относительно NA-only. Это эмпирическое доказательство гипотезы статьи: extreme augs _без_ D³M-обёртки разрушают identity и вредят. NA+EA+D³M даёт +2.4%, EADM добавляет ещё +0.8%, NNM — ещё +0.7%. EADM и NNM — косметика; **D³M + extreme augs — суть метода**.

## 5. Edge Feasibility (для SmartRep)

|Параметр|Значение|
|---|---|
|Параметры энкодера на инференсе (M)|НЕ УКАЗАНО явно; наследует ST-GCN/4 от CrosSCLR ≈ 0.85M (по checkpoint'ам репо)|
|GFLOPs|НЕ УКАЗАНО|
|Latency + железо|НЕ УКАЗАНО|
|Квантизация / дистилляция|НЕ ОБСУЖДАЕТСЯ|
|Edge / mobile deployment|НЕ ОБСУЖДАЕТСЯ|
|Memory bank на инференсе|Не используется (32k только pretraining)|
|EMA encoder на инференсе|Не используется (только pretraining)|
|MLP projector на инференсе|Не используется|
|EADM на инференсе|Не используется (только pretraining drop)|

**Качественный fallback (≥4 НЕ УКАЗАНО):** **lightweight** для нашего use case. ST-GCN с 1/4 каналов — самый лёгкий из всех skeleton encoder'ов в нашем литобзоре (≪ 1M параметров). Вся инфраструктура SSL (memory bank, EMA, projector, EADM) **отключается на инференсе** — остаётся только ST-GCN/4 backbone. Это лучшая edge-кандидатура из разобранных skeleton-SSL методов: легче, чем R3D-18 (13.5M, TCLR), сравнимо с CrosSCLR backbone'ом, но с лучшими признаками.

[КОММЕНТАРИЙ РЕЦЕНЗЕНТА] Несмотря на отсутствие явных edge-бенчмарков, AimCLR — самый практичный из разобранных контрастивных методов для mobile deployment именно из-за наследования слабого ST-GCN/4 backbone'а от CrosSCLR. INT8-квантизация ST-GCN/4 должна давать sub-millisecond latency на современных mobile NPU. Это нужно проверить эмпирически — будет хорошим вкладом SmartRep.

## 6. Релевантность для SmartRep (как pretraining-кандидат)

**Backbone reusability.** ✅ **Высокая.** ST-GCN с 25 суставами NTU; перевод на наш COCO/MoveNet-33 требует только маппинга суставов и переопределения матрицы смежности графа. Архитектурных изменений не нужно. Можно перенести предобученные веса verbatim до конволюционных слоёв и переинициализировать adjacency.

**Pretraining recipe transferability.** Большинство переносится:

- ✅ Batch 128 — практично для одной 24GB GPU;
- ✅ Memory bank 32k — реалистично для нашего масштаба (после агрегации Fit3D + FLAG3D + наш барбелл-датасет);
- ✅ Two-stage training с фиксированной точкой переключения (epoch 150) — проще CrosSCLR'овского loss-driven warm-up;
- ⚠ Multi-stream fusion weights [0.6, 0.6, 0.4] — выведены для NTU; для нашего домена нужно перетюнить (возможно, motion-stream важнее на штанговых упражнениях, чем на бытовых действиях NTU);
- ❌ **Temporal Flip аугментация — обязательно отключить** (см. ниже);
- ⚠ Spatial Flip — оставить, но осторожно: для асимметричных упражнений (one-arm dumbbell row) flip меняет семантику, надо протестировать.

**Domain gap к силовому тренингу.** Большой, но смягчён аугментациями. NTU и PKU-MMD — бытовые действия и спортивные движения, где из релевантного только PullUps и JumpingJack. Однако:

- Gaussian Noise аугментация _уже моделирует_ шум pose estimator'а — частично адаптирует к нашему домену;
- Axis Mask _уже моделирует_ 3D→2D потерю информации — частично адаптирует к monocular setting;
- EADM-drop _уже моделирует_ потерю отдельных суставов — частично адаптирует к окклюзии.

Это означает, что AimCLR **по архитектуре аугментаций ближе к нашему сценарию**, чем CrosSCLR или TCLR. Но содержательный domain gap по типу движений — всё равно требует fine-tuning на штанговых данных.

**Совместимость с downstream AQA-головами.** ✅ **Хорошая.** Эмбеддинги AimCLR хорошо структурированы геометрически (KNN-результаты подтверждают). Поверх можно навесить:

- One-class anomaly head: KNN-distance до centroid эталонных подходов (KNN-eval показывает, что эта геометрия адекватна);
- Per-rep distance-based scoring;
- Reconstruction error head (хотя AimCLR сам не reconstruct).

Риск коллапса при one-class pretraining (только эталоны): аналогично CrosSCLR, D³M-loss требует разнообразия в memory bank. При узкой выборке D³M вырождается в self-distillation одинаковых распределений (всё близко ко всему). Митигация: смешивать эталонные и условно-плохие подходы (даже без меток ошибок) для разнообразия memory bank.

**LUPI-совместимость.** ✅ **Структурно хорошая.** D³M-loss — это distribution distillation, и такая структура переносится на teacher-student асимметрию: teacher с богатой модальностью (RGB+IMU+barbell-tracker) задаёт целевое распределение $p^{\text{teacher}}(m_i \mid \hat z)$, student со скелетом учится воспроизводить это распределение через $p^{\text{student}}(m_i \mid \tilde z)$. Никаких структурных изменений в loss-функции это не требует — нужно только разделить два encoder'а и memory bank'а. Это лучшая LUPI-совместимость из разобранных методов.

**Periodicity-совместимость.** ⚠ **Двусмысленная**. AimCLR не имеет local-local loss (как у TCLR), который бы расталкивал повторы — это плюс. Но Crop-аугментация с reflection padding ломает циклическую структуру в момент склейки, и Temporal Flip ломает асимметрию up/down фаз — это минусы. Если отключить Temporal Flip и заменить Crop на phase-aware crop, AimCLR станет periodicity-friendly. **Заметно лучше TCLR'а в этом аспекте.**

**Чувствительность к мелким геометрическим отклонениям.** ⚠ **Не доказана явно.** В отличие от TCLR (Diving-48 + 8 confused class pairs), AimCLR не делает fine-grained экспериментов. Но _косвенно_: KNN-результаты улучшаются на +13–14% на motion и bone потоках — это значит, что близкие в признаках действия действительно близки. Для нашей задачи различения «правильный присед / butt-wink присед» это нейтральное свидетельство, не полное подтверждение.

[КОММЕНТАРИЙ РЕЦЕНЗЕНТА] Сравнение AimCLR ↔ TCLR содержательно: TCLR оптимизирует для **внутриклассовой fine-grained различимости**, AimCLR — для **робастности к перцептивному шуму**. Для SmartRep идеален бы был синтез: TCLR'овская temporal contrastive structure + AimCLR'овский аугментационный набор + D³M-loss. Это потенциальная архитектурная новизна для нас.

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

1. **Temporal Flip аугментация физически неверна для асимметричных движений.** В скелетных action recognition датасетах реверс приемлем; в штанговых упражнениях — нет (эксцентрика и концентрика разные). **Гэп: ввести phase-aware augmentation set**, исключающий Temporal Flip, и формализовать классификацию аугментаций «direction-symmetric / direction-asymmetric»; продемонстрировать на ablation, что отключение Temporal Flip улучшает downstream-различимость технических ошибок на штанговом датасете.
    
2. **D³M-loss никогда не применялся к LUPI-сценарию с разными модальностями.** Авторы используют его только между normally- и extremely-augmented копиями _одного и того же входа_. **Гэп: расширить D³M до асимметричного teacher-student**, где teacher — full-sensory backbone (видео+IMU+barbell-tracker), student — только скелет; продемонстрировать, что distribution matching через memory bank работает, когда teacher и student имеют принципиально разные input modality (а не только разные аугментации).
    
3. **Нет edge-бенчмарков.** ST-GCN/4 потенциально лёгкий, но GFLOPs/латентность не измерены. **Гэп: воспроизвести 3s-AimCLR на нашей цели (Jetson Orin Nano + iPhone Neural Engine) + INT8-квантизация всех трёх потоков + бенч с реальной 30FPS gym-камерой.** Это даёт нам конкретный edge-результат, которого нет ни у одного из разобранных методов.
    
4. **Нет fine-grained AQA эвалуации.** AimCLR доказал робастность к шуму (PKU part II), но не доказал чувствительность к технике. **Гэп: построить силовой fine-grained бенчмарк** (parallel к Diving-48 / FineGym-99) на смеси Fit3D + наш барбелл-датасет, где категории определены не упражнением, а _named errors внутри упражнения_; провести AimCLR-эвалуацию и понять, переносится ли augmentation-driven robustness в внутриклассовую различимость.
    

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

**Приоритет: ВЫСОКИЙ.** AimCLR — **самый практичный** из разобранных skeleton-SSL методов для нашего pipeline. Не самый методологически глубокий (TCLR в этом сильнее), но имеет самый ценный технический набор: (i) аугментации, прямо моделирующие наш носишный/окклюзионный режим; (ii) D³M-loss, переносимый на LUPI; (iii) лёгкий backbone, готовый к edge-deployment; (iv) убедительные результаты на шумных данных (PKU part II), где CrosSCLR катастрофически рушится.

**Место в SmartRep-pipeline:** **первичный pretraining** скелетного backbone'а на смеси Fit3D + FLAG3D + наш барбелл-датасет. Конкретно — 3s-AimCLR с модифицированным аугментационным набором (без Temporal Flip, с phase-aware crop). Это replaces / supersedes CrosSCLR в roли nашего baseline pretraining'а.

**Прямой вклад в направления:**

- 🅲 (адаптация / few-shot): **значительный** — прямой backbone, semi-supervised результаты (10% labels) переносимы;
- 🅰 (error detection): **косвенный** — augmentation menu и EADM смягчают шум pose estimator'а и occlusion, что снижает false positives downstream-головы; но fine-grained чувствительность не доказана;
- 🅱 (biomech pose): **нулевой** — pose не выводится.

**Связанные статьи для следующего разбора:**

- **CLSA** (Wang & Qi, 2021) — прямой методологический предок D³M-loss'а; нужен для полноты понимания distribution matching SSL.
- **HiCLR / Hierarchical Consistent Contrastive Learning** (AAAI 2023) — прямое продолжение AimCLR с более систематическим подходом к strong augmentations; цитирует AimCLR как baseline.
- **CMD** (Mao et al., ECCV 2022) — Cross-modal mutual distillation between RGB and skeleton; прямой LUPI-аналог D³M.
- **PSTL** (Hu et al., 2023) — partial spatio-temporal learning со skeleton masking; прямой родственник EADM.
- **FineGym-99** (Shao et al., CVPR 2020) — для построения fine-grained eval-протокола, аналогично Diving-48 в TCLR.

---

### Мета-комментарий по работе шаблона B на AimCLR

Что **сработало**:

- Раздел 3 с таблицей аугментаций оказался самым ценным анализом всей карточки. Шаблон требует «перечислить все аугментации и особо отметить те, что ломают периодичность / геометрию». На AimCLR это требование вытащило критический риск (Temporal Flip) и одновременно три прямые «находки» (Gaussian Noise, Axis Mask, EADM ≈ occlusion). Без явного аудита аугментаций мы бы могли пропустить и риск, и преимущества.
- Поле «совместимость с downstream AQA-головами» в разделе 6 хорошо стыкуется с KNN-результатами из раздела 4. Естественная связка: если KNN работает, то и distance-based anomaly head поверх будет работать.
- Поле «LUPI-совместимость» в разделе 6 правильно поймало структурное преимущество D³M-loss'а — это самый сильный конкретный gap, который можно превратить в новизну SmartRep.

Что **трещит** на этой статье:

- **Раздел 4 «качественные результаты» снова смешан с ablation.** В AimCLR'е t-SNE визуализации (Figure 2: 3s-AimCLR кластеры компактнее, чем 3s-CrosSCLR) — это качественное доказательство «D³M реально структурирует пространство». Но шаблон не требует выделять качественные доказательства цели objective отдельно. Это та же проблема, что я описывал для TCLR: подсекция «прямые свидетельства того, что objective достиг своей цели» полезна.
- **Поле «periodicity-совместимость» сработало как двусмысленное.** AimCLR не имеет TCLR'овского explicit anti-periodicity loss, но Temporal Flip аугментация всё равно может ломать асимметрию — это другой механизм нарушения периодичности. Шаблон сейчас фокусируется на одном источнике (аугментации), но не на конструкции лоссов и не на семантической интерпретации augs. Полезно расширить вопрос: «ломают ли аугментации / лоссы / sampling: (а) циклическую структуру, (б) направленную асимметрию up/down, (в) фазовую идентичность повторов?». Три разных аспекта периодичности.
- **Memory bank size не явно требуется в шаблоне.** В AimCLR это значимый параметр (32k vs 30k у CrosSCLR vs нет у SimCLR), потому что определяет computational cost pretraining'а. Стоит вынести в раздел 3 как обязательное поле, чтобы не закапывать в «гиперпараметры обучения» одной строкой.
- **Shedding light на отношение к предшественнику отсутствует как явное поле.** AimCLR явно строится на CrosSCLR/SkeletonCLR; вся таблица 2 — это контрастные сравнения с SkeletonCLR. Когда статья — incremental improvement над конкретным предшественником, полезно явно назвать «direct ancestor» и «delta over ancestor» (что новое, что наследовано). Это ускорит чтение карточки и упростит миграцию gap'ов между связанными статьями.

Если согласен — могу:

- (а) внести правки в шаблон B: добавить `direct_ancestor` поле в YAML, расширить periodicity-вопрос на три оси, ввести подсекцию «прямые свидетельства objective» в разделе 4, вынести memory bank в обязательное поле раздела 3;
- (б) или продолжить применение текущей версии на следующей статье. Из связанных, что у тебя в pipeline: CMD (LUPI cross-modal — структурно ближе всего к нашей задаче из всех); HiCLR (более систематический подход к strong augs); или, как ранее обсуждали, FLEX (synthesis — D-шаблон на реальной статье из нашей ниши).