

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

1. **Шаблон, который ты передал — старый общий, не B/C/D.** Это, видимо, осознанный выбор: RepNet не вписывается чисто ни в один из четырёх специализированных шаблонов. Он не AQA (не оценивает качество), не SSL backbone (обучен **supervised** на синтетических метках, не на pretext task'е), не pose, не synthesis (синтез у него — _вспомогательный инструмент_, а не основной вклад). Это **task-specific метод для повторов**, и для него у нас в новой системе шаблонов нет точной полки. Использую общий шаблон как требуешь, но в мета-комментарии разворачиваю это наблюдение — возможно, нам нужен 5-й шаблон.
2. **Direction в шаблоне default 🅰 как «Self-supervised motion / One-class AQA».** Это устаревшая интерпретация 🅰; в твоём актуальном проекте 🅰 = «fine-grained error detection». RepNet не делает error detection напрямую. Честный ответ: **RepNet — preprocessing-инфраструктура для 🅰**, не сама 🅰. Он даёт per-rep сегментацию, без которой per-rep error detection невозможен. Эту переинтерпретацию явно фиксирую в TL;DR.
3. **Supervised, не SSL.** Метки приходят бесплатно из синтетического конструирования видео, но loss'ы — софтмакс CE (классификация длины периода) + бинарный CE (периодичность). Это важно: фишка статьи не в self-supervision, а в **архитектурном bottleneck'е (TSM)** + умной синтетике.
4. **Edge feasibility — критично негативная.** ResNet-50 backbone + 3D conv + Transformer + multi-speed evaluation (×4) делают RepNet **heavy** для нашего edge-таргета. Это меняет роль метода в pipeline: не deployment-кандидат, а **teacher для дистилляции** или **dataset-construction tool**.

---

```yaml
title: "Counting Out Time: Class Agnostic Video Repetition Counting in the Wild"
title_ru: "Class Agnostic подсчёт повторов в видео в реальных условиях"
short_name: "RepNet"
authors: [Dwibedi D., Aytar Y., Tompson J., Sermanet P., Zisserman A.]
year: 2020
venue: "CVPR"
venue_tier: "A*"
doi: "https://openaccess.thecvf.com/content_CVPR_2020/papers/Dwibedi_Counting_Out_Time_Class_Agnostic_Video_Repetition_Counting_in_the_CVPR_2020_paper.pdf"
arxiv: "https://arxiv.org/abs/2006.15418"
code: "https://github.com/google-research/google-research/tree/master/repnet"
project_page: "https://sites.google.com/view/repnet"
tags: [periodicity]   # из фикс. словаря шаблона; ниже комментирую расширения
relevance_to_smartrep: 4   # узко, но критически важно — для одной конкретной функции pipeline
direction: "🅰 (preprocessing/utility, не сам error detection)"
status: "reviewed"
```

# RepNet (Dwibedi et al., CVPR 2020) — литобзор для SmartRep

## 2. Core Contribution (TL;DR)

RepNet — **supervised** (не SSL!) метод _class-agnostic подсчёта повторов и детекции периодических сегментов_ в видео. Решаемая проблема — **periodicity estimation**, но не через self-supervision (как ожидает шаблон), а через комбинацию двух идей: (i) **информационное узкое горлышко** в виде Temporal Self-similarity Matrix (TSM, размер $N \times N$, 1 канал — на два-три порядка меньше латентного пространства), которое заставляет модель опираться только на структуру похожестей кадров, а не на их семантическое содержание; (ii) **синтетическое обучение** через автоматическую конструкцию повторяющихся видео из произвольных Kinetics-клипов с camera motion augmentation. Combination этих двух идей даёт классо-агностическую генерализацию: модель, обученная на синтетике из Kinetics, работает на jumping jacks, ультразвуковых эхокардиограммах, спутниковых видео Земли и хлопаньях крыльев у птиц одинаково.

[КОММЕНТАРИЙ РЕЦЕНЗЕНТА] Шаблон ставит default direction "🅰 Self-supervised motion / One-class AQA". Это **неверная классификация** для RepNet. По актуальной таксономии SmartRep'а — RepNet не SSL (loss'ы supervised), не one-class (multi-class period length + binary periodicity), не AQA (не оценивает качество техники). Честная роль: **инфраструктурный pre-processing для 🅰** — даёт per-rep сегментацию видео подхода, без которой per-rep error detection не имеет смысла. Это утилитарная статья для нашего pipeline, не методологическая основа.

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

