



Отлично, переходим к MoveNet. Это не академическая статья, а технический блог Google/TensorFlow — нужно собрать конкретные числа из первоисточника и Model Card.Получил архитектурные детали. Теперь подтянy сам блог-пост целиком для конкретных таблиц latency и Model Card.Теперь подтянy Model Card для конкретных метрик качества (mAP по категориям).Нужны ещё данные: точные параметры/FLOPs Lightning и Thunder, и CPU latency на смартфонах.Подтянy блог TFLite (Aug 2021) для CPU/Android benchmarks.# Глубокий анализ: Next-Generation Pose Detection with MoveNet (Lightning + Thunder)

## 1. МЕТАДАННЫЕ

| Поле                      | Значение                                                                                                                                                                                                                                                                                                                                                                                                |
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Оригинальное название** | Next-Generation Pose Detection with MoveNet and TensorFlow.js                                                                                                                                                                                                                                                                                                                                           |
| **Перевод**               | Pose Detection нового поколения с MoveNet и TensorFlow.js                                                                                                                                                                                                                                                                                                                                               |
| **Авторы (блог-пост)**    | Ronny Votel, Na Li (Google Research)                                                                                                                                                                                                                                                                                                                                                                    |
| **Авторы (Model Card)**   | Francois Beletti, Yu-Hui Chen, Ard Oerlemans, Ronny Votel (equal contributions, Google)                                                                                                                                                                                                                                                                                                                 |
| **Аффилиация**            | Google Research                                                                                                                                                                                                                                                                                                                                                                                         |
| **Год / Дата**            | 17 мая 2021 (Google I/O 2021); обновление с TFLite — 16 августа 2021                                                                                                                                                                                                                                                                                                                                    |
| **Venue**                 | **TensorFlow Blog** (не peer-reviewed). Анонсировано на Google I/O 2021.                                                                                                                                                                                                                                                                                                                                |
| **Venue tier**            | **Industry blog / pre-print–level публикация** (нет academic paper, нет рецензирования; есть Model Card)                                                                                                                                                                                                                                                                                                |
| **DOI / arXiv**           | **Отсутствует.** Источники: [TF Blog May 2021](https://blog.tensorflow.org/2021/05/next-generation-pose-detection-with-movenet-and-tensorflowjs.html), [TF Blog Aug 2021](https://blog.tensorflow.org/2021/08/pose-estimation-and-classification-on-edge-devices-with-MoveNet-and-TensorFlow-Lite.html), [Model Card PDF](https://storage.googleapis.com/movenet/MoveNet.SinglePose%20Model%20Card.pdf) |
| **Код / веса**            | TF Hub: [Lightning](https://tfhub.dev/google/movenet/singlepose/lightning/4), [Thunder](https://tfhub.dev/google/movenet/singlepose/thunder/4); TFLite (FP16, INT8); JS API ([tfjs-models/pose-detection](https://github.com/tensorflow/tfjs-models/tree/master/pose-detection)). Лицензия: Apache 2.0. **Тренировочный код и Active dataset — закрыты.**                                               |
| **Цитирований**           | НЕ ПРИМЕНИМО (блог-пост); счётчики цитирования не собираются. По косвенной популярности — десятки тысяч использований через TFLite/TF.js.                                                                                                                                                                                                                                                               |

**[МОЙ КОММЕНТАРИЙ]** **Это не научная публикация в строгом смысле** — нет ни препринта, ни workshop-paper, ни конференционной публикации. Технические детали разбросаны по двум блог-постам и Model Card. Для академического литобзора это означает специфичный статус: это «индустриальный артефакт» с несколькими первоисточниками, который надо цитировать совокупно. Тем не менее, MoveNet — обязательный baseline для нашей задачи: он обучен **на фитнес-данных** и имеет публичные mAP-замеры именно на фитнес-сетке (Active).

---

## 2. КЛЮЧЕВАЯ ИДЕЯ (Core Contribution)

MoveNet решает ту же задачу, что и BlazePose, — single-person 2D pose estimation на edge-устройствах в реальном времени, — но другим архитектурным путём. Авторы предлагают: (1) **bottom-up CenterNet-derived архитектуру** с MobileNetV2 + FPN feature extractor и 4 prediction heads; (2) две вариации модели — Lightning (192×192, depth_mult 1.0) для latency-критичных и Thunder (256×256, depth_mult 1.75) для качества; (3) **обучение на специальном фитнес-датасете Active** (23.5k single-person кадров с YouTube yoga/fitness/dance видео в дополнение к COCO); (4) умный crop по предыдущему кадру для амортизации детекции и нелинейный temporal filter для сглаживания keypoints. Главная гипотеза: «фокус был на инженерии скорости и развёртываемости, а не на максимизации accuracy» — то есть тот же compute-budget при правильной архитектуре + training data может давать продакшен-готовое решение для фитнес-домена.

**[МОЙ КОММЕНТАРИЙ]** Принципиальная новизна слабая (CenterNet — 2019, MobileNetV2 — 2018, FPN — 2017), но **методическая и инжинерная новизна высокая**: фитнес-обучение, INT8-квантизация, GPU/NNAPI бэкэнды, Model Card с fairness, smart cropping. Для SmartRep это сразу несколько отличий от BlazePose, которые стоит учесть.

---

## 3. АРХИТЕКТУРА И МЕТОД

### 3.1. Тип подхода

|Аспект|Классификация|
|---|---|
|**Размерность**|2D (x, y + confidence score)|
|**Стратегия**|Технически **bottom-up** (CenterNet-style) с single-person scope; smart cropping для амортизации|
|**Регрессия**|**Hybrid heatmap + offset + center-out regression** (4 головы)|
|**Темпоральность**|Per-frame инференс + crop propagation + non-linear temporal filter поверх keypoints|
|**Backbone**|MobileNetV2 image feature extractor with Feature Pyramid Network decoder (to stride of 4) followed by CenterNet prediction heads. Lightning — depth_multiplier 1.0; Thunder — depth_multiplier 1.75.|

**[МОЙ КОММЕНТАРИЙ]** Терминологическое уточнение: формально архитектура bottom-up (CenterNet — это keypoint-based detector), но в продакшене модель используется как single-pose с фокусом на ближайшего к центру кадра человека. Для нашего сценария «один атлет в зале» это идеально подходит. Multi-pose вариант (MULTIPOSE_LIGHTNING) появился позже.

### 3.2. Описание архитектуры

**Pipeline (для одного кадра):**

```
Input frame (RGB)
     │
     ▼
Smart crop using previous frame's keypoints → crop ROI
     │
     ▼
Resize to 192×192 (Lightning) / 256×256 (Thunder)
     │
     ▼
┌─────────────────────────────────────────┐
│ MobileNetV2 (depth_mult 1.0/1.75)       │
│ → multi-scale features                  │
└─────────────────────────────────────────┘
     │
     ▼
┌─────────────────────────────────────────┐
│ FPN decoder (output stride = 4)         │
│ → high-res semantic feature map         │
└─────────────────────────────────────────┘
     │
     ├──▶ Head 1: Person center heatmap (1 ch)
     ├──▶ Head 2: Keypoint regression field (34 ch = 17×2)
     ├──▶ Head 3: Person keypoint heatmap (17 ch)
     └──▶ Head 4: 2D per-keypoint offset field (34 ch = 17×2)
                          │
                          ▼
              Custom 4-step post-processing
                          │
                          ▼
        Output: [1, 1, 17, 3] — (y, x, score) per keypoint
                          │
                          ▼
                Non-linear temporal filter
                (jitter suppression + outlier rejection)
                          │
                          ▼
                Smoothed keypoints
```

**4-step post-processing** (детально из блога Google Research):

|Шаг|Операция|Назначение|
|---|---|---|
|**1**|Найти максимум в person center heatmap, взвешенный обратно расстоянию от центра кадра|Identify centers of all individuals; the highest-scoring location is selected — выбираем «нашего» человека|
|**2**|По выбранному центру взять initial keypoints из regression field (center-out)|Initial set of keypoints is produced by slicing the keypoint regression output from the pixel corresponding to the object center — грубая оценка, но привязанная к нужному человеку|
|**3**|Каждый pixel в keypoint heatmap умножается на вес, обратный расстоянию до regressed keypoint|This ensures that we do not accept keypoints from background people — фильтр против фоновых людей|
|**4**|Взять argmax по weighted heatmap, добавить 2D offset для sub-pixel precision|Финальная точная координата каждого keypoint|

### Ключевые выходные размерности

Inputs: int32 tensor 192x192x3 (Lightning) / 256x256x3 (Thunder), RGB [0, 255]. Outputs: float32 [1, 1, 17, 3] — нормированные (y, x) в [0, 1] + confidence.

### Размер модели и compute (по официальным источникам)

|Вариант|Input|Backbone depth|Файл (TFLite)|mAP COCO single-person|mAP Active|
|---|---|---|---|---|---|
|**Lightning FP16**|192×192|MobileNetV2 ×1.0|4.8 MB|63.0|~90 (Male) / 87.8 (Female)|
|**Lightning INT8**|192×192|MobileNetV2 ×1.0|2.9 MB|57.4|НЕ УКАЗАНО отдельно|
|**Thunder FP16**|256×256|MobileNetV2 ×1.75|12.6 MB|72.0|~93.7 (Male) / 92.3 (Female)|
|**Thunder INT8**|256×256|MobileNetV2 ×1.75|7.1 MB|68.9|НЕ УКАЗАНО отдельно|

**FLOPs / число параметров явно НЕ опубликованы Google.** Косвенно из размеров файлов:

- Lightning ≈ 2.4M params (FP16 ~4.8 MB / 2 байта)
- Thunder ≈ 6.3M params (FP16 ~12.6 MB / 2 байта)

**[МОЙ КОММЕНТАРИЙ]** Отсутствие явных FLOPs/params в официальных материалах — серьёзный методологический пробел. Нам придётся профилировать модели самостоятельно через `tf.compat.v1.profiler` или TF Lite benchmark tool.

### 3.3. Визуальные материалы из источников

|#|Источник|Содержание|Что даёт|
|---|---|---|---|
|Fig.A (TF Blog May 2021)|"MoveNet architecture" diagram|MobileNetV2 + FPN + 4 prediction heads|Подтверждает CenterNet-derived structure; визуально видно, что 4 головы параллельны|
|Fig.B (TF Blog May 2021)|"MoveNet post-processing steps" — 4 stages|Иллюстрирует 4-шаговый pipeline center-heatmap → regression → weighted-heatmap → offset refinement|Показывает, что center-out regression используется как guidance, а не как финальное предсказание|
|Fig.C (TF Blog May 2021)|Comparison GIF: traditional detector vs MoveNet on difficult poses|Демонстрирует превосходство на seated/supine позах|Качественная демонстрация на фитнес-нестандартных позах|
|Fig.D (Model Card)|Active dataset examples|Yoga/fitness images с keypoint аннотациями|Даёт представление о сложности обучающих данных|
|Tbl.A (TF Blog May 2021)|TF.js latency на 4 устройствах (FPS)|Lightning vs Thunder на MacBook/iPhone 12/Pixel 5/Desktop|Сравнительный benchmark по hardware|
|Tbl.B (TF Blog Aug 2021)|TFLite latency Pixel 5 / Pi 4 (ms) + mAP|Полная edge-таблица|Главная таблица для нашей оценки|
|Tbl.C (Model Card)|Speed benchmark на десктопных GPU|Inference time ms на 5 систем|Дополнительные данные|
|Tbl.D (Model Card)|mAP по gender/age/skin tone на COCO и Active|Fairness analysis|Both models perform fairly (< 5% performance differences between categories) on our targeted Active Single Person Image Set|

**[МОЙ КОММЕНТАРИЙ]** Визуальная архитектурная диаграмма в блоге Google — высокого качества и информативна. Однако формальной spec-картинки с точными размерностями тензоров нет; это типичная «product blog» подача.

### 3.4. Математическая формализация

В блог-посте формулы **НЕ ПРИВЕДЕНЫ ЯВНО**. Реконструкция по тексту и аналогии с CenterNet (Zhou et al., 2019).

**Person center heatmap** (нагружено в центр объекта): $$Y_{center}(x, y) = \exp\left(-\frac{(x - c_x)^2 + (y - c_y)^2}{2\sigma_p^2}\right)$$

где $(c_x, c_y) = \frac{1}{17}\sum_k \mathbf{p}_k$ — арифметическое среднее всех keypoints персоны.

**Keypoint regression field** (center-out): для каждого центра предсказывает relative смещение к каждому keypoint: $$R_k(c) = \mathbf{p}_k - \mathbf{c}, \quad k = 1, \dots, 17$$

**Person keypoint heatmap** (стандартная Gaussian heatmap для каждого keypoint k): $$H_k(x, y) = \exp\left(-\frac{(x - x_k)^2 + (y - y_k)^2}{2\sigma_k^2}\right)$$

**2D per-keypoint offset field** (sub-pixel refinement): $$O_k(x, y) = (\text{floor}(x_k) - x, ; \text{floor}(y_k) - y) \quad \text{для } (x, y) \in \mathcal{N}(x_k, y_k)$$

**Inference (4-step decoding):**

1. $\hat{\mathbf{c}} = \arg\max_{\mathbf{c}} \big( Y_{center}(\mathbf{c}) \cdot w_{frame}(\mathbf{c}) \big)$, где $w_{frame}$ — обратный к расстоянию от центра кадра.
2. $\tilde{\mathbf{p}}_k = \hat{\mathbf{c}} + R_k(\hat{\mathbf{c}})$ — initial regression.
3. $\hat{H}_k(x, y) = H_k(x, y) \cdot \frac{1}{1 + |(x, y) - \tilde{\mathbf{p}}_k|}$ — взвешенная heatmap.
4. $\hat{\mathbf{p}}_k = \arg\max(\hat{H}_k) + O_k(\arg\max(\hat{H}_k))$ — финальная subpixel-точная координата.

**Loss (реконструкция, не дано в блоге):** typical CenterNet-style — focal loss для центров и keypoint heatmaps + L1 loss для regression и offset: $$\mathcal{L} = \mathcal{L}_{focal}^{center} + \alpha \mathcal{L}_{focal}^{kpt} + \beta \mathcal{L}_{1}^{reg} + \gamma \mathcal{L}_{1}^{offset}$$

**[МОЙ КОММЕНТАРИЙ]** Без академического paper точные формулы лоссов и весов задач **НЕ ОПУБЛИКОВАНЫ**. Любая попытка repro потребует либо чтения исходников TF Object Detection API, либо обратной инженерии TFLite-модели. Это блокер для научного сравнения.

### 3.5. Ключевые технические решения

|Категория|Приём|Эффект|
|---|---|---|
|**Архитектурный**|Bottleneck layers from MobileNetV2 selected for lateral connections in the FPN|Ускорение FPN за счёт thin-связей|
|**Архитектурный**|Number of convolution filters in each prediction head slimmed down significantly|Сокращение compute на головах|
|**Архитектурный**|Depthwise separable convolutions are used throughout the network, except in the first MobileNetV2 layer|Стандартный mobile-приём|
|**Inference opt**|Replaced tf.math.top_k with tf.math.argmax, since it executes significantly faster and is adequate for the single-person setting|Прямая замена медленной операции|
|**Inference opt**|All model outputs were packed into a single output tensor, so that there is only one download from GPU to CPU|Critical для browser/GPU overhead|
|**Inference opt**|Use of 192x192 inputs to the model (256x256 for Thunder) + **smart cropping**|Главный speedup; crop из предыдущего кадра компенсирует низкое разрешение|
|**Quantization**|FP16 and INT8 quantized formats|INT8 даёт ~40% speedup на Pi 4, но снижает mAP на 5-7 пунктов|
|**Temporal**|Robust, non-linear filter to the incoming stream of keypoint predictions; suppresses high-frequency noise and outliers, while maintaining high-bandwidth throughput during quick motions|Сглаживание keypoints (вероятно, **OneEuroFilter** или вариация)|
|**Backend**|Implementing a packed WebGL kernel for the depthwise separable convolutions|Низкоуровневая оптимизация для TF.js|
|**Augmentation**|Trained on images with various lighting, noise, motion conditions and with diverse augmentations|Конкретные приёмы НЕ ПЕРЕЧИСЛЕНЫ|

**[МОЙ КОММЕНТАРИЙ]** Отдельно отмечу: **non-linear temporal filter** — точная формула не опубликована, но судя по описанию ("suppresses high-frequency noise + maintains high-bandwidth during quick motions") это OneEuroFilter (Casiez et al. 2012) или его аналог. Это легко переиспользовать для SmartRep.

---

## 4. ЭКСПЕРИМЕНТАЛЬНАЯ ЧАСТЬ

### 4.1. Датасеты

|Датасет|Размер|Тип|Разрешение|Домен|Public?|
|---|---|---|---|---|---|
|**COCO Train2017 (single-person filter)**|28k images (filtered from 64k by removing images with ≥3 people)|2D, 17 keypoints|разное|General in-the-wild|✅ Yes|
|**Active (Google internal) Train**|23.5k single-person frames sampled from YouTube fitness/yoga/dance videos; ≤3 frames per video for diversity|2D, 17 COCO keypoints|разное|**Fitness / yoga / dance**|❌ **NO**|
|**COCO Val2017 single-person**|919 images (filtered from 5k by single-person criterion)|2D|—|General|✅ Yes|
|**Active Eval set**|1161 single-person fitness/yoga/dance images|2D|—|**Fitness**|❌ **NO**|

**[МОЙ КОММЕНТАРИЙ]** Комбинация COCO + Active — стандартный "general + domain-specific" подход. **Active dataset закрыт** — это снова блокер для воспроизводимости и для обучения собственной модели по их рецепту. Однако сам факт целенаправленного обучения на фитнес-кадрах (yoga, weight-lifting, HIIT по Model Card) — **прямой сигнал, что MoveNet более релевантен для нашей задачи, чем стандартные COCO-trained модели**. Размер 23.5k — небольшой, мы могли бы собрать сравнимый объём для SmartRep.

### 4.2. Метрики

|Категория|Используется?|Детали|
|---|---|---|
|**PCK@0.05/0.2**|❌|—|
|**OKS-mAP**|✅|Keypoint mean average precision (mAP) with Object Keypoint Similarity (OKS) — стандартная COCO-метрика|
|**MPJPE**|❌|— (метод 2D)|
|**NME**|❌|—|
|**MAE / RMSE по углам суставов**|❌ **(Critical gap для SmartRep)**|—|
|**MPJVE / MPJAE (temporal jitter)**|❌|—|
|**Inference Time**|✅|Time spent to run the model inference for a single image measured in milliseconds|
|**Model size (MB)**|✅|TFLite файл размером|
|**FLOPs / params**|❌|НЕ ОПУБЛИКОВАНЫ|
|**Energy / power**|❌|Декларативно «less battery consumed» для INT8, без замеров|
|**Cross-dataset generalization**|⚠️ Частично|COCO + Active — два разных домена, но оба single-person filtered|
|**Occlusion accuracy**|❌|Model predicts 17 human keypoints of the full body even when they are occluded; for keypoints outside of the image frame, the model will emit low confidence scores — но quantitative replays нет|
|**Fairness (gender/age/skin tone)**|✅|Both models perform fairly (< 5% performance differences between categories) on our targeted Active Single Person Image Set|

**Критически:** ✅ **есть валидация на фитнес-датасете** (Active eval, 1161 image), что отличает MoveNet от подавляющего большинства pose estimators. ❌ **угловых метрик НЕТ** — это наш главный gap для SmartRep.

### 4.3. Сравнительная таблица результатов (TFLite Aug 2021 — главная таблица)

|Модель|Size (MB)|mAP* (COCO single)|Pixel 5 CPU 4 threads (ms)|Pixel 5 GPU (ms)|Raspberry Pi 4 CPU 4 threads (ms)|
|---|:-:|:-:|:-:|:-:|:-:|
|**MoveNet.Thunder FP16**|12.6|**72.0**|155|**45**|594|
|MoveNet.Thunder INT8|7.1|68.9|100|52|251|
|MoveNet.Lightning FP16|4.8|63.0|60|25|186|
|**MoveNet.Lightning INT8**|**2.9**|57.4|**52**|28|**95**|
|PoseNet (MobileNetV1, FP32)|13.3|45.6|80|40|338|

**Жирным:** наилучшие значения в столбце.

**Интерпретация для нашего hardware-бюджета (Snapdragon 8 Gen 2 / Apple A16+):**

- Pixel 5 = **Snapdragon 765G** (2020 г.)
- Snapdragon 8 Gen 2 (2022 г.) ≈ **3-4× быстрее** на CPU и GPU
- Грубая экстраполяция:
    - **Lightning INT8 на Snapdragon 8 Gen 2 CPU**: 52 / 3.5 ≈ **15 ms** → не укладывается в наш <10 ms бюджет, но близко
    - **Lightning INT8 на Snapdragon 8 Gen 2 GPU**: 28 / 3.5 ≈ **8 ms** → укладывается
    - **Thunder INT8 на Snapdragon 8 Gen 2 GPU**: 52 / 3.5 ≈ **15 ms** → не укладывается, но возможно с дальнейшей оптимизацией

**mAP по fairness категориям (Model Card):**

|Категория|Lightning mAP|Thunder mAP|Среда|
|---|:-:|:-:|---|
|Active overall (Male/Female)|90.2 / 87.8|93.7 / 92.3|Active (фитнес)|
|Active by Age (Young/Mid/Old)|89.1 / 89.3 / 85.7|93.3 / 91.5 / 90.0|Active|
|Active by Skin Tone (Dark/Med/Light)|89.1 / 92.2 / 92.9|93.1 / 93.3 / 95.4|Active|
|COCO val by Gender (M/F)|67.4 / 65.4|78.7 / 76.6|COCO|

**[МОЙ КОММЕНТАРИЙ — критически важно]** Перепад mAP между COCO (~63-72) и Active (~90-93) **колоссальный** (+25-30 пунктов). Это означает:

- Модель **очень хорошо адаптирована к фитнес-домену** (Active = тестовая часть фитнес-датасета)
- mAP@OKS на COCO низкий, потому что COCO содержит сложные multi-person сцены и occlusions
- **Для нашего сценария (one fitness athlete, controlled scene) реальная точность будет ближе к Active числам**

**Нечестные сравнения:**

- mAP измерены на **single-person filtered subsets** обоих датасетов — это не стандартный COCO leaderboard. Прямого сравнения с HRNet/RTMPose/ViTPose в их цифрах **нет**.
- PoseNet — старая baseline 2018 года; сравнение тривиально в пользу MoveNet.
- **С BlazePose сравнения нет вообще.**

### 4.4. Ablation Study

**Ablation studies в блог-постах НЕ ПРЕДСТАВЛЕНЫ.** Косвенно из текста:

|Аспект|Эффект (декларативный)|
|---|---|
|Active dataset vs COCO-only|«Evaluations on the Active validation dataset show a significant performance boost relative to identical architectures trained using only COCO» — но конкретные числа не приведены|
|INT8 vs FP16 quantization|По таблице: ~5-6 пунктов mAP теряется при INT8; ~10-50% ускорение|
|Lightning (192) vs Thunder (256)|Различие ~9-10 пунктов mAP COCO; ~3× разница в latency|
|Smart cropping|Декларативно «critical» для качества; численно не аблируется|

**[МОЙ КОММЕНТАРИЙ]** Полное отсутствие ablation studies — типичный недостаток индустриальных блог-постов. Невозможно понять, например, какой именно вклад даёт Active dataset, какой — temporal filter, какой — 4-step post-processing. Для научной работы это серьёзный пробел.

---

## 5. RESULTS & DISCUSSION

### 5.1. Основные выводы

1. **MoveNet радикально превосходит PoseNet** (предыдущую TFLite модель Google): +18 пунктов mAP при сравнимом размере и быстрее.
2. **Active dataset training даёт огромный прирост** (~25-30 пунктов mAP) на фитнес-валидации.
3. **На фитнес-домене обе версии работают на 87-95% mAP** (Active eval) — это выдающийся результат для edge-модели.
4. **Pixel 5 GPU latency 25-45 ms** для всех вариантов — означает работу >20 fps end-to-end на Android-смартфонах 2020 года.
5. **INT8 квантизация работоспособна и сохраняет приемлемое качество** на Active.

### 5.2. Качественный анализ

- В блог-посте присутствует comparison GIF: «traditional detector vs MoveNet on difficult poses» — показывает превосходство MoveNet на seated knee extensions, supine positions
- IncludeHealth case study: «MoveNet model has infused a powerful combination of speed and accuracy needed to deliver prescriptive care» — реальное приложение в digital health
- **Failure cases систематически НЕ ОБСУЖДАЮТСЯ.** В Model Card есть только декларативные out-of-scope сценарии (multi-person, surveillance)
- «Most suitable for detecting the pose of a single person who is 3ft ~ 6ft away from a device's webcam» — декларация рабочей дистанции, без graceful degradation за её пределами

### 5.3. Edge-готовность (специально для SmartRep)

|Параметр|Значение в источниках|Соответствие SmartRep|
|---|---|---|
|Hardware (test platform)|Pixel 5 (CPU/GPU/NNAPI), Raspberry Pi 4; десктопные GPU|⚠️ Нет тестов на Snapdragon 8 Gen 2 / Apple A16, но Pixel 5 ≈ baseline для экстраполяции|
|Latency per frame (CPU 4 threads)|Lightning INT8: **52 ms** (Pixel 5) → ~15 ms (Snapdragon 8 Gen 2 estimate)|⚠️ **Не укладывается в <10 ms на CPU**, нужен GPU/NPU|
|Latency per frame (GPU)|Lightning INT8: 28 ms (Pixel 5) → ~8 ms (Snapdragon 8 Gen 2 estimate)|✅ Укладывается с GPU|
|FPS|>20 fps на Pixel 5 GPU; >50 fps на десктопе|✅ Соответствует ≥30 fps|
|Model size|2.9 MB (Lightning INT8) — 12.6 MB (Thunder FP16)|✅ Все варианты <30 MB|
|FLOPs|НЕ ОПУБЛИКОВАНЫ|❌ Придётся профилировать самим|
|Quantization support|FP16 + INT8 готовые TFLite модели|✅ Полная поддержка|
|Mobile/embedded benchmarks|Pixel 5, Pi 4 (Android NN API, GPU delegate, CPU XNNPACK)|✅ Хорошее покрытие; iOS не отдельно тестировался|

**Вывод:** Для SmartRep MoveNet **с GPU/NNAPI delegate** — реалистичный вариант. На pure CPU бюджет <10 ms тяжело без NPU.

---

## 6. ПРЕИМУЩЕСТВА ПОДХОДА

**Архитектурные:**

- Bottom-up (CenterNet) — естественно расширяется до multi-person без перерисовки pipeline
- 4-голова pipeline даёт robust оценку с background-people rejection «из коробки»
- FPN с output stride 4 → высокое spatial разрешение feature map при низкой compute стоимости
- Smart cropping — амортизация attention по времени (аналог BlazePose, но без зависимости от лица)

**В обучении:**

- **Целенаправленное фитнес-обучение** через Active dataset — главное преимущество vs всех COCO-only моделей
- COCO фильтруется до single-person, что согласовано с задачей

**Практические:**

- ✅ Готовые **TFLite FP16 + INT8** варианты — нет необходимости собственной квантизации
- ✅ TF.js версия для веб-приложений
- ✅ Model Card с **fairness analysis** (gender/age/skin tone) — редкая прозрачность
- ✅ Поддержка **GPU + NNAPI + Coral TPU** delegates
- ✅ Sample-приложения для Android/iOS/Raspberry Pi
- ✅ **Apache 2.0** — коммерческая лицензия
- ✅ Active integration в продакшн (IncludeHealth, цитируется как success case)
- ✅ Non-linear temporal filter из коробки

**По метрикам:**

- mAP 90-95% на Active (фитнес) — лучшее, что декларируется среди публичных edge-моделей
- Outperforms PoseNet на 18 пунктов mAP при меньшем размере

---

## 7. НЕДОСТАТКИ И ОГРАНИЧЕНИЯ

**Архитектурные / методологические:**

1. **Только 17 keypoints (COCO topology)** — нет кистей и стоп. Для squat/deadlift отсутствие heel/toe — серьёзный пробел; ankle есть, но угол стопы не считается.
2. **Только 2D**, без 3D lifting. Углы можно вычислять только в плоскости изображения.
3. «Most suitable for detecting the pose of a single person who is 3ft ~ 6ft away» — оптимальная дистанция 1-2 м, что точно соответствует фитнес-сценарию, но за её пределами деградирует.
4. **Single-person bias** — в multi-person сцене (тренер + ученик) hardcoded background-people rejection.
5. «For the keypoints which are outside of the image frame, the model will emit low confidence scores» — то есть truncated keypoints не предсказываются adequately.

**Экспериментальные пробелы:** 6. **Нет ablation studies** ни в блогах, ни в Model Card 7. **Нет угловых метрик** — критический gap для SmartRep 8. **Нет MPJVE / temporal jitter quantification** — есть filter, но его эффективность не измеряется 9. **Нет сравнения с BlazePose, MediaPipe Pose, RTMPose-Lite, EfficientPose** 10. **Active dataset закрыт** — невозможна репликация результатов или fine-tuning по их рецепту 11. **FLOPs и параметры не опубликованы** — нет точной characterisation compute-cost 12. **Нет occlusion-specific анализа** на стандартных бенчмарках типа CrowdPose

**Что авторы не обсудили:** 13. Поведение со снарядами в кадре (грифы, гантели) 14. Энергопотребление на длинных тренировочных сессиях 15. Performance деградация при низком освещении / motion blur (декларативно «robust», но без чисел) 16. Quality на детях (<14) 17. Длина тренировочных видео в Active — могут быть короткими клипами без полного диапазона движения

**Проблемы при переносе в фитнес-домен:** 18. mAP@OKS — координатная метрика; для углов локтя/колена даже OKS=0.9 может означать угловую ошибку 5-10° 19. «No more than three frames are selected from each video» — это исключает temporal continuity в обучении (хотя решение правильное для diversity) 20. **17 keypoints без foot keypoints** — для оценки техники приседаний (где нужно следить за положением колен относительно носков) это серьёзное ограничение

---

## 8. РЕЛЕВАНТНОСТЬ ДЛЯ SMARTREP

|Аспект|Оценка|Комментарий|
|---|:-:|---|
|Edge-готовность (<10 мс, <30 МБ)|**4**|Lightning INT8 на GPU экстраполируется к 8-10 ms на Snapdragon 8 Gen 2; на pure CPU не дотягивает. Размер OK.|
|Точность по угловым метрикам|**2**|Не валидируется по углам; mAP@OKS 90-95% на Active — косвенно хорошо, но прямых угловых замеров нет|
|Устойчивость к самоокклюзии|**3**|Active dataset включает yoga/fitness с self-occlusion; visibility flag (confidence) есть; декларируется robust, но без чисел|
|Работа с нестандартными позами|**4**|Active содержит yoga/inversions/seated; comparison-GIF демонстрирует превосходство над traditional detectors на сложных позах|
|Темпоральная стабильность|**4**|Non-linear temporal filter из коробки + smart cropping — лучше, чем у BlazePose|
|Применимость к циклическим движениям|**2**|Нет periodicity priors; временной фильтр чисто denoising, не использует периодичность|
|Валидация на фитнес-датасетах|**4**|Active — 1161 fitness-image eval set; **редкость для edge-моделей**; но датасет закрыт|
|Робастность к truncation|**2**|Декларативно low confidence для outside-frame keypoints; нет explicit truncation handling|
|Возможность fine-tuning|**3**|Архитектура воспроизводима через TF Object Detection API; tf-lite для inference; **обучающий код и Active не опубликованы**, fine-tuning потребует собственный датасет|
|Доступность кода и весов|**5**|TF Hub + TFLite (FP16/INT8) + TF.js; Apache 2.0; sample apps; готовые delegates|

**Итоговая релевантность для SmartRep: 5/5** (как baseline; обязательно сравниваться).

### Конкретные элементы для заимствования

|Элемент|Что переносить|Модификации|Риски|
|---|---|---|---|
|**Active-style фитнес-датасет**|Идея curated YouTube fitness collection с keypoint аннотациями|Расширить на силовые упражнения (squat, deadlift, bench press, OHP), добавить foot keypoints|Требует разметки; легально-юридические вопросы с YouTube|
|**MobileNetV2 + FPN backbone**|Стандартная edge-комбинация|Можно усилить до MobileNetV3 / EfficientNet-Lite|Нужно проверить наличие FPN-FPN операций в TFLite GPU delegate|
|**CenterNet-style 4-head decoder**|Конструкция center+regression+heatmap+offset|Возможно избыточно для single-person; для нашего сценария можно упростить до 2 голов (heatmap+offset)|Без center-head теряется robust background-rejection|
|**Smart cropping**|Crop ROI по предыдущему кадру для амортизации детекции|Адаптировать под нестандартные позы (горизонтальные, инвертированные)|Crop-bbox при rapid pose changes может потерять трекинг|
|**Non-linear temporal filter**|OneEuroFilter-style сглаживание|Применить независимо для каждого keypoint|Добавляет ~1 frame lag|
|**INT8 quantization recipe**|Готовая TFLite-pipeline с FP16/INT8|Применить наш собственный backbone|Calibration dataset нужен|
|**Active mAP fairness analysis**|Шаблон для нашей оценки по полу/возрасту/типу телосложения|Расширить на категории «новичок/опытный», «худой/мускулистый/полный»|Этические соображения при сборе атрибутов|

### Привязка к направлениям новизны (🅰/🅱/🅲)

- **🅰 (fitness fine-tuning + edge):** **прямо подтверждает** ценность direction. Active dataset → +25-30 пунктов mAP — это _количественное доказательство_, что fitness-specific обучение работает. **НО**: gap остаётся, потому что Active закрыт, угловых метрик нет, и не сравнивается с конкурентами.
- **🅱 (temporal-aware для циклических):** **частично закрывает** — есть temporal filter, но это denoising, а не использование periodicity priors. Прямой gap.
- **🅲 (биомеханическая регуляризация):** **полностью пропущено** — никаких anatomical constraints на углы суставов. Чистый gap.

---

## 9. СВЯЗЬ С ДРУГИМИ РАБОТАМИ

**Прямо продолжает:**

- **CenterNet** (Zhou et al., 2019, arXiv:1904.07850) — архитектурная база
- **PoseNet** (Papandreou et al., 2018) — предыдущая Google-модель, MoveNet её прямой replacement
- **MobileNetV2** (Sandler et al., 2018) — backbone

**Архитектурно использует:**

- **FPN** (Lin et al., 2017)
- **TF Object Detection API**

**Конкуренты на той же edge-нише:**

- **BlazePose** (Bazarevsky et al., 2020) — параллельный продукт Google (через MediaPipe), но другая архитектурная линия (regression+heatmap supervision, 33 keypoints, top-down detector-tracker). Прямого сравнения в статьях нет.
- **Lite-HRNet** (Yu et al., 2021) — миниатюризация HRNet
- **EfficientPose** (Groos et al., 2021) — NAS-derived
- **MovePose** — более новая академическая работа

**Сравнивается (в блогах)** только с PoseNet, и то только на новом single-person filtered COCO subset — не canonical comparison.

**Связь с фитнес-работами:**

- IncludeHealth case study — не академическая работа, но реальный продукт
- В сравнительной работе [Iieta 2022](https://www.iieta.org/download/file/fid/70744) (Comparative Analysis of OpenPose, PoseNet, MoveNet) MoveNet Lightning показал 86.2% accuracy, MoveNet Thunder — 97.6% — но это на 1000 одиночных image из COCO/MPII, не на фитнес

---

## 10. КРИТИЧЕСКАЯ ОЦЕНКА (Peer-Review)

|Критерий|Оценка|Комментарий|
|---|:-:|---|
|Новизна|**5/10**|Архитектурно — комбинация известных компонент (CenterNet+MobileNetV2+FPN); главная новизна — фитнес-обучение и инжинерные оптимизации|
|Техническая глубина|**5/10**|Описание архитектуры понятное, но без формальных лоссов и без ablations|
|Экспериментальная строгость|**3/10**|Нет ablations, нет сравнений с релевантными edge-конкурентами (BlazePose, Lite-HRNet), Active закрыт|
|Ясность изложения|**8/10**|Блог-стиль очень ясный, отличные диаграммы, примеры кода|
|Воспроизводимость|**5/10**|Inference воспроизводим (готовые модели, sample apps); training pipeline и Active dataset — нет|
|Значимость для community|**9/10**|Огромное практическое влияние; стандартный edge baseline; миллионы downloads с TF Hub|
|Релевантность edge-deployment|**10/10**|Прямой edge-продукт с GPU/NNAPI поддержкой|

**Общая оценка:** **Borderline / Weak Accept** для академического стандарта; **Accept** как индустриальный артефакт.

**[МОЙ КОММЕНТАРИЙ]** **Если бы это был paper, его бы reject с любой top-tier конференции** из-за отсутствия ablations, формальной мат. формализации и сравнений. Но как **продукт** MoveNet задаёт планку для edge pose estimation. Для нашего литобзора нужно цитировать честно: «MoveNet (Votel & Li, TF Blog 2021) — индустриальная модель с публично декларируемыми mAP без рецензирования».

---

## 11. КЛЮЧЕВЫЕ ВЫВОДЫ

1. **Главный вклад:** edge-оптимизированная CenterNet-derived 17-keypoint модель с двумя capacity вариантами (Lightning/Thunder), специально fine-tuned на фитнес-данных (Active dataset), достигающая 87-95% mAP на фитнес-валидации при размере 2.9-12.6 MB.
    
2. **Самое сильное техническое решение:** **обучение на curated Active dataset** + **bottom-up CenterNet с center-aware post-processing для background-people rejection** — даёт robust single-person detection в multi-person сцене.
    
3. **Главный недостаток:** отсутствие peer-reviewed paper, ablations, формальной математики, и сравнения с BlazePose/Lite-HRNet/RTMPose; Active dataset закрыт.
    
4. **Самый полезный элемент для SmartRep:**
    
    - **Концепция curated fitness training set** (Active) → собрать собственный аналог из YouTube силовых тренировок, **с обязательным расширением на foot keypoints** (компонент: **dataset + training pipeline**)
    - **Готовые TFLite INT8 модели** → прямой baseline для latency-сравнений (компонент: **baseline**)
    - **Non-linear temporal filter** → переиспользовать для нашего video pipeline (компонент: **temporal module / smoothing**)
    - **Smart cropping** → стандартный паттерн для нашей video-pipeline (компонент: **temporal / detection module**)
    - **Model Card с fairness analysis** → шаблон для нашей собственной оценки (компонент: **evaluation methodology**)
5. **Изучить дополнительно:**
    
    - Источник кода MoveNet в TF Object Detection API ([github.com/tensorflow/models](https://github.com/tensorflow/models/tree/master/research/object_detection)) — реверс-инжиниринг лоссов
    - **MoveNet MultiPose** (вышел позже) — расширение на multi-person
    - **OneEuroFilter** (Casiez et al., 2012) — вероятно используется в temporal filter
    - **BlazePose** (для прямого сравнения 2D edge-моделей) — у нас уже разобран
    - **RTMPose / RTMPose-Lite** — современный SOTA-конкурент
    - **MMPose** — фреймворк, в котором можно прогнать fair comparison MoveNet vs HRNet vs RTMPose
6. **Приоритет для нашего исследования:** **ВЫСОКИЙ** — обязательный baseline; обязательная точка сравнения по mAP на нашем фитнес-eval; обязательная точка сравнения по latency на Snapdragon 8 Gen 2.
    
7. **Связанные статьи, которые стоит прочитать следом:**
    
    - **CenterNet** (Zhou et al., arXiv:1904.07850, 2019) — архитектурная база
    - **PoseNet** (Papandreou et al., 2018) — предшественник, baseline
    - **Lite-HRNet** (Yu et al., 2021) — академический edge-конкурент с rigorous experiments
    - **RTMPose** (Jiang et al., arXiv:2303.07399, 2023) — modern SOTA edge
    - **OneEuroFilter** (Casiez et al., 2012) — для temporal filter reproduction
    - **BlazePose** (Bazarevsky et al., 2020) — параллельный продукт Google [уже разобран в vault]
    - **MMPose Benchmark suite** — фреймворк для fair comparisons

---

## ИТОГОВАЯ КАРТОЧКА (для Obsidian-vault)

````markdown
---
title: "Next-Generation Pose Detection with MoveNet and TensorFlow.js"
title_ru: "MoveNet (Lightning + Thunder): edge pose estimation от Google"
authors: [Votel, Li, Beletti, Chen, Oerlemans]
year: 2021
venue: "TensorFlow Blog (Google I/O 2021) + Model Card"
venue_tier: "preprint"
doi: "—"
tags: [pose_estimation, edge, commercial, validation]
pose_dim: "2d"
strategy: "bottom_up"
backbone: "MobileNetV2 + FPN (output stride 4) + 4 CenterNet heads"
params_M: 2.4 # Lightning ≈ 2.4M (оценка из FP16 размера 4.8MB); Thunder ≈ 6.3M
flops_G: null # НЕ ОПУБЛИКОВАНЫ
latency_ms: 25 # Lightning FP16 на Pixel 5 GPU; на Snapdragon 8 Gen 2 GPU экстраполируется к ~8 мс
hw_tested: "Pixel 5 (CPU 4 threads, GPU, NNAPI), Raspberry Pi 4, MacBook Pro 2019, iPhone 12"
relevance_to_smartrep: 5
direction: "A"
priority: "HIGH"
---

# MoveNet (Lightning + Thunder): edge pose estimation от Google

## TL;DR
MoveNet — индустриальная edge-модель Google (2021, без peer review) с двумя capacity вариантами: Lightning (192×192 input, 2.4M params, 2.9-4.8 MB) и Thunder (256×256, 6.3M params, 7.1-12.6 MB), архитектурно — MobileNetV2 + FPN + 4 CenterNet-style prediction heads. Главное отличие от BlazePose — целенаправленное обучение на закрытом фитнес-датасете Active (23.5k YouTube fitness/yoga/dance frames), что даёт +25-30 пунктов mAP на фитнес-eval. Готовые TFLite FP16/INT8 + GPU/NNAPI delegates делают MoveNet прямым baseline для нашей задачи, но отсутствие угловых метрик, foot keypoints, и закрытость Active — главные gap'ы.

## Проблема
Существующие edge pose estimators (PoseNet, BlazePose) либо обучены на COCO (плохо переносится на фитнес), либо требуют видимости лица (BlazePose), либо тяжёлые. Нужна edge-модель, специально оптимизированная под движения с сильной motion blur, нестандартные позы и self-occlusion фитнес-домена.

## Гипотеза / вклад
- Целенаправленное обучение на curated фитнес-датасете даёт значительный прирост качества vs identical-architecture COCO-only baseline.
- CenterNet-style bottom-up архитектура с 4 prediction heads + smart cropping + non-linear temporal filter обеспечивает robust single-person tracking при background-people rejection.
- Два capacity варианта (Lightning/Thunder) покрывают разные hardware budget — от entry-level смартфонов до desktop GPU.

## Метод
MobileNetV2 (depth_mult 1.0/1.75) → FPN decoder (output stride 4) → 4 параллельные prediction heads: person center heatmap, keypoint regression field (center-out), person keypoint heatmap, 2D per-keypoint offset field. На инференсе — 4-step post-processing: (1) выбор центра ближайшего к кадру человека по weighted center heatmap, (2) initial keypoint estimation через regression field, (3) взвешивание keypoint heatmap инверсно расстоянию до regression-точки (фильтр против фоновых людей), (4) argmax + offset для sub-pixel точности. Smart cropping использует предыдущий кадр; non-linear temporal filter сглаживает jitter.

## Датасеты
| Датасет | Размер | Метрика | Результат |
|---|---|---|---|
| COCO Train2017 single-person | 28k images | training | — |
| Active (Google internal) Train | 23.5k images (YouTube fitness/yoga/dance) | training | — |
| COCO Val2017 single-person | 919 images | mAP@OKS | Lightning 63.0 / Thunder 72.0 |
| Active eval | 1161 images | mAP@OKS | Lightning ~89-92 / Thunder ~92-95 |

## Сравнение с SOTA
В блогах сравнивается только с PoseNet (MobileNetV1 backbone, FP32): MoveNet Lightning INT8 — 2.9 MB / 57.4 mAP / 52 ms vs PoseNet 13.3 MB / 45.6 mAP / 80 ms (Pixel 5 CPU). С BlazePose, Lite-HRNet, RTMPose-Lite сравнения отсутствуют. Iieta 2022 в independent comparison: MoveNet Lightning — 86.2% accuracy, MoveNet Thunder — 97.6% (на 1000 single-person COCO/MPII images).

## Edge-метрики
| Параметр | Значение | hw |
|---|---|---|
| Latency (Lightning INT8) | 52 ms | Pixel 5 CPU 4 threads |
| Latency (Lightning FP16) | 25 ms | Pixel 5 GPU |
| Latency (Thunder FP16) | 45 ms | Pixel 5 GPU |
| FPS | 30+ декларативно; >40 fps на Pixel 5 GPU для Lightning | — |
| Params | ~2.4M (Lightning) / ~6.3M (Thunder) — оценка из размеров файлов | — |
| FLOPs | НЕ ОПУБЛИКОВАНЫ | — |
| Model size | 2.9 MB (Lightning INT8) / 12.6 MB (Thunder FP16) | TFLite |

## Ограничения / слабости
- Только 2D, только 17 COCO keypoints (нет foot keypoints — критично для squat)
- Single-person scope (background-people rejection встроен)
- Нет peer-reviewed paper, нет ablations, нет формальной мат. формализации
- Active dataset закрыт; нет угловых метрик; нет MPJVE
- Нет сравнения с BlazePose / Lite-HRNet / RTMPose
- Оптимальная дистанция 1-2 м (3-6 ft); за её пределами деградация не quantified
- FLOPs не опубликованы

## Релевантность SmartRep
**Заимствовать:** (1) идею curated Active-style фитнес-датасета, расширенного foot keypoints для силовых упражнений; (2) Lightning INT8 как latency baseline; (3) non-linear temporal filter; (4) Model Card fairness шаблон. **Сравниваться:** обязательно — оба варианта по mAP на нашем eval и latency на Snapdragon 8 Gen 2 GPU/CPU. Lightning INT8 — реалистичный target для воспроизведения в нашем pipeline.

## Gap для нас
- **При этом не валидируется по угловым метрикам (MAE/RMSE по joint angles)** — наш ключевой gap.
- **При этом Active dataset закрыт** — невозможна репликация результатов или fine-tuning по их рецепту.
- **При этом не предсказываются foot keypoints (heel, big toe)** — критично для оценки техники приседаний и тяг.
- **При этом не валидируется на Fit3D, MM-Fit или другом public fitness MoCap dataset.**
- **При этом не использует periodicity priors для циклических движений** (temporal filter — denoising, не periodicity).
- **При этом не достигает <10 ms на CPU Snapdragon 8 Gen 2** — экстраполяция даёт ~15 ms на CPU, ~8 ms на GPU; pure-CPU бюджет требует более лёгкой модели или NPU.
- **При этом нет ablation studies** — невозможно изолировать вклад Active dataset, smart cropping, temporal filter.
- **При этом не публикованы FLOPs / params** — нужно профилировать самостоятельно.
- **При этом не использует биомеханические constraints на углы суставов.**
- **При этом не сравнивается с BlazePose** — невозможно сделать вывод, какая из двух edge-линий Google лучше для фитнеса.

## Ссылки на связанные статьи
- [[BlazePose - 2020]] (параллельный продукт Google, 33 keypoints)
- [[CenterNet - Zhou 2019]] (архитектурная база)
- [[PoseNet - 2018]] (предшественник)
- [[Lite-HRNet - 2021]] (академический edge-конкурент)
- [[RTMPose - 2023]] (modern SOTA edge)
- [[MobileNetV2 - 2018]] (backbone)
- [[OneEuroFilter - Casiez 2012]] (вероятный temporal filter)
- [[Fit3D Dataset - 2021]] (для нашей валидации)

## Код / данные
- Repo: https://github.com/tensorflow/tfjs-models/tree/master/pose-detection (TF.js); https://github.com/tensorflow/examples/tree/master/lite/examples/pose_estimation (TFLite samples Android/iOS/Pi)
- Pretrained: TF Hub — https://tfhub.dev/google/movenet/singlepose/lightning/4 (Lightning), https://tfhub.dev/google/movenet/singlepose/thunder/4 (Thunder); TFLite FP16/INT8 варианты
- Датасет: Active — **закрыт**; COCO 2017 — public

## BibTeX
```bibtex
@misc{Votel2021MoveNet,
  author       = {Votel, Ronny and Li, Na and Beletti, Francois and Chen, Yu-Hui and Oerlemans, Ard},
  title        = {Next-Generation Pose Detection with {MoveNet} and {TensorFlow.js}},
  howpublished = {TensorFlow Blog},
  year         = {2021},
  month        = {May},
  url          = {https://blog.tensorflow.org/2021/05/next-generation-pose-detection-with-movenet-and-tensorflowjs.html},
  note         = {Google I/O 2021. See also Model Card: \url{https://storage.googleapis.com/movenet/MoveNet.SinglePose\%20Model\%20Card.pdf}}
}
````

```

---

**[МОЙ КОММЕНТАРИЙ — итоговый]** MoveNet и BlazePose — две параллельные линии edge pose estimation от Google, выпущенные с разрывом ~год (BlazePose — июнь 2020, MoveNet — май 2021). Они **не конкурируют публично**, но архитектурно и идеологически различны:

| Аспект | BlazePose | MoveNet |
|---|---|---|
| Архитектура | Top-down detector-tracker, custom CNN | Bottom-up CenterNet, MobileNetV2+FPN |
| Регрессия | Heatmap-supervised regression | 4-head: heatmap + offset + center + center-out regression |
| Keypoints | 33 (включая кисти/стопы/доп.лицо) | 17 (COCO topology) |
| ROI стратегия | Vitruvian-man через лицо | Smart crop по предыдущему кадру + center heatmap |
| Training data | Внутренний geo-diverse pose | COCO + Active (фитнес-curated) |
| Метрика | PCK@0.2 (одна) | mAP@OKS (на двух доменах + fairness) |
| Документация | Workshop paper + блог | Только блог + Model Card |
| Лицензия | Apache 2.0 (MediaPipe) | Apache 2.0 (TF) |

**Для SmartRep:**
- **MoveNet** — более фитнес-релевантен по training data, лучше документирован по latency на разных hw, имеет fairness analysis, но **меньше keypoints** (нет foot/hand details)
- **BlazePose** — больше keypoints, лучше для нестандартных поз через face-anchored ROI, но face-dependence — слабость для инверсий

**Рекомендация:** прогнать **обе модели** на нашем pilot fitness eval, замерить (a) angular MAE на key joints, (b) latency на Snapdragon 8 Gen 2 CPU/GPU, (c) jitter по MPJVE. Результат напрямую обоснует выбор архитектурного направления для SmartRep и составит первую таблицу сравнения для нашего paper.

**Следующий приоритет для разбора:** **RTMPose / RTMPose-Lite** (Jiang et al., 2023) — современный peer-reviewed SOTA в той же edge-нише, но с rigorous ablations; даст академически правильную точку сравнения, которой не хватает у MoveNet и BlazePose.
```