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

1. **`paper_type` корректно определён шаблоном.** TCLR — чистый SSL backbone для видео, downstream-эвал классификационный (Top-1, Recall@K). AQA-метрик нет → шаблон B применим.
2. **Модальность — RGB-видео, не скелет.** В отличие от CrosSCLR это видео-CNN, а не ST-GCN. Это меняет ответ на «backbone reusability»: метод напрямую _не_ применим к скелетному input'у SmartRep, но методология (три loss'а) переносима. Этот разрыв я выделяю явно.
3. **Direction = 🅲 как default, но с нетривиальным spillover в 🅰.** В отличие от CrosSCLR, TCLR явно демонстрирует fine-grained discrimination на confused-class pairs (74.8% vs 44.9% у baseline IC) и на Diving-48. Это самый близкий по духу к нашей задаче результат из всей skeleton/video CL литературы. Я фиксирую это как уникальную особенность.
4. **Periodicity-эффект — двойственный.** Local-Local loss работает на уровне всего видео и активно расталкивает разные временные сегменты. На периодическом видео (5 повторов приседа) это означает, что разные повторы становятся негативами друг к другу — это противоположно тому, что нам нужно. Я разворачиваю эту проблему явно — это самый сильный gap.
5. **Edge — частичный fallback.** Для R3D-18 авторы дают только параметры (13.5M), без GFLOPs/латентности/квантизации. Применяю качественный fallback: medium для нашего use case.

---

```yaml
---
title: "TCLR: Temporal Contrastive Learning for Video Representation"
title_ru: "TCLR: Темпоральное контрастивное обучение для представлений видео"
short_name: "TCLR"
authors: [Dave I., Gupta R., Rizve M.N., Shah M.]
year: 2022
venue: "Computer Vision and Image Understanding (CVIU), Elsevier"
venue_tier: "Q1"
doi: "https://doi.org/10.1016/j.cviu.2022.103406"
arxiv: "https://arxiv.org/abs/2101.07974"
code: "https://github.com/DAVEISHAN/TCLR"
paper_type: "ssl_backbone"
synthesis_subtype: null
tags: [ssl, contrastive, instance_discrimination, video_modality, cnn, fine_grained_classification]
relevance_to_smartrep: 4
direction: "🅲"   # primary, с нетривиальным spillover в 🅰 — обоснование в TL;DR
status: "reviewed"
---
```

# TCLR (Dave et al., CVIU 2022) — литобзор для SmartRep

## 2. Core Contribution (TL;DR)

TCLR — это contrastive SSL для видео, в котором стандартный instance-discrimination (InfoNCE между клипами разных видео) дополнен двумя новыми темпоральными лоссами: **Local-Local** (разные непересекающиеся клипы того же видео — негативы между собой) и **Global-Local** (срезы карты признаков длинного «глобального» клипа должны совпадать с эмбеддингами коротких «локальных» клипов на тех же таймстепах). Главное отличие от предшественников — **явно навязывается темпоральная _различность_ (а не инвариантность)** внутри одного видео-инстанса; CVRL [Qian et al., CVPR 2021] лишь ослаблял временную инвариантность через weighted sampling, TaCo [Bai et al.] — добавлял pretext-задачи, а TCLR делает это контрастивно. **Direction для нас — 🅲 (SSL pretraining backbone)** как primary, но с **нетривиальным spillover в 🅰**: статья прямо демонстрирует, что temporal-aware contrastive обучение существенно улучшает _внутриклассовую_ fine-grained дискриминацию (Diving-48 +6.3% vs IC; 8 highly confused class pairs — 74.8% vs 44.9% у IC). Это редкое для SSL-литературы явление — обычно SSL «склеивает» близкие классы; здесь, наоборот, метод их разделяет, что напрямую релевантно нашей задаче «правильный присед vs присед с butt-wink».

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

**SSL-задача.** Тройная контрастивная задача: instance-level (InfoNCE по видео) + within-instance (LL по клипам) + within-clip (GL по таймстепам feature map). Все три используют InfoNCE-форму с нормализацией и температурой, но различаются составом позитивов и негативов.

