У меня есть небольшой набор данных из 500 изображений растений, и я должен предсказать число для одного изображения в диапазоне [1, 10]. Между числами существует порядковая связь (10> 9> ...> 1). Эта проблема похожа на оценку возраста на основе одной фотографии.
Я попытался регрессировать с помощью Resnet18, Resnet34 и VGG16. Ни один из них не дал очень хорошего результата.
Интересный момент заключается в том, что когда я построил тепловую карту для нескольких изображений, она показала, что модель выбирает неправильные точки, чтобы предсказать ответ. Это похоже на то, что если бы я предполагал прогнозировать возраст на основе фотографии лица, то cnn придавал больше значения фону, чем фактическому лицу.
Я пробовал и другие подходы, такие как классификация и обучение ранжированию, но то же самое происходит, когда я делаю карту тепла. В этих подходах лучшая точность, которую я получаю, составляет 30% при использовании классификации и 35% при использовании обучения для ранжирования.
В подходах регрессии и классификации я использовал реализацию Fastai с предварительной подготовкой. Подход обучения к рангу я использовал это: https://github.com/Raschka-research-group/coral-cnn. Я немного изменил, чтобы иметь возможность использовать и предварительно обученную модель.
Еще один важный момент - это то, что набор данных не сбалансирован. 80% набора данных соответствуют классам с 6 по 10.
У кого-нибудь есть какие-либо советы по его улучшению или другой подход, который я мог бы попробовать?
РЕДАКТИРОВАТЬ: мое увеличение данных выглядит следующим образом:
transforms.Compose([
transforms.Resize(256), transforms.CenterCrop(224),
transforms.RandomHorizontalFlip(p=0.5),
transforms.ColorJitter(brightness=0.15),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.299, 0.224, 0.225])
])