Данная статья была подготовлена на основе презентации моей курсовой работы по компьютерному зрению. Ее цель - это краткий обзор аспектов машинного обучения в контексте задачи распознавания эмоций. То есть, в данной стать мы не будем излишне углубляться в детали, но при этом затронем практически все проблемы, которые так или иначе связаны с одной задачей: построение модели для распознавания эмоций.
Статья будет состоять из 3 частей:
Введение
Описание и постановка задачи распознавания эмоций.Три кита качества
Данные;
Архитектура;
Гиперпараметры.Запуск модели
Разбор моего ноутбука с работой по шагам.
Каждая из частей будет более практическая чем предыдущая и постепенно перейдет от общей теории к реальному коду. Если у вас возникнут какие-либо вопросы или замечания, то пожалуйста изложите их в комментариях.
Приятного чтения!
Что такое эмоции и для чего они нужны?
Эмоция - это психический процесс, отражающий субъективное оценочное отношение к существующим или возможным ситуациям и объективному миру.
![Смотрит статью на Хабре... Смотрит статью на Хабре...](https://webcf.waybackmachine.org/web/20240707055538/https://habrastorage.org/getpro/habr/upload_files/76d/c27/b93/76dc27b93a565d088bc71743a6ea1f5a.jpg)
Простыми словами эмоции это чувства, которые мы испытываем и так или иначе выражаем в ответ на объекты и ситуации (в том числе гипотетические).
Эмоции могут проявляться по-разному: с помощью мимики, жестикуляций, движения частей тела, вербально, а так же внутренне, побуждая те или иные мысли и воспоминания.
Открытое проявление эмоций это эволюционно выработанная черта, необходимая социальным видам. Субъекты, порою невольно, сообщают информацию о своем состоянии другим, что помогает им лучше понимать друг друга.
Зачем нужно определять эмоции?
Если для людей определение эмоций не просто важнейший навык коммуникации, а скорее даже жизненная необходимость, то зачем учить этому машины?
![Реакция на товар Реакция на товар](https://webcf.waybackmachine.org/web/20240707055538/https://habrastorage.org/getpro/habr/upload_files/27c/c05/071/27cc05071227dee7def3355b2c8b0514.jpg)
1. Рекламные агентства и продуктовые сервисы хотят знать, что вы чувствуйте, когда видите их товар;
2. Приложениям и сайтам, оснащенным рекомендательными системами, важно знать вашу реакцию на контент;
3. Детектор эмоций может быть полезен как одна из частей полиграфа;
4. Некоторые приложения-собеседники могут получать обратную связь, считывая эмоции.
Постановка задачи распознавания
Задача распознавания эмоций - это сложная задача в которой разделение на классы носят формальный характер, а также существует своя специфика: эмоции бывают слабо различимы, трудно определяемы по одному кадру, а при их классификации важен контекст.
Эталоном для определения эмоций является FACS (facial action coding system) - система кодирования лицевых движений американского психолога Пола Экмана. В ней движения головы, глаз и мышц лица задаются специальными кодами.
! Важно понять, что большинство баз данных не работают в рамках академических методов и не соответствуют эталону. Разметка большинства датасетов не производится профессионалами, а разделение на классы может быть спорным.
Какие методы систематизации эмоций существуют?
![Удивление Удивление](https://webcf.waybackmachine.org/web/20240707055538/https://habrastorage.org/getpro/habr/upload_files/38c/d2f/d23/38cd2fd23aa2210b195324f324aa7398.jpg)
Дискретный
Здесь эмоции делятся всего на несколько базовых классов. Все данные распределяются между ними.
У этого метода есть множество недостатков, таких как: отсутствие переходных классов, градации силы эмоции, частый классовый перекос в базах данных, так как одни состояния удается запечатлеть чаще чем другие.
![Valence and arousal Valence and arousal](https://webcf.waybackmachine.org/web/20240707055538/https://habrastorage.org/getpro/habr/upload_files/844/f3c/987/844f3c9876f6a4aaa5e7a19153e5c19b.png)
Непрерывный
Например, модель Рассела раскладывает эмоциональное состояние по 2 осям: валентность - окрас эмоции и возбуждение - сила с которой она проявляется.
В рамках такой модели ненависть-раздражение-гнев-аффект или удовлетворенность-счастье-радость-восторг будут градациями одних и тех же состояний отличающихся своей силой.
Реализация данных концепций также требуют различных подходов: классификации и регрессии соответственно.
Проблемы связанные с распознаванием
Не всегда получается распознать, что чувствует человек из-за следующих факторов:
![Чувства Гарольда Чувства Гарольда](https://webcf.waybackmachine.org/web/20240707055538/https://habrastorage.org/getpro/habr/upload_files/0dd/ffa/7e4/0ddffa7e429cfcb749c9edf437d1017b.png)
* Скрытые эмоции - покерфэйс;
* Слабо выраженные эмоции - это характерно для людей с определенными типами личности;
* Плохо интерпретируемые эмоции - как на изображении;
* Двойные эмоции - ностальгия (грусть об ушедшем счастье) или азарт (игривая агрессия).
Кроме того, важно знать цель распознавания. Что для нас важнее важнее, определить нейкий паттерн морщин на лице человека, который формально можно причислить к некой категории, или же его внутреннее состояние? А ведь это совсем не одно и тоже!
Иногда эта дилемма проявляется особенно ярко.
![Ужас? Гнев? Радость! Ужас? Гнев? Радость!](https://webcf.waybackmachine.org/web/20240707055538/https://habrastorage.org/getpro/habr/upload_files/570/aa2/4f9/570aa24f9edfb22a45fc545527d9f877.jpg)
Очень часто, чтобы правильно классифицировать эмоции нужен контекст и наблюдение в динамике. А значит эмоции лучше всего определять по последовательности связанных кадров, где видны не только ключевые точки лица, но и их изменения на протяжении некого периода времени. Это связано с тем, что эмоции не являются чем-то статичным, как рост или размер обуви. Для их полноценного выражения требуется некий временной лаг.
Три кита качества
Целью создания и обучения любой модели является высокая точность предсказаний на новых данных. Как этого достичь в контексте нашей задачи?
Глобально можно выделись три основных фактора:
Качество данных - размер, разнообразие, точность передачи;
Архитектура нейросети - актуальность, глубина, регуляризация и прочее;
Гиперпараметры - скорость обучения, методы измерения качества/потерь, оптимизатор и т.д.
Каждый из них одинаково важен при построении модели и не может быть скомпенсирован другими. Например, глубина сети или ее технологичность не могут устранить проблему некачественных данных. Хорошо подобранные параметры, слои аугментации, регуляризация и т.д. могут лишь улучшить то, что уже есть, но не исправить. Поэтому так важно уделить внимание всем этим факторам!
Для подробного рассмотрения каждого из них будет посвящена отдельная глава.
Конец первой части.