**Backbone.** Три варианта 3D-CNN, все с входом 16 кадров × 112×112:

- **R3D-18** (3D-ResNet-18): 13.5M параметров;
- **R(2+1)D-18**: 14.4M;
- **C3D**: 27.7M.

В conv5 модифицирован stride на 1 и dilation на 2, чтобы сохранить temporal receptive field, но получить feature map с временной размерностью 4 (после пенультимэйт-слоя): 4 × 512.

**Projection head.** MLP: Linear(512, 512) → ReLU → Linear(512, 128) → L2-norm. Эмбеддинг 128-D для всех трёх лоссов; backbone и MLP **разделяемы** между лоссами.

**Аугментации.** Все применяются темпорально-консистентно (один и тот же набор параметров на все кадры клипа):

- _Геометрия:_ random resized crop (scale ∼ U(0.6, 1.0)), random horizontal flip (p=0.5), **random erase** (p=0.5);
- _Внешний вид:_ random contrast / hue / saturation / brightness, random grayscale, channel drop;
- В ablation: gaussian blur (+0.8% top-1), shear & rotate (+0.3%) — в основные результаты не включены.

⚠ **Аугментации, ломающие нашу периодичность:** random crop с переменным scale меняет видимый размер тела (оператор смещения), но не ломает циклическую структуру кадров. Главная проблема — **сама конструкция Local-Local loss** (см. ниже), не аугментации.

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

Стандартный instance contrastive (между видео): $$ \mathcal{L}_{\text{IC}}^{i} = -\log \frac{h(G_i, G_i')}{\sum_{j=1}^{N_B} \big[\mathbb{1}_{[j \neq i]} h(G_i, G_j) + h(G_i, G_j')\big]} $$ где $h(u, v) = \exp\left(u^\top v / (|u||v|\theta)\right)$, $\theta = 0.1$ — температура.

Local-Local (внутри одного видео, между его непересекающимися клипами): $$ \mathcal{L}_{\text{LL}}^{i} = -\sum_{p=1}^{N_{\text{clips}}} \log \frac{h(G_{i,p}, G_{i,p}')}{\sum_{q=1}^{N_{\text{clips}}} \big[\mathbb{1}_{[q \neq p]} h(G_{i,p}, G_{i,q}) + h(G_{i,p}, G_{i,q}')\big]} $$

**Геометрический смысл LL:** для каждого клипа $p$ позитив — его аугментированная копия, негативы — _все остальные клипы того же видео_. Это явно требует, чтобы признаки разных временных сегментов одного видео были различимы. **Здесь же закопан главный риск для нашей задачи** (см. раздел 6).

Global-Local (внутри одного клипа, между global и local представлениями): $$ \mathcal{L}_{\text{GL}_k}^{i} = \log \frac{h(L_{i,k}, G_{i,k})}{\sum_{q=1}^{N_{\text{clips}}} h(L_{i,k}, G_{i,q})} + \log \frac{h(G_{i,k}, L_{i,k})}{\sum_{q=1}^{N_{\text{clips}}} h(G_{i,k}, L_{i,q})} $$ $$ \mathcal{L}_{\text{GL}}^{i} = -\sum_{k=1}^{N_{\text{clips}}} \mathcal{L}_{\text{GL}_k}^{i} $$

где $L_{i,k}$ — локальный (до temporal pooling) признак $k$-того таймстепа feature map _глобального_ клипа, а $G_{i,k}$ — глобальный признак _локального_ клипа $k$. Симметрично-двухсторонний (anchor с обеих сторон). **Геометрический смысл:** срезы feature map должны кодировать темпоральную локальность — то есть фрагмент признаковой карты на позиции $k$ должен «чувствовать» именно то, что происходит в локальном клипе на позиции $k$.

Полный лосс: $$ \mathcal{L} = \sum_{i=1}^{N_B} \big(\mathcal{L}_{\text{IC}}^{i} + \mathcal{L}_{\text{LL}}^{i} + \mathcal{L}_{\text{GL}}^{i}\big) $$

Все три слагаемых — без весовых коэффициентов (равный вклад).

