Задание - d-01/graduate-2021-dec GitHub Wiki
Техническое задание на дипломную работу
- Дипломная работа — это соревнование на платформе Kaggle. Ссылка.
- Необходимо написать воспроизводимый код, генерирующий csv-файл с ответами. В нём для каждого изображения с лицом человека должна указываться наиболее вероятная эмоция из представленных. Пример такого файла — на платформе Kaggle (файл sample_submission.csv).
- Вы можете отправить на валидацию не более пяти решений в день.
- Обратите внимание, что на платформе Kaggle существует разбиение отправленного вами файла на public и private части. В задании 50% изображений теста соответствуют публичной части, остальные 50% — приватной. До окончания соревнования результат вашей модели известен только на public-части. Такое разбиение нужно, чтобы модели не переобучались на тесте.
- Описание данных, формат файла для ответа и метрику качества вы найдёте в самом соревновании на Kaggle.
Технические требования
Работа требует реализации алгоритма, с помощью которого будет происходить заданная классификация. Приветствуется использование архитектур свёрточных нейронных сетей, разобранных во время теоретических занятий. Время инференса сети на Google Colab не должно превышать 0,33 секунды (3 кадра в секунду).
Улучшения и дополнения к заданию
Чтобы выполнить дополнительную просьбу заказчика, попробуйте использовать модель в небольшом прототипе: берите кадры из веб-камеры, прогоняйте их через модель, а в окне камеры выводите результат.
Для этого сделайте следующее:
- Разберитесь с работой камеры на вашем ноутбуке через библиотеку opencv. Примеры работы камеры с opencv смотрите в дополнительных материалах к этому заданию.
- Возьмите предобученный детектор лица. Используйте примеры из дополнительных материалов или обучите свой детектор.
- Оберните вашу модель в Python-класс с методами:
__init__
, в котором будет происходить загрузка весов вашей модели.predict
, который будет принимать на вход предобработанный кадр из веб-камеры и возвращать эмоцию.
- Сделайте вывод камеры таким, как показано на рисунке ниже. Расположение и цвета элементов остаются на ваше усмотрение.
Формат сдачи материалов и оценивание
- Первым шагом добейтесь, чтобы посылка на Kaggle получила результат выше отметки «Зачёт» на лидерборде (0.29880). Решения будут оцениваться по метрике categorical_accuracy. Помимо этой посылки пришлите код разработанной рекомендательной системе в GitHub/GitLab. Код должен быть полностью запускаемый и покрытый комментариями. Обязательно укажите в README инструкции по запуску.
- В коде оставьте все решения, которые тестировались при выполнении дипломной работы. Так мы сможем оценить объём и количество проведённых экспериментов. Каждый такой эксперимент сопроводите комментариями с результатами теста и сделанными выводами.
- Оценка «Зачёт» ставится, если метрика отправленного решения на public leaderboard > метрики «Зачёт» и решение воспроизводимо, то есть проверяющий может его запустить и добиться аналогичного качества метрики
- Для оценки «4» необходимо пройти планку «Зачёт» на private leaderboard, а также выполнить два пункта из раздела «Предложения по повышению оценки».
- Для оценки «5» необходимо, чтобы результат на private leaderboard был > 0,4, а также нужно выполнить все пункты из раздела «Для повышения оценки».
Для повышения оценки
- Используйте подходы по искусственному увеличению датасета для обучения, а именно — аргументации, рассмотренные в курсе.
- Используйте продвинутые техники обучения, такие как finetuning и другие, рассмотренные в курсе.
- Пишите структурный код (основная логика кода должна быть вынесена в классы/методы/функции + осмысленный нейминг сущностей и комментарии).
- Проведите эксперименты с valence-arousal разложением эмоций, когда модель обучается не на самих эмоциях, а на их разложении по этим двум компонентам. Информация о подобном разложении есть в дополнительных материалах.
- Работающий прототип из пункта «Улучшение и дополнения к заданию» прибавляет один балл к итоговой оценке и добавляет в портфолио ценный ML-проект.