**Механизм обучения.** Supervised end-to-end. Метки берутся из автоматической конструкции синтетического датасета: при создании повторяющегося видео мы сами знаем длину периода $P$ и факт периодичности каждого кадра. Это позволяет учить модель supervised loss'ами без human annotation.

**SSL-задача? — НЕТ.** Шаблон предполагает SSL-механизм, но RepNet его не использует. Это важно отметить отдельно, потому что многие косвенные источники называют RepNet «self-supervised» — это неверно: метки предсказываются (period class, periodicity binary) с обычной cross-entropy.

**Backbone.** Трёхкомпонентный энкодер $\phi$:

1. **Convolutional feature extractor:** ResNet-50 (ImageNet pretrained), берётся выход слоя `conv4_block3`, чтобы сохранить большую spatial map. Per-frame features 7×7×1024.
2. **Temporal context block:** 3D-конволюция, 512 фильтров 3×3×3, ReLU. Назначение — добавить short-term motion информацию, чтобы модель различала визуально похожие кадры (например, рука движется _вверх_ vs _вниз_ при упражнении).
3. **Dimensionality reduction:** Global 2D MaxPool по spatial dim → 512-D per-frame embedding $x_i$. Никакого explicit tracking региона интереса не нужно — pooling снимает эту проблему.

**Temporal Self-similarity Matrix (TSM) — ключевой элемент.** После получения per-frame эмбеддингов ${x_i}_{i=1}^N$ строится матрица $S \in \mathbb{R}^{N \times N}$: $$ S_{ij} = \text{softmax}_j\big(-|x_i - x_j|^2\big) $$ То есть pairwise похожесть = отрицательное квадратичное евклидово расстояние, далее row-wise softmax. **Это однокальный 2D-«снимок» временной структуры всего видео.**

[КОММЕНТАРИЙ РЕЦЕНЗЕНТА] Информационное сжатие здесь экстремальное: $512 \to 1$ канал. Авторы утверждают (и эмпирически подтверждают), что именно это узкое горлышко даёт class-agnostic генерализацию: TSM jumping jacks и TSM swimming похожи, если темпы похожи, потому что TSM не «помнит» содержание кадров — только их относительную близость во времени.

**Period Predictor.** Принимает $S$ и выдаёт два per-frame предсказания через shared backbone:

1. Conv 32 фильтра 3×3 на TSM
2. Transformer (4 головы по 128 dim, total 512 dim, learned positional embeddings длины 64)
3. Раздваивается на:
    - **Period length classifier** $\psi$: 2 FC слоя (512), softmax над дискретными классами $L = {2, 3, \ldots, N/2}$
    - **Periodicity classifier** $\tau$: 2 FC слоя (512), бинарная вероятность

**Аугментации.**

- Стандартные spatial augs не выделены отдельно;
- **Camera motion augmentation** — главная новинка. Параметры (rotation, scale, horizontal/vertical translation) **меняются плавно во времени**, а не независимо для каждого кадра. Это сохраняет temporal coherence естественного видео, иначе TSM сломается. Optimal fraction = 0.75 (75% батча с camera motion).

⚠ **Camera motion augmentation для нашего домена.** В нашем зальном сценарии камера может быть статичной (телефон на штативе) ИЛИ shaky (пользователь в руках держит). Аугментация RepNet моделирует второй случай — это полезно. Но не моделирует occlusion (штанга, гриф, бамперы), что для нас критично.

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

Periodicity classifier (binary cross-entropy per frame): $$ \mathcal{L}_{\text{per}} = -\sum_{i=1}^{N} \big[y_i^{\text{per}} \log p_i + (1 - y_i^{\text{per}}) \log (1 - p_i)\big] $$