**Двухстадийность / warm-up.** Все три лосса включаются с самого начала; в отличие от CrosSCLR, **нет двухэтапного warm-up**. Только linear LR warm-up первые 10 эпох (от 1e-5 до 1e-3).

**Гиперпараметры.** Adam (β₁=0.9, β₂=0.999), LR 1e-3 с decay по plateau, batch 40 (значительно меньше, чем у MoCo/SimCLR — благодаря отсутствию memory bank). 400 эпох на UCF101, 100 эпох на Kinetics-400. $N_{\text{clips}} = 4$ локальных на 1 глобальный (skip rate 1 для local, 4 для global; глобальный клип покрывает 64 кадра, локальные — по 16). Температура 0.1 для всех лоссов; критично, чтобы температура temporal-лоссов **была не ниже** температуры IC (иначе деградация на 25%+).

**Diagram.**

```mermaid
flowchart LR
    V[Video V_i ~64 frames] --> SC[Sample 1 global clip + 4 local clips]
    SC --> CG[Global Clip 16f, skip 4]
    SC --> CA[Local Clip A 16f, skip 1]
    SC --> CB[Local Clip B 16f, skip 1]
    SC --> CC[Local Clip C 16f, skip 1]
    SC --> CD[Local Clip D 16f, skip 1]

    CA --> Aug1[Temporally consistent aug] --> E1[3D-CNN R3D-18]
    CB --> Aug2[Temporally consistent aug] --> E2[3D-CNN R3D-18]
    CC --> Aug3[Temporally consistent aug] --> E3[3D-CNN R3D-18]
    CD --> Aug4[Temporally consistent aug] --> E4[3D-CNN R3D-18]
    CG --> Aug5[Temporally consistent aug] --> E5[3D-CNN R3D-18]

    E1 -. global feat .-> G[Pooled G_i,k 128-D]
    E2 -. global feat .-> G
    E3 -. global feat .-> G
    E4 -. global feat .-> G
    E5 -. local feats per timestep .-> L[L_i,k 128-D x 4]

    G --> P[MLP Projector]
    L --> P

    P --> LIC[L_IC: clips of OTHER videos as negatives]
    P --> LLL[L_LL: clips of SAME video as negatives]
    P --> LGL[L_GL: G_i,k vs L_i,k same timestep = positive]

    LIC --> Total[L = L_IC + L_LL + L_GL]
    LLL --> Total
    LGL --> Total
```

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

**Pretraining datasets.**

- UCF101 (~13 320 видео, 101 класс) — основной;
- Kinetics-400 (~222 454 видео, 400 классов) — для большего масштаба;
- HMDB51 (~7 000 видео, 51 класс) — только для downstream-оценки.

**Downstream protocols.**

- **Action recognition** (linear eval + finetune) на UCF101 и HMDB51;
- **Nearest-Neighbor video retrieval** на UCF101 и HMDB51 (без supervised finetuning);
- **Limited-label finetuning** (1%, 5%, 10%, 20%, 50%, 100% меток);
- **Fine-grained action recognition на Diving-48** (категории определены комбинацией takeoff/flight/entry — внутриклассовые различия только в одной из трёх стадий) — авторы заявляют первое использование этого датасета для оценки SSL-репрезентаций.

**Метрики downstream:** Top-1 / Top-5 accuracy для классификации, Recall@1/5/10/20 для retrieval. **AQA-метрик (Spearman, AUROC, error breakdown) нет — ожидаемо для SSL-backbone статьи.**

**Ключевые результаты (R3D-18, UCF101 pretrain).**

|Setup|UCF101 (split-1) finetune|HMDB51 finetune|NN-Retrieval R@1 (UCF)|
|---|---|---|---|
|Random init|62.39|26.95|8.21|
|L_IC only (instance contrastive baseline)|71.31|38.32|40.76|
|L_IC + L_LL|77.70 (+6%)|49.77 (+11%)|51.10 (+10%)|
|L_IC + L_GL|76.30 (+5%)|47.87 (+10%)|47.32 (+7%)|
|**TCLR (full)**|**82.40 (+11%)**|**52.80 (+14%)**|**56.17 (+15%)**|

