Skip to content

rtm-1dyakonov/SB_Emotion-detection

Repository files navigation

Дипломный проект «Data Scientist. ML. Средний уровень (нейронные сети)»

Данный репозиторий включает в себя решение задачи разработки системы распознавания эмоций.

Процесс был разбит на 2 этапа:

  1. Разработка модели классификации эмоций
  2. Реализация real-time системы c использованием веб-камеры по выводу на экран текущей эмоции

1 этап (Google Colab)

Изначально была спроектирована собственная свёрточная сеть (Custom.ipynd), которая вышла на плато по качеству валидации при значении ~0,45. Однако во избежание "изобретения велосипеда", было решенио использовать архитекутры из ModelZoo. Опираясь на сравнительную таблицу, изображение взятую с интернет-ресурса PyTorch for Beginners: Image Classification using Pre-trained models, я решил остановить выбор на 3-ёх архитектурах: VGG19, ResNet50 и ModileNet V2. Выбор обоснован как тем, что данные архитектуры обладают относительно малым инференсом и находятся в свободном доступе в пакете TensorFlow.
Из-за специфики задачи использовался подход fine-tuning. Дело в том, что модели из "зоопарка" обучены на датасете ImageNet, где различия между классами гораздо более значительные нежели рахличия между эмоциями людей. Поэтому я решил разморозить все слои модели и обучить каждый, опираясь на таблицу (в случае данного кейса актуален 1-ый квадрант), изображение взятую из публикации Transfer learning from pre-trained models.

Максимальные значения метрики accuracy на валидационных данных получились следующие:

  • VGG19 - 0,51 (VGG_19_(AUG).ipynb);
  • ResNet50 - 0,49 (ResNet50.ipynb);
  • MobileNet V2 - 0,46 (MobileNet_V2_(simple_+_AUG).ipynb).

Данные значения соответствуют обучению с аугментацией данных. Без неё метрика accuracy в среднем была ниже на 5-6%. Соответственно, основой для продолжения разработки стала модель с архитекутрой VGG19.

Изначально после обучения модель НЕ соответствовала требованиям по времени инференса (58-66мс на 1 кадр против максимально допустимых 33мс). Для алгоритмического ускорения был использован пакет TensorRT с собственным "ифнвренс-движком", который относительно недавно был встроен непосредственно в библиотеку TensorFlow. После подобной модификации модели скорость инференса приблизиласт к значениям 5-10мс на 1 кадр.

Отдельный блокнот (Kaggle_format.ipynb) служил для формирования файла на платформу Kaggle. Итоговый результат посылки получился следующий: изображение На платформе присутствует 2 попытки отправки файла submission.csv из-за того, что в первый раз словарь с названиями классов был сформирован неправильно: нужно было пометить их в алфавитном порядке, а не в том, как они расположены на Google Drive
GIF

2 этап (Visual Studio Code)

Cкрипт для классификации эмоций с использованием веб-камеры main.py написан в Visual Studio Code. Для использования веб-камеры применяется функционал библиотеки OpenCV.

GIF-2

Есть 2 способа запуска системы на вашем устройстве:

  1. Скачать архив по ссылке, распаковать на своё устройство и запустить файл main.exe. После небольшого ожидания должна запуститься камера
  2. Руководствоваться следующими указаниями (в этом случае для воспроизведения решения на Вашем устройстве должен быть установлен Python. Для установки см. ссылку).

Шаги для использования системы распознавания эмоций:

  1. Скачать haarcascade_frontalface_default.xml из данного репозитория.
  2. Скачать модель по классификации эмоций одним из 2-ух следующих способов:
  • Скачать и распаковать архив с моделью по классификации эмоций по ссылке
  • Скачать модель, обученную самостоятельно и ускоренную с помощью TensorRT (в таком случае модель должна обучаться на изображениях (128, 128, 3) для воспроизводимости скрипта)
  1. Скачать файл main.py
  2. Скрипт main.py, модель haarcascade_frontalface_default.xml и папка с моделью по классификации эмоций (saved_model_trt либо Ваша модель) должны лежать в 1 директории изображение
  3. В папке с файлом main.py открыть командную строчку и прописать py main.py
  4. Если у Вас не установлен Keras или cv2 (OpenCV), то понадобится прописать pip install keras или pip install opencv-python соответственно, а после повторить шаг 5.

Ссылки для скачивания файлов

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published