ВВЕДЕНИЕ:

Люди всегда умели распознавать лица и определять их ориентиры, это всегда было тривиально и естественно для нас, но компьютерам очень трудно «изучить» эти настолько простые для нас задачи.

К счастью, благодаря графическому процессору и усовершенствованию вычислений компьютеры теперь могут обнаруживать и распознавать лица, а также их эмоции.

С этой целью я и мои коллеги разработали приложение, чтобы помочь ресторанам, кафе и службам в целом предлагать более персонализированный клиентский опыт, давая им обратную связь в реальном времени об эмоциях своих клиентов.

Содержание:

  1. Разница между распознаванием лиц и распознаванием лиц.
  2. Как работает распознавание эмоций?
  3. Распознавание эмоций лица с помощью CNN.
  4. Распознавание эмоций лица с использованием трансферного обучения.
  5. Визуализация фильтров и карт функций.

Разница между распознаванием лиц и распознаванием лиц:

Сначала давайте начнем с обнаружения и распознавания:

  • Распознавание лиц. Обнаружение в целом означает, что по изображению, которое нам нужно найти лица на изображении, слово «найти» означает локализацию каждого лица и окружение его рамкой с указанием его положение на изображении. Здесь мы говорим об одном классе, который является изображением, если существует более одного класса, например, вы хотите обнаруживать автомобили, пешеходов, светофоры ... здесь мы говорим о обнаружении объектов.

  • Распознавание лиц. Распознавание немного сложнее, чем обнаружение, потому что теперь мы должны не только распознавать лицо, но и распознавать его. Например, у вас есть изображение вас и ваших друзей, теперь нам нужно определить лицо каждого человека на изображении и распознать его, что означает напечатать его имя.

Как работает распознавание эмоций?

Теперь, чтобы распознавать эмоции, нам нужно сначала обнаружить лица, как мы обсуждали ранее, а затем, вместо того, чтобы узнавать имя или личность человека, мы хотим узнать его эмоции. Есть два подхода к решению этой проблемы:

  • Сквозной подход глубокого обучения: обучение нейронной сети для классификации изображений напрямую на основе эмоций. Этот NN научится распознавать лица и одновременно узнавать эмоции. На самом деле это очень сложный подход, потому что для правильного обучения требуется огромное количество данных, но он избавляет нас от необходимости сначала определять лица, а затем классифицировать эмоции.
  • Подход с разделением: мы подразделяем эти задачи на две задачи: обнаружение лиц с использованием предопределенных детекторов лиц, таких как каскады Хаара из библиотеки OpenCV в Python или предварительно обученного алгоритма YOLO, а затем обучение CNN на этих небольших изображениях лиц крупным планом. для выявления эмоций.

Мы будем использовать второй подход, потому что у нас нет большого количества данных и потому что проще использовать предустановленный детектор лиц, плюс в среднем второй подход более точен, чем первый.

Распознавание эмоций лица с помощью CNN:

Сверточные нейронные сети или сокращенно CNN, безусловно, имеют большое влияние на глубокое обучение и особенно на компьютерное зрение, вот как они работают и что делает их такими эффективными:

CNN состоят в основном из сверточных слоев среди других типов слоев, эти волшебные слои применяют фильтры (или ядра) к нашему входному изображению, чтобы обнаруживать мелкие особенности по функциям, которые мы означают края, оттенки, текстуры, и по мере того, как мы углубляемся в сеть, эти функции становятся все более и более важными, например, обнаружение носа, рта, глаз (для распознавания эмоций)

Данные, которые мы собираемся использовать, - это набор данных FER13, который содержит 35 887 изображений с разрешением 48 x 48 с 7 классами для прогнозирования: счастливые, злые, отталкивающие, напуганные, грустные, удивленные и нейтральные, но сначала давайте взглянем на необходимые библиотеки:

Мы будем использовать Keras, библиотеку в рамках TensorFlow Deep Learning. Keras значительно упрощает создание DNN, поскольку он предоставляет встроенные типы слоев и множество полезных инструментов. Затем мы загрузим данные и рассмотрим их.

Вот образец счастливых изображений:

Это наша первая модель и ее характеристики:

Теперь компилируем модель и обучаем ее:

64% Точность неплохая, но давайте попробуем улучшить ее, добавив данные.

Чтобы иметь возможность узнать правильные веса, NN требуется много данных, а иногда данных, которые у нас есть, просто недостаточно, одним из решений этого является расширение данных.

  • Увеличение данных: это метод, который позволяет нам создавать дополнительные данные из наших уже существующих данных. Это делается путем сбора данных и их небольшого изменения, чтобы помочь модели стать лучше. Например, мы можем повернуть изображение, обрезать его, перевернуть вправо или влево, вверх или вниз, увеличить или уменьшить масштаб, изменить яркость. Для аудиоданных мы можем добавить шум или добавить низкие или высокие частоты…

Вот как происходит увеличение данных с помощью Keras:

Далее мы обучаем модель и оцениваем ее устойчивость:

Точность модели теперь составляет 68%, но, похоже, она не улучшается по сравнению с обучением, модель, похоже, превышает данные обучения.

Распознавание эмоций лица с помощью трансферного обучения:

Переносное обучение - это применение знаний из одной области в другую, мы, люди, действительно хороши в переносе обучения, например, если мы чему-то научимся, мы можем легко передать эти знания и применить их в другом месте. Теперь мы хотим применить то же самое к нейронным сетям, мы можем взять веса из уже предварительно обученных моделей на огромных наборах данных и настроить их для выполнения нашей задачи.

Это работает, потому что эти предварительно обученные веса могут обнаруживать функции, которые очень полезны для нашей задачи, особенно когда данных не так много. Для этого вы можете использовать такие модели, как MobileNet, VGG, Inception, ResNet, EfficientNet, все эти модели обучаются на наборе данных ImageNet, который представляет собой очень огромный набор данных. Мы не будем обсуждать их архитектуру, но я настоятельно рекомендую вам проверить их исследовательские работы, чтобы получить четкое и полное представление.

MobileNet достигает максимальной точности 63% на тестовом наборе, что не является улучшением, но оно того стоило. Дополнительные эксперименты с гиперпараметрами или различными предварительно обученными моделями могут улучшить результаты.

Визуализация фильтров и карт фильтров:

Интересно вручную настроить веса фильтров, обученных в нашей модели, вот некоторые из них:

Теперь давайте визуализируем карты функций для этого изображения:

Вот код для этого:

Вот как выглядит результат сверточных слоев, если мы углубимся слева направо:

Наконец, с помощью OpenCV HaarCascades мы можем получить реальное признание эмоций, после чего вы сможете развернуть все это в мобильном приложении:

Заключительные примечания: Еще многое предстоит сделать в этом проекте, например, мы можем получить больше данных или попробовать модели LSTM + CNN, а также есть исследовательские работы, которые решают эту задачу, поэтому мы можем проверить их и попробовать реализовать их. Чтобы получить доступ к полному исходному коду, вы можете проверить мой GitHub.

Этот проект был реализован с помощью Data-CoLab: неправительственная организация, единственная цель которой - развитие культуры искусственного интеллекта в Тунисе, не забудьте проверить их на:

Facebook: https://www.facebook.com/profile.php?id=636571533510049

Сайт: http://data-co-lab.com

Реализовано: Азизом Белавейдом, Мехди Мабруки и Амирой Дриди.

Особая благодарность: Лилии Эннури