---
title: "Learning to Prompt for Vision-Language Models"
title_ru: "Обучение подсказок для визуально-языковых моделей (CoOp)"
authors: [Zhou, Yang, Loy, Liu]
year: 2022
venue: "IJCV"
venue_tier: "Q1"
doi: "2109.01134"
tags: [prompt_tuning, vision_language, few_shot, clip, adaptation]
relevance_to_smartrep: 2
direction: "🅱"
---

# CoOp: Обучение подсказок для визуально-языковых моделей

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

CoOp переводит процесс подбора текстовых prompt'ов для CLIP из ручного ("a photo of a [CLASS]") в автоматический: вектор контекста $\mathbf{v} = [v_1, v_2, ..., v_M]$ вместо слов учится через градиентный спуск на небольшом labelled set. Несколько примеров (1–16 shots) достаточно для существенного превосхождения hand-crafted prompts. Для SmartRep: если использовать CLIP или его motion-адаптацию как backbone, CoOp — готовый рецепт адаптации к новым классам упражнений через обучаемый prompt.

## Проблема

CLIP и аналогичные vision-language модели требуют hand-crafted текстовых prompt'ов: "a photo of a [squat]". Выбор формулировки значительно влияет на результат, а перебор вручную ненадёжен. Нужен способ автоматически адаптировать контекст prompt'а к конкретной задаче с минимальной разметкой.

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

- **Learnable context vectors:** $[v_1, ..., v_M, \text{CLASS}]$ — M контекстных токенов — вещественные векторы в embedding-пространстве языковой модели, оптимизируемые под downstream задачу.
- **Two positions:** unified context (один вектор для всех классов) vs class-specific context (отдельный вектор для каждого класса).
- **Frozen CLIP:** backbone CLIP заморожен, оптимизируется только $\mathbf{v}$ — экономно и стабильно.

## Метод

CLIP text encoder: $w_c = \text{TextEncoder}([v_1, ..., v_M, t_c])$, где $t_c$ — токен класса $c$.

Classification через cosine similarity:

$$p(y=c|\mathbf{x}) = \frac{\exp(\cos(f(\mathbf{x}), w_c)/\tau)}{\sum_{c'} \exp(\cos(f(\mathbf{x}), w_{c'})/\tau)}$$

Loss — кросс-энтропия на $K$-shot примерах. Оптимизируются только $\{v_1, ..., v_M\}$ ∈ $\mathbb{R}^{M \times d}$.

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

```
K-shot images → frozen CLIP image encoder → image features f(x)
Learnable [v₁,...,vM,CLASS] → frozen CLIP text encoder → text features w_c
                                    ↓
                cosine similarity → softmax → CE loss → update v only
```

## Датасеты

| Датасет | Задача | Метрика | Результат (16-shot) |
|---|---|---|---|
| ImageNet | Classification | Accuracy | 71.5% (vs 67.0% zero-shot CLIP) |
| OxfordPets | Fine-grained | Accuracy | 93.7% |
| EuroSAT | Satellite | Accuracy | 92.2% |

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

+4–7% к zero-shot CLIP на большинстве датасетов при 16 shot. Превосходит linear probe с теми же примерами на fine-grained задачах благодаря language prior.

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

- Хуже zero-shot CLIP при domain generalization (overfits к base classes — решено в CoCoOp).
- Требует CLIP backbone — нельзя применить к произвольной модели.
- Learnable vectors трудно интерпретировать — не соответствуют словам.
- Скелетные/motion данные плохо представлены в предобученном CLIP.

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

- **Action-CLIP адаптация 🅱:** если в SmartRep использовать Action-CLIP как backbone для video understanding, CoOp — готовый few-shot адаптер: 5 примеров нового упражнения → обучаем prompt → CLIP "знает" что такое "правильный кубинский присед".
- **Exercise vocabulary:** текстовое описание упражнения ("correct barbell back squat: knees tracking toes, depth below parallel") — наивный prompt. CoOp найдёт лучшую формулировку автоматически.
- **Ограниченная прямая применимость:** CLIP предобучен на изображениях, не на скелетных последовательностях — большой domain gap для силовых упражнений.

## Gap для нас

CoOp для video/pose данных не исследован систематически. **Ниша SmartRep:** Motion-CoOp — learnable prompt для video-language модели (Action-CLIP или InternVideo) адаптированный к fitness domain через 5 размеченных видео упражнений. Это применение CoOp-парадигмы к motion quality assessment — не было сделано ни в одной из известных работ.

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

- [[CoCoOp]] — расширение CoOp с conditional context для лучшей генерализации
- [[VPT]] — visual prompt tuning как альтернатива
- [[Action-CLIP]] — CLIP для video как backbone

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

- Repo: github.com/KaiyangZhou/CoOp
- Pretrained: доступны learned prompts

## Цитата (BibTeX)

```bibtex
@article{zhou2022coop,
  title={Learning to Prompt for Vision-Language Models},
  author={Zhou, Kaiyang and Yang, Jingkang and Loy, Chen Change and Liu, Ziwei},
  journal={International Journal of Computer Vision},
  year={2022}
}
```
