Что такое transfer learning и как его использовать в CV?

Transfer learning (обучение с переносом) — это метод в машинном обучении, при котором предварительно обученная модель используется как отправная точка для решения новой задачи. Вместо того чтобы обучать модель с нуля, мы берем модель, уже обученную на большом датасете (например, ImageNet), и дообучаем её (fine-tune) или используем как извлекатель признаков (feature extractor) для другой задачи.

Этот подход особенно эффективен в задачах компьютерного зрения (CV, Computer Vision), поскольку обучение с нуля требует огромных объемов размеченных данных и вычислительных ресурсов.

1. Основная идея transfer learning

Предположим, у нас есть модель, обученная на ImageNet (датасет с 1.2 миллиона изображений и 1000 классов). Эта модель уже "знает", как распознавать общие визуальные паттерны — углы, линии, текстуры, формы. Эти знания можно переиспользовать, даже если мы хотим обучить её, например, распознавать медицинские изображения, виды насекомых или дефекты на производственной линии.

Transfer learning позволяет:

  • ускорить обучение

  • повысить точность

  • работать с меньшими наборами данных

  • сократить потребность в вычислительных ресурсах

2. Этапы transfer learning в CV

Существует два основных подхода к использованию transfer learning в задачах компьютерного зрения:

A. Feature Extraction (извлечение признаков)

Здесь предварительно обученная модель используется как фиксированный извлекатель признаков.

Шаги:

  1. Загружается модель (например, ResNet50), без последнего полносвязного слоя (classification head).

  2. Замораживаются все веса модели (т.е. обучение отключено).

  3. Новые изображения прогоняются через сеть до последнего сверточного слоя.

  4. Полученные векторные признаки подаются в новый классификатор (например, полносвязный слой или SVM), который обучается на вашей задаче.

Преимущества:

  • Быстро

  • Эффективно при малом количестве данных

  • Избегает переобучения

Недостатки:

  • Ограничено задачами, близкими по семантике к оригинальной

B. Fine-Tuning (тонкая настройка)

Здесь берется предварительно обученная модель, и некоторые из её слоев размораживаются (делаются обучаемыми), чтобы адаптировать модель к новой задаче.

Шаги:

  1. Загружается предобученная модель.

  2. Удаляются последние слои, заменяются на новые, соответствующие новой задаче.

  3. Замораживаются нижние сверточные слои (например, первые 2–3 блока ResNet).

  4. Оставшиеся сверточные + новые слои обучаются на вашей выборке.

Плюс: модель адаптируется к специфике ваших данных.
Минус: требует больше данных и времени.

3. Когда использовать какой подход

Сценарий Feature Extraction Fine-Tuning
Мало данных
--- --- ---
Данные похожи на ImageNet
--- --- ---
Данные сильно отличаются (например, рентген)
--- --- ---
Ограниченные ресурсы
--- --- ---
Требуется высокая точность
--- --- ---

4. Типичный pipeline transfer learning в CV

Пример на PyTorch:

import torchvision.models as models
from torch import nn
\# Загрузка предобученной модели ResNet-50
model = models.resnet50(pretrained=True)
\# Замораживаем все параметры
for param in model.parameters():
param.requires_grad = False
\# Заменяем классификатор под свою задачу (например, 10 классов)
model.fc = nn.Linear(model.fc.in_features, 10)
\# Теперь обучаем только model.fc

Для fine-tuning нужно разморозить часть слоев:

\# Разморозим последние сверточные блоки
for name, param in model.named_parameters():
if "layer4" in name:
param.requires_grad = True

5. Популярные предобученные модели в CV

Большинство библиотек (PyTorch, TensorFlow) предоставляют доступ к готовым моделям, предобученным на ImageNet или других датасетах.

Классические CNN:

  • VGG16/VGG19

  • ResNet (18, 34, 50, 101, 152)

  • DenseNet

  • MobileNet (мобильные и быстрые)

  • EfficientNet (высокая точность, малый размер)

Сети с attention:

  • Vision Transformer (ViT)

  • Swin Transformer

Модели, предобученные на других задачах:

  • CLIP (текст+изображение)

  • SAM (segment anything model от Meta)

  • DINO/DINOv2 (self-supervised модели)

6. Transfer learning за пределами классификации

Transfer learning применим не только к задачам классификации. Его можно использовать и в других задачах CV:

  • Object detection: Faster R-CNN, YOLO, SSD используют backbone (обычно ResNet или MobileNet), предобученный на ImageNet.

  • Сегментация: U-Net с предобученным энкодером (например, VGG или ResNet) используется для медицинских изображений, спутниковых снимков и пр.

  • Image captioning: CNN (например, ResNet) для извлечения признаков изображения + LSTM или Transformer для генерации текста.

  • Self-supervised обучение: модели сначала обучаются без меток (например, DINO, BYOL), потом применяются в transfer learning.

7. Советы по применению

  • Используйте BatchNorm слои в режиме eval во время feature extraction.

  • При fine-tuning важно использовать низкий learning rate для предобученных слоёв.

  • Добавляйте data augmentation при малом количестве данных — это усиливает устойчивость модели.

  • Проверьте, подходит ли размер входного изображения вашей модели. Например, EfficientNet требует 224×224 или 300×300.

  • Используйте learning rate scheduler — помогает избежать переобучения.

8. Преимущества transfer learning в CV

  • Позволяет достигать высоких результатов без больших датасетов.

  • Снижает стоимость и время обучения.

  • Даёт доступ к мощным архитектурам без необходимости их разрабатывать и обучать с нуля.

  • Эффективен при работе с узкоспециализированными задачами: медицинские изображения, геоинформационные системы, промышленное зрение.

Transfer learning — ключевой инструмент современного компьютерного зрения, позволяющий использовать накопленные знания моделей на новых, даже ограниченных, задачах.