В работе исследовалось обучение представлений на изображениях с помощью Self-Supervised pretext-task (предсказание поворота), а также качество переноса этих представлений на downstream классификацию.
Основной датасет: STL10, backbone: ResNet18, эксперименты включают supervised baseline, rotations-pretraining, визуализацию t-SNE, linear probing, fine-tuning, а также влияние аугментаций и transfer learning.
- Обучить модель на STL10 в supervised режиме и получить базовый ориентир по качеству.
- Реализовать Unsupervised Representation Learning by predicting Image Rotations: обучить модель предсказывать угол поворота (0/90/180/270) на split=unlabeled, затем оценить переносимость признаков на STL10-классификацию.
- Сравнить режимы использования 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
Обучение ResNet18 напрямую на STL10 train с оценкой на test использовалось как baseline.

Итоговое качество: eval_accuracy = 0.691
Модель обучалась предсказывать угол поворота {0,90,180,270} как 4-class классификацию на STL10 split=unlabeled.
В одном из основных запусков получено итоговое качество на eval: eval_accuracy = 0.9642 (задача предсказания угла повоторота)
t-SNE над avgpool features на 13k сэмплах:
Видно, что классы уже визуально разделяются, несмотря на то, что мы предсказывали угол поворота, вообще без информации про семантику изображений.
После rotations-pretraining backbone замораживался, и обучался только новый classifier (fc) на STL10 (10 классов).
Итог для linear probing: eval_accuracy = 0.5279
После загрузки rotations-checkpoint обучались все параметры модели на STL10 (fine-tuning), с уменьшенным LR.
Итог для fine-tuning: eval_accuracy = 0.8161

t-SNE после обучения:
Видно, что классы уже легко разделяются
Проверялось, как разные наборы augmentations влияют на supervised обучение ResNet18 на STL10. Зафиксированные результаты (supervised, 32 эпохи), итоговая точность: 0.7362 (eval_accuracy).
Проверялся перенос rotations-pretrained backbone на CIFAR-10 через linear probing (замороженный backbone + обучаемый classifier).
Для RUNNAME CIFAR10-linear-probe зафиксирован итог: eval_accuracy = 0.5091, eval_loss = 1.4224.
| Эксперимент | Что обучалось | Датасет | Модель | 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 учит backbone устойчивым низко-/среднеуровневым визуальным признакам (границы, текстуры, форма), поэтому на t-SNE видно частичное разделение классов без меток. Но сами признаки не оптимальны под семантику, поэтому при frozen-backbone качество ограничено (linear probing заметно хуже fine-tuning).
При переносе без адаптации (linear probe) качество на CIFAR-10 около (0.509): признаки частично переносятся, но доменный сдвиг и специфика rotation-задачи мешают. Для лучшего transfer нужен fine-tuning на CIFAR-10 или более сильный SSL pretraining.



