Skip to content

Latest commit

 

History

11 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

HW1 — Unsupervised Representation Learning by predicting Image Rotations

В работе исследовалось обучение представлений на изображениях с помощью Self-Supervised pretext-task (предсказание поворота), а также качество переноса этих представлений на downstream классификацию.

Основной датасет: STL10, backbone: ResNet18, эксперименты включают supervised baseline, rotations-pretraining, визуализацию t-SNE, linear probing, fine-tuning, а также влияние аугментаций и transfer learning.

Постановка задачи

  1. Обучить модель на STL10 в supervised режиме и получить базовый ориентир по качеству.
  2. Реализовать Unsupervised Representation Learning by predicting Image Rotations: обучить модель предсказывать угол поворота (0/90/180/270) на split=unlabeled, затем оценить переносимость признаков на STL10-классификацию.
  3. Сравнить режимы использования backbone: linear probing (замороженный backbone) и fine-tuning (обучение всех весов), а также посмотреть, как на качество влияет data augmentation и перенос на CIFAR-10.

Данные и пайплайн

  • STL10: 10 классов, изображения 96×96; использовались split=unlabeled (100k) для rotations и train/test (5k/8k) для классификации.
  • Backbone: torchvision.models.resnet18, с адаптацией под размер/задачу (изменялись model.conv1, model.maxpool, model.fc; признаки брались из model.avgpool).
  • Инфраструктура обучения: PyTorch + torchvision, HuggingFace Trainer/TrainingArguments, AdamW, cosine scheduler + warmup, Automatic Mixed Precision

Эксперименты

0. Supervised

Обучение ResNet18 напрямую на STL10 train с оценкой на test использовалось как baseline. image

Итоговое качество: eval_accuracy = 0.691

1. Rotations (Self-Supervised pretext-task)

Модель обучалась предсказывать угол поворота {0,90,180,270} как 4-class классификацию на STL10 split=unlabeled.

В одном из основных запусков получено итоговое качество на eval: eval_accuracy = 0.9642 (задача предсказания угла повоторота)

image точность

2. t-SNE

t-SNE над avgpool features на 13k сэмплах:

image

Видно, что классы уже визуально разделяются, несмотря на то, что мы предсказывали угол поворота, вообще без информации про семантику изображений.

3. Linear probing

После rotations-pretraining backbone замораживался, и обучался только новый classifier (fc) на STL10 (10 классов).

image

Итог для linear probing: eval_accuracy = 0.5279

4. Fine-tuning

После загрузки rotations-checkpoint обучались все параметры модели на STL10 (fine-tuning), с уменьшенным LR. Итог для fine-tuning: eval_accuracy = 0.8161 image

t-SNE после обучения:

image

Видно, что классы уже легко разделяются

5. Supervised + augmentations

Проверялось, как разные наборы augmentations влияют на supervised обучение ResNet18 на STL10. Зафиксированные результаты (supervised, 32 эпохи), итоговая точность: 0.7362 (eval_accuracy).

6. Transfer Learning

Проверялся перенос rotations-pretrained backbone на CIFAR-10 через linear probing (замороженный backbone + обучаемый classifier). Для RUNNAME CIFAR10-linear-probe зафиксирован итог: eval_accuracy = 0.5091, eval_loss = 1.4224.

Ключевые метрики (summary)

Эксперимент Что обучалось Датасет Модель Eval accuracy Init weights source
Supervised baseline Все веса STL10 ResNet18 0.691 Random (supervised train)
Rotations pretraining (4-way rotation classifier) Все веса (4-way rotation classifier) STL10 unlabeled ResNet18 0.9642 (rotation task) Random (pretext task)
Linear probing (backbone frozen) Только fc (backbone frozen) STL10 ResNet18 0.7290 Rotations-pretrained
Fine-tuning after rotations pretraining Все веса STL10 ResNet18 0.8161 Rotations-pretrained
Supervised with augmentations Все веса STL10 ResNet18 0.7362 Random (supervised train)
Transfer learning linear probe Только fc (backbone frozen) CIFAR-10 ResNet18 0.5091 Rotations-pretrained (STL10)

Выводы

Главный результат

Rotations-pretraining дает сильную инициализацию: fine-tuning после него на STL10 достигает (0.8161), что выше supervised baseline (0.691) и supervised + aug (0.7362). Высокая accuracy на rotation-задаче ((0.9642)) означает, что pretext-task выучивается хорошо и дает полезные признаки.

Что реально дает rotations

Rotations учит backbone устойчивым низко-/среднеуровневым визуальным признакам (границы, текстуры, форма), поэтому на t-SNE видно частичное разделение классов без меток. Но сами признаки не оптимальны под семантику, поэтому при frozen-backbone качество ограничено (linear probing заметно хуже fine-tuning).

Перенос на CIFAR-10

При переносе без адаптации (linear probe) качество на CIFAR-10 около (0.509): признаки частично переносятся, но доменный сдвиг и специфика rotation-задачи мешают. Для лучшего transfer нужен fine-tuning на CIFAR-10 или более сильный SSL pretraining.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages