Введение в нейронную сеть свертки (CNN) и OpenCV в распознавании эмоций

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

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

НАБОР ДАННЫХ:

Эта модель способна распознавать семь основных эмоций:

  1. Счастливый
  2. Грустный
  3. Злой
  4. Сюрприз
  5. Отвращение
  6. Страх
  7. Нейтральный

Набор данных FER-2013 состоит из 28 709 помеченных изображений в обучающем наборе и 7 178 помеченных изображений в тестовом наборе. Каждое изображение в этом наборе данных помечено как одна из семи эмоций: радость, грусть, злость, страх, удивление, отвращение и нейтральная. Лица были автоматически зарегистрированы таким образом, что лицо находится более или менее по центру и занимает примерно одинаковое количество места на каждом изображении.

В этом блоге мы будем использовать Deep Learning и Computer Vision.

ЧТО ТАКОЕ ГЛУБОКОЕ ОБУЧЕНИЕ:

Машинное обучение (ML) и глубокое обучение являются подмножествами искусственного интеллекта. Глубокое обучение представляет собой следующую эволюцию машинного обучения. В глубоком обучении модель обучается через искусственную нейронную сеть, которая очень похожа на человеческий мозг, и это позволяет модели анализировать данные в структуре, очень похожей на то, что делают люди. Модели глубокого обучения не требуют, чтобы программист вмешивался и говорил, что делать с данными. Он способен самостоятельно учиться на невероятном количестве предоставленных ему данных. Для получения дополнительной информации о глубоком обучении вы можете перейти по этой ссылке.

КОМПЬЮТЕРНОЕ ЗРЕНИЕ:

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

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

ВВЕДЕНИЕ В OpenCV:

В python есть несколько предопределенных пакетов и библиотек как часть Computer Vision, которые могут сделать нашу жизнь довольно простой, и OpenCV — один из них. Это помогает нам разработать систему, которая может обрабатывать изображения и видео в реальном времени с помощью компьютерного зрения. OpenCV (Библиотека компьютерного зрения с открытым исходным кодом) — это библиотека программного обеспечения для компьютерного зрения и машинного обучения с открытым исходным кодом, которую легко импортировать в Python. В модели будем использовать алгоритм HaarCascade. Это подход, основанный на машинном обучении, при котором каскадная функция обучается с использованием большого количества положительных и отрицательных изображений. Затем он используется для обнаружения объектов на других изображениях.

Мы используем Google Colab как часть этого блога. Это бесплатная служба записных книжек Jupyter на основе браузера. Этот сервис подходит для приложений глубокого обучения и машинного обучения. Он не требует дополнительной настройки или установки. Это помогает нам запускать код Python через браузер. Это также позволяет нам делиться этими записными книжками, не загружая их. Вы можете узнать больше, используя эту ссылку.

Теперь, когда концепция ясна, давайте погрузимся в некоторые строки кода, используя Python и вышеупомянутую библиотеку OpenCV:

  1. Разархивируйте заархивированный файл:

2. Импорт пакетов:

3. Инициализация генераторов обучения и тестов:

Keras ImageDataGenerator дополняет изображения в режиме реального времени, пока модель еще обучается. Любое случайное преобразование может быть применено к каждому тренировочному изображению при его передаче в модель. Это не только делает модель надежной, но и экономит служебную память.

Когда мы запустим эту ячейку, общее количество записей на выходе будет добавлением данных обучения и тестирования. В нашей модели мы используем 28 709 изображений в тесте и 7 178 изображений в тестовом наборе.

4. Построение модели сверточной нейронной сети (CNN):

ResNet50, также известная как Residual Networks, представляет собой классическую нейронную сеть, используемую во многих задачах компьютерного зрения. Число 50 в ResNet означает сверточную нейронную сеть с глубиной в 50 слоев. Основная цель этой модели - избежать плохой точности по мере того, как модель становится глубже. ResNet50 — это предварительно обученная модель, поверх которой мы собираемся обучать нашу собственную модель.

Модель ResNet предлагается для решения проблемы уменьшения градиента. Основная идея состоит в том, чтобы пропустить соединения и передать остаток на следующий уровень, чтобы модель продолжала обучаться. Используя эту модель ResNet поверх нашей модели CNN, наши модели могут становиться все глубже и глубже.

Для получения дополнительной информации перейдите по этой ссылке.

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

  1. Используются различные функции активации, такие как Rectified Linear Unit (ReLU) и функции Softmax. Функции активации используются для получения результирующих значений в диапазоне от 0 до 1 или от -1 до 1 в зависимости от функции. Существует два типа функций активации: линейные и нелинейные. Для получения дополнительной информации посетите здесь.
  2. Объединение слоев используется для уменьшения количества параметров, когда изображения слишком велики. Понижающая выборка уменьшает размерность каждой карты, но сохраняет важные функции.
  3. Максимальное объединение берет самый большой элемент из исправленной карты объектов и уменьшает его выборку.
  4. Dropout — это простой и мощный метод регуляризации для нейронных сетей и моделей глубокого обучения. Хорошее значение для отсева в скрытом слое составляет от 0,5 до 0,8. Входные слои используют большую скорость отсева, например 0,8.
  5. Плотный — единственный фактический сетевой слой в модели. Он передает все выходные данные предыдущего слоя всем своим нейронам, причем каждый нейрон обеспечивает один выходной сигнал для следующего слоя. Dense(1024) имеет 1024 нейрона.

5. Компиляция и обучение модели:

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

Оптимизатор — это один из двух аргументов, необходимых для компиляции модели Keras.

В этой модели мы используем оптимизатор Adam.

эпох, используемых в модели, равно 100.

6. Сохранение модели:

7. Графическое представление:

Все семь эмоций, которые мы рассматриваем, представлены в графическом виде, с осью Y в процентах и ​​осью X в виде эмоций (грусть, радость, нейтральность, удивление, страх, гнев и отвращение).

8. Результат:

ЗАКЛЮЧЕНИЕ:

В этом блоге я попытался предоставить краткую информацию о том, как работает распознавание эмоций с использованием глубокого обучения. Мы обучили нашу модель сверточной нейронной сети поверх предварительно обученных данных (ResNet50), а также использовали компьютерное зрение как часть этой модели. Haarcascade — это пакет, используемый OpenCV для обнаружения объектов на других изображениях.

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

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

Надеюсь, вам понравился блог и вы нашли его информативным!

ССЫЛКИ:

https://realpython.com/face-detection-in-python-using-a-webcam/

https://github.com/komalck/FACIAL-EMOTION-RECOGNITION/blob/master/Facial_emotion_recognition.ipynb

https://towardsdatascience.com/building-a-convolutional-neural-network-cnn-in-keras-329fbbadc5f5