С R(2+1)D-18 + Kinetics-400 pretrain → UCF: 88.2%; HMDB: 60.0%.

**Diving-48 (fine-grained):**

|Pretrain|Top-1|
|---|---|
|Random init|13.4|
|MiniKinetics supervised|18.0|
|L_IC (instance contrastive)|15.8|
|CVRL [Qian et al.]|17.6|
|**TCLR**|**22.9**|

[КОММЕНТАРИЙ РЕЦЕНЗЕНТА] Это самая важная цифра для нас. На fine-grained датасете TCLR обходит и instance contrastive, и даже supervised pretraining на MiniKinetics. Это эмпирическое подтверждение, что объект temporal-distinctiveness в SSL может приносить пользу именно для задач, где нужна _внутриклассовая_ различимость — то есть прямой аналог нашей задачи различения «правильный присед / присед с ошибкой».

**Confused class pairs (UCF101).** Авторы анализируют 8 пар наиболее путающихся классов (CricketShot/Bowling, FrontCrawl/BreastStroke, PlayingFlute/Violin, PullUps/JumpingJack — визуально похожие, отличаются темпоральной структурой):

|Setup|Среднее recall по 8 confused классам|
|---|---|
|Scratch (no pretrain)|42.5%|
|L_IC pretrain|44.9%|
|**TCLR pretrain**|**74.8%**|

Скачок +30 процентных пунктов — это качественно другой режим, не «небольшое улучшение».

**Label efficiency (1% меток на UCF101):** TCLR 26.9% vs MemDPC ~16% vs random 6.1%. На 10% меток TCLR достигает результата конкурентов с 100% меток.

**Качественные результаты.** t-SNE визуализация (Section J supplementary): TCLR-кластеры по классам существенно компактнее, чем у IC, для классов с тонкими различиями (ApplyEyeMakeup, ApplyLipstick, BlowDryHair). Cosine similarity между таймстепами одного клипа: для random init ≈0.7–0.8, для IC pretrain ≈0.9–0.98 (то есть IC коллапсирует темпоральное разнообразие!), для полного TCLR — ≈ -0.1 ÷ 0.04 (близко к ортогональности). То есть TCLR действительно учит, что разные таймстепы должны быть линейно независимы.

**Ablation по компонентам.** L_LL и L_GL дают примерно равный вклад (+6% и +5% над L_IC соответственно), но **их эффекты ортогональны** — комбинация даёт +11% (т.е. суперпозиция, а не дублирование). Без L_IC одни temporal-лоссы дают слабый linear eval (23.4%), но хороший finetune (74.3%) — то есть они дают полезную инициализацию, но не выучивают линейно разделимые представления.

**Ablation по архитектурным решениям.**

- $N_T = 4$ оптимально, $N_T = 2$ даёт −3.31%; $N_T \geq 8$ не пробовали из-за GPU memory.
- Embedding size: 128 → 256 → 512 даёт +0.21%, +0.72% — почти плато.
- Skip rate: использование разных skip rate для anchor и positive в L_IC даёт −2.3%; рандомизация skip rate в L_GL даёт −2.6%.
- Temperature: оптимум 0.1/0.1; настройка temporal < instance критически вредна.

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

|Параметр|Значение|
|---|---|
|Параметры энкодера на инференсе (M)|13.5 (R3D-18), 14.4 (R(2+1)D-18), 27.7 (C3D)|
|GFLOPs|НЕ УКАЗАНО|
|Latency + железо|НЕ УКАЗАНО|
|Квантизация / дистилляция|НЕ ОБСУЖДАЕТСЯ|
|Edge / mobile deployment|НЕ ОБСУЖДАЕТСЯ|
|Memory bank на инференсе|Не используется (нет memory bank вообще; batch-only InfoNCE)|
|EMA encoder / momentum copy|Не используется|
|MLP projector на инференсе|Не нужен (только для pretraining loss)|

