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

В эпизоде ​​под названием «Автоматизация обнаружения эмоций» из культового ситкома «Теория большого взрыва» Ховарду удается достать устройство, которое поможет Шелдону (у которого есть проблемы с чтением эмоциональных сигналов от других) в понимании чувств окружающих его людей. направляя на них устройство…

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

Эта статья в основном представляет собой краткое, но полное руководство, в котором объясняется, как обучить нейронную сеть предсказывать эмоции, которые испытывает человек. Процесс будет разделен на 3 этапа:

  1. Понимание данных
  2. Предварительная обработка данных
  3. Обучение нейронной сети

Нам потребуются следующие библиотеки:
1. fastai
2. numpy
3. matplotlib
4. librosa
5. pytorch

Вам также потребуется среда ноутбука jupyter.

Понимание данных

Мы будем использовать два набора данных вместе для обучения нейронной сети:

Набор данных RAVDESS

Набор данных RAVDESS - это коллекция аудио- и видеоклипов 24 актеров, говорящих на одних и тех же двух строках с 8 различными эмоциями (нейтральными, спокойными, счастливыми, грустными, злыми, напуганными, отвращенными, удивленными). В этом уроке мы будем использовать только аудиоклипы. Вы можете получить набор данных здесь.

Набор данных TESS

Набор данных TESS - это набор аудиоклипов двух женщин, выражающих 7 различных эмоций (гнев, отвращение, страх, счастье, приятное удивление, грусть и нейтральность). Вы можете получить набор данных здесь.

Мы конвертируем звуковые клипы в графический формат, а затем объединим два набора данных в один, который затем разделим на 8 разных папок, по одной для каждой эмоции, упомянутой в разделе набора данных RAVDESS (мы объединим удивленный и приятный сюрприз в один компонент. ).

Предварительная обработка данных

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

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

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

Обучение нейронной сети

Теперь мы приступим к обучению нейронной сети распознаванию эмоций, глядя на спектрограммы, сгенерированные из звуковых клипов. Мы будем обучать нейронную сеть с помощью библиотеки fastai. Мы будем использовать предварительно обученную CNN (resnet34), а затем обучим ее на наших данных.
Мы будем делать следующее:

1. Создание загрузчика данных с соответствующим дополнением данных для подачи в нейронную сеть. Размер каждого изображения - 432 на 288 пикселей.

2. Мы будем использовать нейронную сеть (resnet34), предварительно обученную на наборе данных imagenet. Затем мы уменьшим наши изображения до размера 144 на 144 путем соответствующей обрезки, а затем обучим нашу нейронную сеть на этом наборе данных.

3. Затем мы снова обучим нейронную сеть на изображениях размером 288 на 288.

4. Затем мы проанализируем производительность нейронной сети на проверочном наборе.

5. Вуаля! На этом процесс обучения будет завершен, и у вас появится нейронная сеть, которая может определять эмоции по звуковым клипам.

Приступим к тренировкам!

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

В предыдущем разделе мы использовали предварительно обученную нейронную сеть, а затем обучили ее на изображениях размером 144 на 144, чтобы идентифицировать эмоции. По окончании обучения нам удалось получить точность 80,1%.
Итак, теперь у нас есть нейронная сеть, которая довольно хорошо распознает эмоции, глядя на изображения размером 144 на 144. Итак, теперь мы воспользуемся той же нейронной сетью и обучим ее определять эмоции, глядя на изображения размером 288. на 288 (что уже должно быть неплохо).

В предыдущем разделе мы обучили нейронную сеть (которую мы обучили на изображениях размером 144 на 144) на изображениях размером 288 на 288.
И вуаля! Теперь он может идентифицировать эмоции из звуковых клипов независимо от содержания речи с точностью 83,1% (на проверочном наборе).
В следующем разделе мы проанализируем результаты нейронной сети с помощью матрицы неточностей.

Вышеупомянутый раздел содержит матрицу путаницы для нашего набора данных.

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

Спасибо, что прочитали эту статью, и надеемся, что она вам понравилась!

Цитаты

RAVDESS:
Livingstone SR, Russo FA (2018) Аудиовизуальная база данных эмоциональной речи и песни Ryerson (RAVDESS): динамический, мультимодальный набор выражений лица и голоса на североамериканском английском. . PLoS ONE 13 (5): e0196391. Https://doi.org/10.1371/journal.pone.0196391.

Набор эмоциональной речи Торонто (TESS):
Пичора-Фуллер, М. Кэтлин; Дюпюи, Кейт, 2020, Набор эмоциональной речи Торонто (TESS), https://doi.org/10.5683/SP2/E8H2MF, Scholars Portal Dataverse, V1