Распознавание эмоций - это процесс идентификации человеческих эмоций, чаще всего по выражению лица, а также по словесным выражениям. Это то, что люди делают автоматически, но также были разработаны вычислительные методологии.
Распознавание человеческого выражения играет важную роль в межличностных отношениях. … Выражение отражается в речи, руках и жестах тела, а также в мимике. Следовательно, извлечение и понимание выражения имеет большое значение для взаимодействия человека и машины.
[1] Обзор: -
Для этого тематического исследования мы собираемся использовать набор данных KDEF. Этот набор данных состоит из изображений лиц с метками их выражений. Мы принимаем во внимание семь человеческих выражений, и поскольку это задача классификации, мы будем использовать эти семь выражений в качестве целевой переменной.
На изображении выше мы видели, как выглядят изображения в наборе данных. Мы должны делать на них прогнозы, чтобы предсказать их выражения.
[2] Загрузка набора данных: -
У нас есть папка KDEF_VGG_DATA, содержащая множество изображений. Итак, нашим первым шагом была загрузка изображения с помощью opencv. Затем мы изменяем размер изображений до фиксированного размера (224,224,3). Сейчас мы нормализуем данные.
Нормализация данных изображения очень важна, иначе вы можете застрять в цикле градиента, где потери не уменьшаются и не увеличиваются.
Затем мы добавляем каждое изображение в список.
Мы горячо кодируем целевые метки.
[3] Обзор шагов
(1) - Первым шагом является подготовка вводимых данных, которые мы уже реализовали.
(2) - Для части обнаружения лиц я пробовал различные методы, такие как каскад Хаара, модуль Opencv Dnn, dlib детектора лиц HoG, dlib детектора лиц на основе глубокого обучения.
Вот ссылка, на которую я перешел.
У каждого из этих методов есть свои преимущества и недостатки, но я решил продолжить с Каскадом Хаара, поскольку он намного быстрее и с точностью спуска при подаче в реальном времени.
(3) - Последние три шага были выполнены с использованием моделей глубокого обучения. Я использовал одну собственную гипертонастроенную модель и трансферное обучение с VGG16.
[4] Моделирование: -
Передача обучения VGG16.
Передача обучения - это концепция, согласно которой мы можем перенести обучение других предварительно обученных моделей на наши данные. Вместо обучения нашей собственной нейронной сети мы можем использовать другие популярные предварительно обученные модели и передавать наши данные этим моделям и, в конечном итоге, получать функции для наших изображений.
По сути, сверточный слой генерирует элементы для изображений. Он применяет операцию свертки к каждому пикселю изображений и в конечном итоге генерирует n-мерный массив, который является не чем иным, как изученными характеристиками изображений.
Последние особенности изображения, которые мы получаем в конце сверточной нейронной сети, известны как узкие места. Эти узкие места представляют собой изученные особенности изображений, которые затем передаются в MLP, который действует как топ-модель. Затем этот MLP уменьшает функцию потерь и обновляет веса в MLP и ядра / фильтры в CNN.
Теперь для нашей задачи мы выбрали предварительно обученную нейронную сеть VGG-16 для генерации узких мест. Сеть VGG-16 содержит 16 слоев, из которых 13 являются сверточными. Эта нейронная сеть хорошо обучена на наборе данных image-net, который содержит миллионы изображений.
К счастью, эта обученная сеть VGG-16 доступна в керасах. Итак, мы загрузили эту предварительно обученную сеть VGG-16 и загрузили в нее веса image-net.
Собственная модель
Затем я обучил обе модели. Ниже приведены результаты, полученные на тестовом наборе.
Так я обнаружил, что VGG16 обеспечивает лучшую точность, чем моя собственная модель.
[5] Визуализация: -
Чтобы лучше понять, как эти модели извлекают особенности, я написал код для визуализации каждого слоя весов модели.
Таким образом, из представленной выше визуализации мы можем ясно понять, как модель изучает шаблоны на каждом уровне.
Для подробного объяснения, пожалуйста, проверьте мою записную книжку.
[6] Результаты: -
Итак, это примерное предсказание модели.
Итак, мы видим, что наша модель выполняет очень низкую работу по предсказанию выражений.
Давайте посмотрим на нашу матрицу путаницы.
[7] Вывод: -
Теперь может возникнуть несколько вопросов -
Вам может быть интересно, почему мы получили такую точность?
Прежде всего, набор данных, который мы использовали, не содержит изображений. Модели глубокого обучения требуют огромного количества данных и настройки различных гиперпараметров.
Сложно ли выучить выражение лица?
Изучить человеческие черты сложно. Человеческие черты и выражения лиц различны и уникальны на каждом изображении. Размер лица, углы выражения, тип выражения от человека к человеку различаются.
Как мы можем улучшить нашу точность?
Сначала получите больше данных, а затем попробуйте их расширить. Мы также должны позаботиться о классовом дисбалансе. Затем пробуем гиперпараметрическую настройку различных слоев. Мы можем увеличить размер входного изображения.
[8] Ссылки: -
(2) - https://medium.com/@hinasharma19se/facial-expressions-recognition-b022318d842a