**Качественный fallback (≥4 НЕ УКАЗАНО):** **medium** для нашего use case. R3D-18 — это full 3D-конволюции 16×112×112; на mobile-Jetson класса Orin Nano это может выйти на ~30 FPS, но на смартфоне (CoreML / NNAPI) — скорее ниже. **Хорошая новость:** ничего из SSL-инфраструктуры (memory bank, EMA, projector) не требуется на инференсе — только R3D-18 backbone. Также batch=40 (вместо 256+ у MoCo/SimCLR) — это означает, что воспроизводимость pretraining'а у нас на одной 24GB GPU реалистична.

[КОММЕНТАРИЙ РЕЦЕНЗЕНТА] R(2+1)D-18 интереснее R3D-18 для edge: разделение пространственных и временных свёрток даёт лучшую квантизацию и часто меньшую latency на mobile NPU при сравнимом числе параметров. Если будем брать TCLR в качестве baseline'а — стоит брать R(2+1)D-18 + K400 pretrain (88.2% на UCF, 60.0% на HMDB — лучший их результат).

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

**Backbone reusability.** ❌ **Напрямую НЕ совместим** с скелетным input'ом SmartRep (33 точки COCO/MoveNet). TCLR — это RGB-видео метод (16×3×112×112), backbone — full 3D-CNN. Перенести _архитектуру_ нельзя; **переносима только методология лоссов** (L_LL, L_GL легко формулируются для любого энкодера, включая ST-GCN / Transformer над скелетом). Это меняет роль статьи с «готовый pretraining» на «методологический шаблон для адаптации».

**Pretraining recipe transferability.** Большинство трюков переносимы:

- Batch 40 с тремя лоссами без memory bank — практично для нашего масштаба;
- Temperature 0.1 для всех — стандартный sweet spot;
- $N_{\text{clips}} = 4$ — реалистично;
- Адам с warm-up + plateau decay — стандарт;
- Не переносится: `conv5 stride=1 + dilation=2` — это специфично для R3D-18; для ST-GCN нужна аналогичная модификация temporal blocks.

**Domain gap к силовому тренингу.** Очень большой. UCF101 — обыденные действия и спорт, Kinetics — то же. Из спорта релевантнее всего PullUps (есть в UCF101) и ApplyEyeMakeup (как пример визуально похожих действий). Diving-48 ближе по духу (фигурный спорт, fine-grained), но всё равно — голый человек прыгает, без штанги. Для нашего домена нужен либо отдельный fitness-pretrain (Fit3D + FLAG3D + наш барбелл-датасет), либо domain adaptation поверх TCLR-инициализации.

**Совместимость с downstream AQA-головами.** ✅ **Хорошая.** Главное преимущество TCLR относительно CrosSCLR в том, что выходные эмбеддинги _не склеивают_ fine-grained различия. Это означает, что поверх TCLR-энкодера можно навесить:

- One-class anomaly head (KNN distance до centroid эталонных подходов);
- Per-frame regression head на joint angle deviations;
- Per-rep classification head на named errors (после fine-tuning).

Риск коллапса при one-class pretraining (только эталонные подходы): здесь L_LL сохраняет свою функцию (разные клипы одного эталонного видео всё равно темпорально различимы), а L_IC может тривиализоваться при малом разнообразии видео. Это фиксируемо через смешанную выборку (правильные + ошибочные подходы как разные видео), даже если ошибки не размечены.

**LUPI-совместимость.** ⚠ **Слабая.** TCLR — однопоточный (одна модальность RGB). Нет встроенного механизма teacher↔student асимметрии. Однако global-local loss концептуально близок к LUPI: «более информативный» global encoder подсказывает «менее информативному» local encoder темпоральную структуру. Можно адаптировать: Teacher = full-video с IMU, Student = только видео-клипы; глобальные признаки teacher'а должны совпадать с локальными признаками student'а на тех же таймстепах.

**Periodicity-совместимость.** ❌ **Серьёзный конфликт.** Это главная проблема для нас. Local-Local loss на уровне всего видео:

- Берёт 4 непересекающихся клипа из одного видео и **расталкивает их в эмбеддинг-пространстве**;
- На обычном UCF-видео (LongJump = бег + прыжок: разные стадии) это работает отлично;
- На периодическом нашем видео (5 повторов приседа) это **расталкивает разные повторы того же упражнения**, что прямо противоположно нужной нам симметрии «все правильные повторы должны быть похожи».