Period length classifier (softmax cross-entropy per frame, multiclass over $L = {2, \ldots, N/2}$): $$ \mathcal{L}_{\text{len}} = -\sum_{i=1}^{N} \sum_{l \in L} y_{i,l}^{\text{len}} \log \hat{l}_{i,l} $$

где $\hat{l}_{i,l}$ — предсказанная вероятность того, что длина периода для кадра $i$ равна $l$.

Полный лосс — простая сумма (явно в статье не приведена, но из контекста): $$ \mathcal{L}_{\text{total}} = \mathcal{L}_{\text{per}} + \mathcal{L}_{\text{len}} $$

**Геометрический/информационный смысл.** Periodicity loss отвечает на вопрос «является ли этот кадр частью повторяющегося сегмента?» — бинарная классификация. Length loss — «какова длина текущего периода в кадрах?» — multiclass. Оба сигнала вычисляются _из TSM_, не из сырых признаков, поэтому модель вынуждена опираться на временную структуру, а не на content.

**Двухстадийность.** Нет. Один режим обучения, 400K шагов, batch 5 видео × 64 кадра, Adam LR 6e-6.

**Multi-speed inference (важно для применимости).** Модель умеет предсказывать только периоды до $N/2 = 32$ кадра. Чтобы покрыть более длинные периоды, на инференсе видео проигрывается на скоростях ${1\times, 2\times, 3\times, 4\times}$, и выбирается скорость с наивысшим confidence. **Это означает 4× стоимость инференса** — серьёзный edge-минус.

**Diagram.**

```mermaid
flowchart LR
    V[Video N=64 frames 112x112] --> CNN[ResNet-50 conv4_block3]
    CNN --> F[per-frame 7x7x1024]
    F --> C3D[3D Conv 512 filters 3x3x3]
    C3D --> POOL[Global 2D MaxPool] --> X[per-frame embedding x_i 512-D]

    X --> SIM[Pairwise -L2 + row softmax] --> TSM[TSM S NxN single-channel]

    TSM --> PC[Conv 32 filters 3x3] --> TR[Transformer 4 heads]

    TR --> PL[Period Length Head 2 FC] --> L_class[Softmax CE over 2..N/2]
    TR --> PER[Periodicity Head 2 FC] --> Per_class[Binary CE]

    L_class --> Total[L_total]
    Per_class --> Total

    INF["Inference: multi-speed 1x/2x/3x/4x → pick best confidence"] -.-> X
```

## 4. Эксперименты (AQA & Motion)

⚠ **Замечание шаблона:** раздел озаглавлен «AQA & Motion», но AQA-метрик в RepNet нет вообще — он не оценивает качество движения. Все метрики — про подсчёт повторов и детекцию периодичности.

**Datasets.**

- **PERTUBE** (Panagiotakis et al., 2018) — periodicity detection benchmark, per-frame метки «является ли кадр частью повторяющегося сегмента».
- **QUVA Repetition** (Runia et al., CVPR 2018) — repetition counting benchmark, 100 видео, средняя длительность 17.6с, средний count 12.5. С реалистичными вызовами: occlusion, camera movement, изменения скорости.
- **Countix** — _новый датасет авторов_. ≈8 700 видео из Kinetics, размечены сегментами повторов и счётчиками. ~90× больше предыдущего крупнейшего (QUVA). Делится на train/val/test (4 588 / 1 450 / 2 719). Включает workout activities (squats, pull-ups, battle rope, exercising arm), что **прямо релевантно нам**.
- **Synthetic from Kinetics** — обучающий пайплайн без явных меток рук.

**Метрики (стандартные для подсчёта повторов, не для AQA):**

- **MAE (Mean Absolute Error)** — нормализованная средняя абсолютная разница между предсказанным и истинным count'ом.
- **OBO (Off-By-One error)** — доля видео, где |predicted - true| > 1.
- **F1 / Precision / Recall / Overlap** — для periodicity detection.
- **AUC PR-curve** — threshold-independent для periodicity.

