Для классификации изображений использована сверточная нейронная сеть ResNet50
Dataset взят с Kaggle https://www.kaggle.com/datasets/alexattia/the-simpsons-characters-dataset
- dataset - папка с изображениями симпсонов, в ней содержатся файлы для train и отдельно лежат файлы для test
- notebook - jupyter notebook-и с комментариями и результатом работы кода, class_simp - ноутбук с исходным кодом, inference - ноутбук с готовой моделью, там вы можете посмотреть результаты работы просто запустив ячейки последователно(ВАЖНО!!! чтобы запустить inference надо скачать model.pt и label_encoder.pkl)
- requirements - текстовый файл, где записаны все, используемые мной библиотеки
- label_encoder.pkl - файл, в котором храниться кодировка для каждой метки в датасете
- config - файл с параметрами, используемыми для обучения и работы кода в целом
- main.py - файл, который вы можете запустить, чтобы увидеть полную работу алгоритма(скрипт для запуска написан в main.sh)
- Посмотрев на данные, мы можем выяснить, что изначально имеем сильный дисбаланс классов. В каких-то классах изображений около 2000, в других и 10 нет
- Как решение проблемы я предлагаю использовать оптимизатор AdamW и настроить weight_decay для регуляризации весов модели (были попытки использовать oversampling, но из-за этого было переобучение уже на 3 эпохе: train_accuracy = 0.92, а val_accuracy = 0.02 => я отказался от этого способа)
- Использование сверточной нейронной сети обусловлено нашей задачей: классификация изображений
- После обучения видим, что метрика f1-score = 0.97 ( на тестовых данных), что является довольно хорошим результатом