Это не аугментационная проблема (как у CrosSCLR с reflection-padding), а **архитектурная**: сама конструкция позитивов и негативов противоречит периодичности. Прямой transfer на наш случай требует переосмысления L_LL.

**Чувствительность к мелким геометрическим отклонениям.** ✅ **Высокая, по построению.** Это уникальное свойство TCLR относительно других SSL-методов. Confused-class result (74.8 vs 44.9 у IC на 8 fine-grained парах) — прямое доказательство. Cosine similarity между таймстепами одного клипа близка к нулю (≈ ортогональны) — модель _активно сопротивляется_ темпоральному коллапсу признаков. Для нас это означает: TCLR-энкодер с большой вероятностью сохранит чувствительность к моменту pelvic tilt'а или valgus knee'а, а не усреднит весь подход в один «вектор приседа».

[КОММЕНТАРИЙ РЕЦЕНЗЕНТА] Сочетание ✅ (fine-grained чувствительность) и ❌ (periodicity-конфликт) очень показательно: TCLR одновременно даёт нам именно то, что нужно (различимость технических ошибок), и ровно ту проблему, которую нужно решить (несимметричная обработка повторов). Это удачный «полупродукт» — половина работы сделана, гэп для нас выкристаллизовывается чётко.

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

1. **L_LL расталкивает повторы — нужен phase-aware refactor.** Текущая формулировка L_LL обрабатывает 5 повторов приседа как «5 разных фрагментов» и заставляет их быть несхожими. Для повторных движений правильная формулировка: «разные _фазы_ одного повтора — негативы, а _одинаковые фазы разных повторов_ — позитивы». **Гэп: ввести phase-aware Local-Local loss**, где сэмплинг клипов идёт сначала по rep-index (rep-aware boundary detection), потом по фазе внутри rep'а; это сохраняет темпоральную чувствительность TCLR без разрушения rep-симметрии.
    
2. **Skeleton-only адаптация L_LL и L_GL.** Авторы показали, что temporal contrastive losses работают для 3D-CNN над RGB. Для нашего edge-pipeline нужен ST-GCN или Transformer над 33-точечным скелетом. **Гэп: воспроизвести L_LL + L_GL поверх ST-GCN (CrosSCLR-style backbone)** на смеси Fit3D + FLAG3D + наш барбелл-датасет; проверить, переносится ли fine-grained discrimination effect (Diving-48 эффект) на скелетный домен.
    
3. **Нет edge-бенчмарков.** R3D-18 13.5M — это medium для mobile, но GFLOPs/latency не измерены. **Гэп: TCLR-style pretraining поверх лёгкого ST-GCN (~1M параметров) + INT8-квантизация + бенчмарк на Jetson Orin Nano и iPhone Neural Engine.** Это даст нам публикационный edge-результат, которого нет ни у TCLR, ни у CrosSCLR.
    
4. **Нет привилегированных модальностей (LUPI).** Global-Local loss использует один backbone и две его проекции (full clip vs slices). **Гэп: расширить L_GL до асимметричного teacher-student**, где teacher видит RGB+IMU+barbell-tracker (полная сенсорная картина в момент сбора), а student — только видео или только скелет (то, что доступно на инференсе). Темпоральные срезы teacher'а используются как pseudo-supervision для student'а на той же временной позиции.
    

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

**Приоритет: ВЫСОКИЙ.** TCLR — самая близкая по духу SSL-статья к нашей задаче из числа разобранных: она единственная явно демонстрирует, что contrastive SSL может _усиливать_ (а не размывать) внутриклассовую дискриминацию, что прямо отвечает нашему требованию различать «хорошую» и «плохую» технику внутри одного упражнения.

**Место в SmartRep-pipeline:** методологический шаблон для нашего собственного pretraining'а скелетного энкодера, **не готовый backbone**. Концепции L_LL и L_GL переносятся; архитектура (3D-CNN над RGB) — нет. Этап: **pretraining** скелетного backbone на смешанном fitness-датасете + **методологический baseline для собственного нового loss'а** (phase-aware Local-Local).

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

