---
title: "Visual Prompt Tuning"
title_ru: "Визуальная настройка подсказок (VPT)"
authors: [Jia, Tang, Chen, Cardie, Belongie, Hariharan, Lim]
year: 2022
venue: "ECCV"
venue_tier: "A*"
doi: "2203.12119"
tags: [prompt_tuning, vision_transformer, few_shot, adaptation, vit, parameter_efficient]
relevance_to_smartrep: 3
direction: "🅱"
---

# VPT: Визуальная настройка подсказок

## TL;DR (≤3 предложения)

VPT вводит learnable prompt-токены непосредственно в визуальную ветку ViT: небольшое число дополнительных векторов добавляется к patch-токенам на входе каждого transformer-блока, и только эти токены обучаются при fine-tuning. При <1% обучаемых параметров VPT превосходит полный fine-tuning на большинстве downstream задач, особенно в low-data режиме. Для SmartRep: эффективный адаптер ViTPose или MotionBERT к новым упражнениям без fine-tuning всей модели.

## Проблема

Полный fine-tuning крупных ViT-моделей на малом датасете (5–10 повторов нового упражнения) ведёт к overfitting. Классические PEFT-методы (adapter, LoRA) хорошо известны для NLP, но для visual transformers в задачах движения не систематизированы.

## Гипотеза / вклад

- **VPT-Shallow:** prompt-токены только на первом слое ViT. Просто, дёшево.
- **VPT-Deep:** prompt-токены на каждом transformer-блоке — дороже, но значительно лучше.
- **Frozen backbone:** все веса ViT заморожены, обучаются только prompt-токены + head.
- **Low-data superiority:** при ≤25 примеров на класс VPT-Deep > full fine-tuning.

## Метод

Стандартный ViT: входные токены $[\mathbf{x}_{cls}, \mathbf{e}_1, ..., \mathbf{e}_N]$.

VPT-Deep добавляет $M$ learnable токенов на каждый слой $l$:

$$[\mathbf{x}_{cls}^l,\, \mathbf{P}^l,\, \mathbf{z}_1^l, ..., \mathbf{z}_N^l] = L_l([\mathbf{x}_{cls}^{l-1},\, \mathbf{P}^{l-1},\, \mathbf{z}_1^{l-1}, ..., \mathbf{z}_N^{l-1}])$$

где $\mathbf{P}^l \in \mathbb{R}^{M \times d}$ — learnable prompt-токены слоя $l$.

На output: $\mathbf{x}_{cls}^L$ → classification head. Параметры: $\{P^l\}_{l=1}^{L}$ + head. Backbone заморожен.

### Архитектура (Mermaid)

```
Image → Patch embed → [CLS, P¹, patch tokens] → Layer 1
                                                        ↓
                       [CLS', P², patch tokens'] → Layer 2 (P² is learnable)
                                                        ↓
                       ...
                                                        ↓
                       CLS^L → Head → Classification
(Only P^l and Head are trained; everything else frozen)
```

## Датасеты

| Датасет | Задача | Метрика | VPT-Deep | Full fine-tune |
|---|---|---|---|---|
| VTAB-1k (avg 19 tasks) | Transfer learning | Accuracy | 78.5% | 73.4% |
| FGVC (avg 5 tasks) | Fine-grained | Accuracy | 76.8% | 69.7% |

## Сравнение с SOTA

VPT-Deep превосходит full fine-tuning на 18 из 24 задач VTAB-1k, используя <1% параметров. Особенно выигрывает на structured tasks (не natural images) и low-data.

## Ограничения / слабости

- VPT-Deep добавляет $L \times M$ дополнительных forward computations — не бесплатно.
- Оптимальное $M$ (число prompt-токенов) варьируется по задачам — нужен поиск.
- Для видео/sequence данных не тестировалось систематически.
- Требует ViT-backbone — не применимо к CNN или ST-GCN.

## Релевантность SmartRep

- **ViTPose/MotionBERT адаптация 🅱:** ViTPose и MotionBERT — ViT-based модели. VPT позволяет адаптировать их к новому упражнению за несколько примеров, обучая только prompt-токены (~100–1000 параметров) вместо миллионов весов backbone.
- **Edge deployment:** замороженный backbone → возможна квантизация INT8 один раз; только prompt-токены в FP32 → минимальная дополнительная стоимость адаптации.
- **Per-user prompts:** разные наборы prompt-токенов для разных пользователей = персонализация без хранения копий всей модели.

## Gap для нас

VPT для темпоральных ViT (Video ViT, ViTPose for sequences) не исследован. **Ниша SmartRep:** Temporal VPT — prompt-токены для temporal dimension в video transformer: один набор токенов кодирует "стиль пользователя", другой — "тип упражнения". Это позволяет multi-axis adaptation (user × exercise) без комбинаторного взрыва наборов токенов.

## Ссылки на связанные статьи

- [[CoOp]] — prompt tuning в language space как аналог
- [[ViTPose]] — ViT-backbone для pose estimation, применим VPT
- [[MotionBERT]] — ViT для motion representation, применим VPT

## Код / данные

- Repo: github.com/KMnP/vpt
- Pretrained: нет специфических для motion

## Цитата (BibTeX)

```bibtex
@inproceedings{jia2022visual,
  title={Visual Prompt Tuning},
  author={Jia, Menglin and Tang, Luming and Chen, Bor-Chun and Cardie, Claire and Belongie, Serge and Hariharan, Bharath and Lim, Ser-Nam},
  booktitle={European Conference on Computer Vision},
  year={2022}
}
```