**SOTA-таблицы (воспроизведены из статьи):**

PERTUBE (periodicity detection):

|Method|Recall|Precision|F1|Overlap|
|---|---|---|---|---|
|Power spectrum baseline|0.793|0.611|0.668|0.573|
|P-MUCOS [Panagiotakis et al.]|0.841|0.757|0.770|0.677|
|**RepNet**|**0.859**|**0.821**|**0.820**|**0.731**|

AUC PR-curve: 0.969.

QUVA (repetition counting):

|Method|MAE ↓|OBO ↓|
|---|---|---|
|Visual quasi-periodicity (Pogalin et al.)|0.385|0.51|
|Live Repetition Counting (Levy & Wolf)|0.482|0.55|
|Div-Grad-Curl (Runia et al., CVPR'18)|0.232|0.38|
|**RepNet**|**0.104**|**0.17**|

Countix test (новый датасет, нет SOTA для сравнения):

|Method|MAE|OBO|
|---|---|---|
|RepNet|0.3641|0.3034|

**Ablations.**

TSM ablation (главный):

|TSM|Train data|QUVA MAE / OBO|Countix val MAE / OBO|
|---|---|---|---|
|❌|Synthetic|1.2853 / 0.64|1.1671 / 0.5510|
|✅|Synthetic|**0.1035 / 0.17**|**0.3100 / 0.2903**|
|❌|Countix|0.7584 / 0.72|0.6483 / 0.5448|
|✅|Countix|0.3225 / 0.34|0.3468 / 0.2949|

Без TSM модель ломается на любом источнике данных — bottleneck критичен. Это **самый сильный архитектурный сигнал** статьи.

Period predictor architecture (Transformer vs альтернативы):

|Architecture|QUVA MAE / OBO|
|---|---|
|**Transformer**|**0.1035 / 0.17**|
|LSTM|0.1395 / 0.18|
|2D CNN|0.1186 / 0.17|
|1D Temporal CNN|0.3229 / 0.23|

Transformer лучший, но 2D CNN на TSM почти догоняет — это полезно для нашего edge-сценария (Transformer заменяемый).

Camera motion augmentation: оптимум 75% батча; без неё MAE 0.7178 на QUVA.

**Качественные результаты.** TSM визуально интерпретируема — paper показывает примеры:

- Jumping jacks → ровные диагональные полосы (uniform period)
- Hammer throw → постепенно учащающиеся диагонали (acceleration)
- Bouncing ball → постепенно расширяющиеся (deceleration)
- Mixing concrete → периодический сегмент с непериодическим обрамлением

Это **прямая интерпретируемость** — для нашего AQA-выхода критически ценно (показать пользователю, какие повторы засчитаны).

1D PCA проекция per-frame эмбеддингов даёт квази-синусоидальные паттерны; кадры в одной фазе разных периодов оказываются в одной точке проекции — то есть модель неявно учит **phase representation**.

[КОММЕНТАРИЙ РЕЦЕНЗЕНТА] Это последнее качество — фазовое представление через PCA — потенциально _самая ценная для нас находка_ статьи. Если модель неявно кодирует фазу повторения (top of squat, bottom of squat, mid concentric), то её эмбеддинги пригодны не только для подсчёта, но и для **per-phase error detection**. Это не показано авторами, но прямо открывает downstream-возможность.

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

|Параметр|Значение|
|---|---|
|Параметры (M)|НЕ УКАЗАНО явно в статье. Оценка по компонентам: ResNet-50 conv4_block3 ≈ 16M + 3D conv 512×3×3×3×512 ≈ 7M + Transformer ≈ 1M + heads ≈ 0.5M. **Итого ≈ 25M параметров.**|
|GFLOPs|НЕ УКАЗАНО|
|Latency + железо|НЕ УКАЗАНО|
|**Multi-speed inference**|**×4 стоимость на инференсе** (4 проигрывания одного видео)|
|Квантизация / дистилляция|НЕ ОБСУЖДАЕТСЯ|
|Edge / mobile deployment|НЕ ОБСУЖДАЕТСЯ|

**Вердикт: heavy** для нашего edge-таргета. ResNet-50 backbone для 64-кадрового видео + Transformer + multi-speed — это десятки GFLOPs на одно видео. На современном смартфоне это означает обработку оффлайн (после подхода), не real-time во время выполнения.

[КОММЕНТАРИЙ РЕЦЕНЗЕНТА] Это переопределяет роль RepNet в нашем pipeline. RepNet — **не deployment-кандидат**, а:

1. **Teacher для дистилляции** в более лёгкий rep counter (например, MobileNet backbone + TSM + small head).
2. **Dataset-construction tool** — прогнать через RepNet наши собранные подходы один раз, получить per-rep boundaries в виде offline labels, дальше использовать эти метки для обучения собственного лёгкого student'а.
3. **Reference baseline** для валидации, что наш собственный лёгкий rep counter не хуже SOTA на типовых случаях.

## 6. Релевантность для SmartRep (анализ по пунктам)

**One-class AQA.** ❌ **НЕ применим напрямую.** RepNet не оценивает качество — он оценивает «является ли это повторением и какова его длина?». Это две разные задачи. Однако RepNet даёт нам **per-rep boundaries**, без которых one-class AQA не имеет смысла:

- Без сегментации повторов anomaly score «весь подход на 73% похож на эталон» бесполезен — нужно «3-й повтор из 5 на 47% похож на эталон» (это actionable feedback).
- RepNet boundaries → per-rep crop → per-rep anomaly score = архитектурно совместимо.

**LUPI-потенциал.** ⚠ **Слабый.** RepNet — single-stream RGB. Никакого LUPI-механизма (teacher↔student с разной модальностью) не предусмотрено. Можно представить адаптацию: teacher RepNet (RGB-based, heavy) → student (skeleton-based, light), где student учит TSM из skeleton trajectories вместо CNN-features. Это **техническая адаптация**, не идеологическая (ничего LUPI-структурного RepNet не предлагает).

**Periodicity-awareness.** ✅✅✅ **Полный hit.** Это вся суть статьи. Для подсчёта повторов и анализа их ритма (что критично для нашего «5 повторов с равным темпом vs 5 повторов с замедлением последнего»):

- Per-frame period length output напрямую даёт ритм-сигнал;
- Acceleration/deceleration видна в TSM визуально;
- Multi-speed evaluation позволяет работать с длинными медленными движениями (становая тяга 5-7 секунд на повтор) и быстрыми (jump squat 1-2 секунды).

**Дополнительный аспект: класс-агностичность.** RepNet работает на любых периодических движениях, включая те, что не видел при обучении. Для нашего pipeline это означает: можно использовать RepNet **сразу** на штанговых упражнениях без fine-tuning, потому что bench/squat/deadlift/pull-up/row все периодические по своей природе. Это редкое для SOTA-методов свойство, прямо снимающее domain gap.

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

1. **RGB-only, нет skeleton-варианта.** RepNet строит TSM из CNN-features над RGB-кадрами. У нас pipeline скелетный (33 точки COCO/MoveNet); считать TSM на skeleton trajectories было бы значительно дешевле и устойчивее к освещению/одежде, **но никто не делал**. **Гэп: skeleton-TSM rep counter.** Заменить ResNet-50 на ST-GCN энкодер скелетных последовательностей; TSM строится поверх per-frame skeleton embeddings; period predictor тот же. Edge-выгода: ~25M → ~1M параметров; устойчивость к освещению — выше; устойчивость к одежде/коже — выше.
    
2. **Класс-агностичность как overengineering для нашего домена.** RepNet хорош тем, что обобщает на любые периодические явления. Для SmartRep с 5 фиксированными упражнениями это излишне. **Гэп: exercise-specific lightweight rep counter.** Дистилляция RepNet в очень компактный (<1M params) специализированный counter, который знает только наши 5 упражнений — выигрыш в latency и точности на нашем домене.
    
3. **Per-rep boundaries без per-rep quality.** RepNet даёт «вот границы 5 повторов», но не «вот качество каждого». Это **наша ниша**. **Гэп: extend RepNet output с per-rep anomaly score** — над уже сегментированными повторами навешивать one-class anomaly head (что-то в духе PatchCore над skeleton embeddings). RepNet даёт сегментацию бесплатно, мы добавляем содержательный sigmoid quality score per rep.
    
4. **Multi-speed inference (×4 cost) делает real-time невозможным.** Метод авторов — обработка после подхода. Для feedback во время подхода (что более ценно для пользователя) нужен single-speed inference. **Гэп: training с adaptive period range (увеличить $N/2$ до 64-128 за счёт более глубокого Transformer'а или dilated TSM)** — позволяет покрыть и быстрые и медленные движения за один проход без multi-speed.
    
5. **Нет оценки на gym camera artifacts.** Camera motion augmentation моделирует абстрактное движение камеры, но не специфические артефакты — auto-exposure shifts при смене освещения в зале, JPEG/H.264 compression артефакты от смартфона, motion blur при быстрых движениях. **Гэп: бенч RepNet (или нашего дистиллированного варианта) на корпусе реальных gym-видео с такими артефактами.**
    
6. **TSM не использует семантику фазы.** Авторы упоминают, что 1D PCA эмбеддингов даёт фазовое представление. Но это эмерджентное свойство, не оптимизированное явно. **Гэп: добавить вспомогательный phase consistency loss** — кадры в одной фазе разных повторов должны иметь близкие эмбеддинги; это улучшит downstream per-phase analysis (например, «butt-wink случается в нижней четверти концентрической фазы во 2-м, 3-м, 5-м повторах»).
    

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

**Приоритет: ВЫСОКИЙ** — но узко-функционально. Не для общего методологического базиса, а для **одной критической функции pipeline**: per-rep сегментации видео подхода. Без неё весь блок 🅰 (per-rep error detection) архитектурно не запускается; с RepNet (или его дистиллированным наследником) — запускается.

**Связанные статьи для прочтения** из шаблона:

- **VideoMAE** (Tong et al., NeurIPS 2022) — masked SSL для видео; нужно для альтернативного RGB pretraining'а, может стать backbone'ом для дистиллированного rep counter'а вместо ResNet-50.
- **TCLR** (Dave et al., CVIU 2022) — temporal contrastive (уже разобран); local-local loss активно расталкивает повторы — **архитектурно конфликтует** с RepNet'овской парадигмой «найти повторяющуюся структуру». Полезно для сравнения двух противоположных философий обработки временной структуры.
- **PatchCore** (Roth et al., CVPR 2022) — **прямо комплементарен** RepNet'у в нашем pipeline: RepNet даёт сегментацию, PatchCore даёт per-rep anomaly score. Связка [RepNet → PatchCore over skeleton embeddings] — реалистичный архитектурный путь к нашему MVP.
- **TransRAC** (Hu et al., CVPR 2023) — прямой преемник RepNet с multi-scale Transformer; стоит проверить, не лучше ли он RepNet на наших длинных подходах (бывают 60+ секунд для становой тяги). NB: согласно release-note'у самих авторов RepNet, в TransRAC сравнение было нечестным — модифицированный RepNet (FC-слой урезан до периодов ≤32) показан как baseline, оригинальный RepNet с multi-speed работает гораздо лучше.

**Не нужно читать сейчас:** Live Repetition Counting (Levy & Wolf 2015) — устаревший baseline; Visual quasi-periodicity (Pogalin et al. 2008) — pre-deep era.

**Место в SmartRep-pipeline:**

- **Этап Data Construction:** прогнать наш собранный корпус подходов через RepNet (через Colab notebook авторов или их released checkpoint), получить offline per-rep boundaries как silver-standard метки. Это бесплатное обогащение датасета.
- **Этап Pipeline Architecture:** **distill** RepNet в exercise-specific skeleton-based lightweight rep counter (≤1M params, ST-GCN backbone, single-speed inference). Это будет наш deployment-rep-counter.
- **Этап Validation:** оригинальный RepNet — reference baseline для валидации, что наш дистиллированный counter не хуже SOTA.

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

- 🅰 (error detection): **enabling preprocessing**, не сам error detection. Без него нет per-rep granularity; с ним — есть.
- 🅱 (biomech pose): **нулевой**.
- 🅲 (SSL adaptation): **нулевой** (метод supervised).

---

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

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

- Раздел 7 «Gap для нас» вытащил шесть конкретных инженерных направлений за один проход — это много. Из них skeleton-TSM rep counter — ясная публикационная ниша (никто не делал), а распределённая дистилляция в exercise-specific counter — ясный инженерный путь к нашему MVP. Шаблон молчит про дистилляцию как класс gap'ов, но требование «что метод НЕ делает» вытащило это естественно.
- Раздел 6 правильно поймал, что RepNet ≠ AQA, ≠ SSL backbone, ≠ pose, ≠ synthesis — то есть он не лезет ни в один из новых шаблонов B/C/D/dataset/synthesis. Старый общий шаблон, который ты применил, для такого случая адекватен.

Что **трещит**:

- **Шаблон default'но ставит direction "🅰 # Self-supervised motion / One-class AQA"** — это его самая крупная проблема при применении к RepNet. RepNet — supervised, не SSL. Я переопределил в TL;DR явно, но шаблонный default вводит в заблуждение. В новых B/C/D `direction` без default — это улучшение, общий старый шаблон стоит так же модифицировать.
- **Шаблонные тэги** (`pose_estimation, edge, aqa, ssl, few_shot, occlusion, one_class_anomaly, masked_modeling, contrastive, periodicity`) — для RepNet применим только `periodicity`. Из расширенного словаря, который мы строили для B/C/D, подошли бы ещё `supervised`, `cnn`, `transformer`, `video_modality`, `rep_counting`, `synthetic_pretraining`. Старый словарь явно беднее новых.
- **Раздел «Edge Feasibility» сжат до одного абзаца про сложность + одна строка про квантизацию.** В новом B/C/D — таблица из 6+ полей с качественным fallback. Старый шаблон не различает critical edge-killers (multi-speed inference в RepNet — это категориальный fail, а не «medium»).
- **Шаблон не предусматривает поле «роль в SmartRep-pipeline».** Для RepNet это критично: «не deployment, а distillation teacher и dataset construction tool» — это самый важный итог карточки. В новых шаблонах есть «Место в SmartRep-pipeline», но в старом — нет; пришлось вписывать в раздел 8 произвольно.

**Главный вывод про систему шаблонов:** RepNet вскрыл недостающую категорию. Это **task-specific utility paper** — supervised метод для одной конкретной задачи (rep counting / periodicity / segmentation), не методология. Аналогичный профиль будет у:

- Action localization / temporal segmentation методов (BMN, ActionFormer);
- Barbell / object tracker'ов для зала;
- Rep counter'ов следующего поколения (TransRAC, IVAC-P2L);
- Phase classifier'ов для медицинских видео.

Под все эти статьи имеет смысл иметь **5-й шаблон `task_utility`** с фокусом на: (i) тип задачи и точная формулировка output'а, (ii) edge feasibility как deal-breaker, (iii) роль в нашем pipeline (deployment / preprocessing / teacher / baseline), (iv) специфические метрики этой задачи (MAE, OBO для counting; mAP, IoU для localization; и т.д.). От SSL/AQA/pose/synthesis такие статьи отличаются тем, что у них **нет вопроса «что они учат»**, а есть **вопрос «как точно они решают узкую задачу и как это вписать в наш pipeline»**.

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

- (а) написать 5-й шаблон **`task_utility`** (для RepNet, TransRAC, BMN, object trackers, phase classifiers);
- (б) или продолжить применение существующих шаблонов на следующей статье. Из связанных, что у тебя в pipeline: TransRAC (прямой преемник RepNet — ляжет на новый шаблон task_utility); CMD (LUPI-cross-modal SSL — ляжет на B); или, как ранее обсуждали, FLEX (synthesis — D на реальной статье из нашей ниши).