- 🅲 (адаптация / few-shot): **значительный** — methodology, label efficiency results (TCLR @ 10% labels ≈ baseline @ 100%) переносимы;
- 🅰 (error detection): **косвенный, но важный** — fine-grained class discrimination capability дает основания надеяться, что TCLR-style энкодер чувствителен к ошибкам техники; одна из немногих SSL-статей, где этот мост построен явно;
- 🅱 (biomech pose): **нулевой** — pose не выводится, биомех не учитывается.

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

- **CVRL** (Qian et al., CVPR 2021) — прямой предшественник по теме «не enforce'ить лишнюю темпоральную инвариантность»; TCLR на нём строится. Полезно для контекста.
- **STCLR** (Sparse TCLR, 2025) — прямое продолжение, исправляет «adjacent clips of same action stage» проблему через sparse sampling; критично прочитать, потому что это уже наполовину наш phase-aware refactor.
- **CoCLR** (Han et al., NeurIPS 2020) — multi-modal positive mining (RGB ↔ optical flow); прообраз LUPI-схемы.
- **VideoMAE** (Tong et al., NeurIPS 2022) — masked-modeling альтернатива; нужно для решения «контрастив или masked?».
- **Diving-48 paper** (Li et al., ECCV 2018) — методология fine-grained action eval; полезно для дизайна нашего собственного fitness-fine-grained бенчмарка.

---

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

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

- Раздел 4 без AQA-метрик — корректно молчит, не провоцирует Spearman/AUROC. Это улучшение относительно старого общего шаблона, который раньше натягивал AQA-нарратив.
- Поле «чувствительность к мелким геометрическим отклонениям» в разделе 6 идеально вытащило главный плюс TCLR (Diving-48 + confused pairs). Без этого поля метод смотрелся бы как «ещё одно contrastive».
- Поле «periodicity-совместимость» в разделе 6 идеально вытащило главный минус. Шаблон сделал работу селекцией признаков «✅ для классификации видео / ❌ для нашего домена».
- Поле «backbone reusability» сработало как ранний фильтр: сразу зафиксировано, что метод RGB-only, а не skeleton, что меняет всю интерпретацию релевантности.

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

- **Edge fallback сработал, но тонко.** R3D-18 — это пограничный случай между «medium» и «heavy»; фолбэк-классификация (`lightweight / medium / heavy / unknown`) по одной только архитектуре дает неоднозначность. Полезно добавить вторую качественную ось — `mobile_friendly: true/false/unknown` с обоснованием по типу свёрток (full 3D vs (2+1)D vs depthwise).
- **`paper_type: ssl_backbone` оказался слишком узкой меткой.** TCLR — это SSL backbone, но с явной демонстрацией fine-grained downstream effect, что роднит его и с AQA-парадигмой. Строгое разделение через `paper_type` теряет этот мост. Возможно, стоит ввести поле `secondary_relevance: [aqa | pose | synthesis]` — opt-in указание, что статья имеет нетривиальный spillover в смежную задачу.
- **Раздел 4 «качественные результаты» не отделён от ablation.** В TCLR'е cosine similarity матрица между таймстепами (диагональ 1, off-diagonal ≈ -0.1 для полного TCLR vs ≈ 0.9 для IC) — это качественный результат, который доказывает геометрию пространства и важнее многих SOTA-таблиц. Шаблон сейчас прячет это в разделе 4 как «t-SNE / attention maps». Полезно выделить в отдельную подсекцию **«Прямые свидетельства того, что objective достиг своей цели»** — это часто самый честный сигнал применимости.
- **Periodicity-вопрос в разделе 6 сейчас формулируется только через аугментации.** TCLR показал, что _сама конструкция позитивов/негативов_ может ломать периодичность — независимо от аугментаций. Стоит расширить вопрос: «ломают ли _аугментации ИЛИ конструкция позитивов_ цикличность?».

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

- (а) внести правки в шаблон B (добавить `secondary_relevance`, расширить periodicity-вопрос, ввести подсекцию «прямые свидетельства objective»);
- (б) или продолжить применение текущей версии на FLEX (направление D, synthesis), оставив шлифовку шаблонов на потом.