Код-ревью Middle Эмбеддинги и fine-tuning обновлено

Ревью: дообучение предобученной модели

Вопрос

Коллега дообучает предобученный ResNet на своём датасете из 3 000 картинок. Найдите проблемы.

model = torchvision.models.resnet50(weights="IMAGENET1K_V2")
for p in model.parameters():
    p.requires_grad = False
model.fc = nn.Linear(2048, num_classes)
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
train_tf = transforms.Compose([transforms.Resize(224), transforms.ToTensor()])
for epoch in range(100):
    model.train()
    for x, y in train_loader:
        optimizer.zero_grad()
        loss = criterion(model(x), y)
        loss.backward()
        optimizer.step()

Коротко

Рецепт: нормализация как при предобучении, аугментации, сначала голова на замороженном бэкбоне с умеренным lr, затем разморозка верхних блоков с меньшим lr, валидация и early stopping.

Что должен найти ревьюер

  1. Стильстрока 5
    SGD с lr = 0.1 без momentum и расписания, и в оптимизатор переданы все параметры, хотя учится только голова: лучше передать model.fc.parameters(), подобрать lr по валидации, а при разморозке бэкбона брать lr на порядок меньше.
  2. Ошибкастрока 6
    Нет нормализации входа средними и std ImageNet, на которых предобучены веса: признаки бэкбона будут искажены.
  3. Стильстрока 6
    Нет аугментаций на трейне: на 3 000 картинок модель быстро переобучится.
  4. Стильстрока 7
    100 эпох без валидации и early stopping: переобучение никто не заметит.
  5. Ошибкастрока 8
    model.train() при замороженном бэкбоне обновляет статистики BatchNorm бэкбона на маленьком датасете; часто BN-слои держат в eval или замораживают явно.

Разбор

Рецепт: нормализация как при предобучении, аугментации, сначала голова на замороженном бэкбоне с умеренным lr, затем разморозка верхних блоков с меньшим lr, валидация и early stopping. BatchNorm при заморозке бэкбона требует внимания: requires_grad = False не останавливает обновление running_mean и running_var в режиме train.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.