Проект по распознаванию эмоций человека на сеансах видео связи (Skype, Zoom и т.д.)
active,
Founded 8 months ago

Я разрабатывал сервис распознавания эмоций людей по видеосвязи (например, для Skype, Zoom и аналогичных сервисов) в рамках учебного проекта по курсам "My First Data Project 2: от идеи к продукту" и "MLOps и production подход к ML исследованиям 2.0". Данный сервис может быть полезен всем кто общается со своими клиентами по видео звонкам. Например, это может быть сотрудник технической поддержки банка дающий онлайн консультацию клиенту банка. Или преподаватель частной онлайн школы, например, Skillbox. Данный сервис может помочь оценить эмоциональное состояние как клиента, что поможет в оценке его удовлетворенности обслуживанием, так и контролем работы сотрудника(например, чтобы засечь агрессивное или неподобающее поведение).

PyTorchEmotion_recognitionMLFlowPrefectFace_detectionintermediate_transformer_fusion

Gitlab группа с репозиториями проекта

Группа с репозиториями проекта расположена по (ссылке).

Описание всего проекта

Репозиторий содержит модели для распознавания эмоций на лицах людей на видео из видеоконференций (Zoom, Skype и т.д.).

Пример работы одной из моделей на видео онлайн конференции с актерами из датасета RAVDESS(ссылка).

Подробный рассказ про весь проект с демо его возможностей и внутреннем устройстве (ссылка).

Презентация в формате PowerPoint (gitlab-profile/repo_pics/Emotion_recognition_slides.pptx)

emotion_tracking_on_video

Принцип работы

Общая схема устройства системы компьютерного зрения

CV_system

Система состоит из трех этапов:

  1. Нейросеть детектор лиц вырезает crop'ы c лицами людей на кадрах видео.
  2. Треккинг отлеживает людей по рамкам детекции и присваивает каждому человеку на видео уникальный id
  3. Нейросеть классификатор классифицирует эмоции человека на последовательности из 15 crop'ов его лица

Рассмотрим каждый компонент подробнее:

  1. Нейросеть детектор лиц вырезает crop'ы c лицами людей на кадрах видео.

Face_detector

Для детекции лиц используется нейросеть RetinaFace(ссылка на оригинальный github-repo). Код авторов был написан для реализации научной статьи RetinaFace: Single-stage Dense Face Localization in the Wild.

Мной был разработан удобный python-пакет в репозитории pytorch_retinaface_infer(ссылка) для детекции лиц людей на фото.

  1. Треккинг отлеживает людей по рамкам детекции и присваивает каждому человеку на видео уникальный id

Face_tracking

Мы работаем с ПО для онлайн конференций, где каждый пользователь находится в своем отдельном окне. Ввиду потенциального отсутствия сложных коллизий в данной задаче и для увеличения производительности я решил остановится на SORT-треккинге.

  1. Нейросеть классификатор классифицирует эмоции человека на последовательности из 15 15 crop'ов его лица

Crop_face_emotion_classifier

Используется SOTA-модель(ссылка) показывающая лучший результат на датасете RAVDESS(ссылка) на данный момент времени intermediate transformer fusion из статьи Self-attention fusion for audiovisual emotion recognition with incomplete data(ссылка)

Особенностью обучения модели является то, что из всего видео с актером из датасета RAVDESS(ссылка) берется всего 15 кадров с помощью равномерного распределения.

ITF_training

Между кадрами есть интервалы, для длинных видео они могут быть по 10 кадров, для более коротких по 6 кадров.

Особенностью разработанного мной python-пакета для инференса данной модели multimodal-emotion-recognition_infer(ссылка) является то, что все кадры из видео берутся последовательно по 15 кадров без интервалов между ними.

ITF_inference

Структура проекта

Проект представляет собой модульную структуру из отдельных проектов для удобного переиспользования.

Проекты предназначены для

  • запуска Streamlit приложения для распознавания эмоций на фото и видео
  • запуска веб-сервиса с Fast API для распознавания эмоций на фото и видео с помощью POST и GET запросов
  • обучения отдельных нейронных сетей
  • удобного инференса моделей (достаточно установить python-пакет и использовать API)

Рассмотрим их подробнее

  1. Проект emotion_streamlit_app_test(ссылка) для Streamlit приложения для распознавания эмоций на фото и видео

  2. Проект emotion_recognize_serve(ссылка) содержит веб-сервис с Fast API для распознавания эмоций на фото и видео с помощью POST и GET запросов

  3. Проект emotion_recognize_infer(ссылка) представляет собой демо проект по использованию всех разработанных python-пакетов для инференса моделей.

В нем демонстрируется как использовать

  • pytorch_retinaface_infer(ссылка) python-пакет для детекции лиц людей на фото

  • multimodal-emotion-recognition_infer(ссылка) python-пакет для предсказания эмоций человека по crop'у его лица. Используется модель intermediate transformer fusion из статьи Self-attention fusion for audiovisual emotion recognition with incomplete data(ссылка).

Обучение модели предсказывающей эмоции человека по crop'у его лица на датасете RAVDESS(ссылка) представлено в проекте multimodal-emotion-recognition(ссылка).

  • как использовать pytorch_retinaface_infer и multimodal-emotion-recognition_infer вместе для предсказания эмоций людей на фото.

  • как использовать emotion_video_track(ссылка) python-пакет для предсказания эмоций людей на видео.

  1. Вспомогательный проект mlflow_services (ссылка) для развертывания MlFlow по сценарию 4 описанному в офф. документации (ссылка).

Мы разворачиваем систему микросервисов MlFlow (postgress, pgadmin, minio, mlflow) с помощью docker-compose.

Общая инфраструктура проекта

Project_infrastructure

Учебный проект

Проект был подготовлен как финальный итоговый проект при прохождении онлайн-курсов на платформе Open Data Science:

  • My First Data Project 2: от идеи к продукту (ссылка)

Итогом данного курса стало поступление в онлайн магистратуру ИТМО "Искусственный интеллект" от AI Talen Hub на бюджет(ссылка).

  • MLOps и production подход к ML исследованиям 2.0 (ссылка)

Видео запись защиты данного проекта с подробным демо возможностей и рассказом о нем на курсе MLOps и production подход к ML исследованиям 2.0(ссылка)

По итогу данного курса я занял 1-вое место в общем лидерборде (ссылка).

Cookies help us deliver our services. By using our services, you agree to our use of cookies.