- Распознавание эмоций с помощью сверточной нейронной сети
- Главные препятствия
- Описание проекта
- Описание данных
- Извлечение признаков
- Архитектура модели по умолчанию
- Мой эксперимент
- Разведочный анализ данных
- Наблюдение
- Повторение эксперимента
- Тест производительности
- Производительность новой модели
- Увеличение (аугментация)
- Мужчины, 5 классов
- Объединяем несколько методов
- Тестируем аугментацию на мужчинах
- Мужчины, 2 класса
- Заключение
- Распознавание эмоций речи с помощью сверточной нейронной сети
- Основные препятствия:
- Описание Проекта:
- Описание данных:
- Общий класс:
- Функция извлечения:
- Архитектура модели по умолчанию:
- Мой эксперимент
- Исследовательский анализ данных:
- Ориентир:
Распознавание эмоций с помощью сверточной нейронной сети
Распознавание эмоций всегда было захватывающей задачей для ученых. В последнее время я работаю над экспериментальным SER-проектом (Speech Emotion Recognition), чтобы понять потенциал этой технологии – для этого я отобрал наиболее популярные репозитории на Github и сделал их основой моего проекта.
Прежде чем мы начнем разбираться в проекте, неплохо будет вспомнить, какие узкие места есть у SER.
Главные препятствия
Описание проекта
Использование сверточной нейронной сети для распознавания эмоций в аудиозаписях. И да, владелец репозитория не ссылался ни на какие источники.
Описание данных
Есть два датасета, которые использовались в репозиториях RAVDESS и SAVEE, я только лишь адаптировал RAVDESS в своей модели. В контекста RAVDESS есть два типа данных: речь (speech) и песня (song).
Датасет RAVDESS (The Ryerson Audio-Visual Database of Emotional Speech and Song):
- 12 актеров и 12 актрис записали свою речь и песни в своем исполнении;
- у актера #18 нет записанных песен;
- эмоции Disgust (отвращение), Neutral (нейтральная) и Surprises (удивленние) отсутствуют в «песенных» данных.
Разбивка по эмоциям:
Диаграмма распределения эмоций:
Извлечение признаков
Когда мы работаем с задачами распознавания речи, мел-кепстральные коэффициенты (MFCCs) – это передовая технология, несмотря на то, что она появилась в 80-х.
Цитата из туториала по MFCC:
Эта форма определяет, каков звук на выходе. Если мы можем точно обозначить форму, она даст нам точное представление прозвучавшей фонемы. Форма речевого тракта проявляет себя в огибающей короткого спектра, и работы MFCC – точно отобразить эту огибающую.
Мы используем MFCC как входной признак. Если вам интересно разобраться подробнее, что такое MFCC, то этот туториал – для вас. Загрузку данных и их конвертацию в формат MFCC можно легко сделать с помощью Python-пакета librosa.
Архитектура модели по умолчанию
Автор разработал CNN-модель с помощь пакет Keras, создав 7 слоев – шесть Con1D слоев и один слой плотности (Dense).
Автор закомментировал слои 4 и 5 в последнем релизе (18 сентября 2018 года) и итоговый размер файла этой модели не подходит под предоставленную сеть, поэтому я не смогу добиться такого же результат по точности – 72%.
Модель просто натренирована с параметрами batch_size=16 и epochs=700 , без какого-либо графика обучения и пр.
Здесь categorical_crossentropy это функция потерь, а мера оценки – точность.
Мой эксперимент
Разведочный анализ данных
В датасете RAVDESS каждый актер проявляет 8 эмоций, проговаривая и пропевая 2 предложения по 2 раза каждое. В итоге с каждого актера получается 4 примера каждой эмоции за исключением вышеупомянутых нейтральной эмоции, отвращения и удивления. Каждое аудио длится примерно 4 секунды, в первой и последней секундах чаще всего тишина.
Наблюдение
После того как я выбрал датасет из 1 актера и 1 актрисы, а затем прослушал все их записи, я понял, что мужчины и женщины выражают свои эмоции по-разному. Например:
- мужская злость (Angry) просто громче;
- мужские радость (Happy) и расстройство (Sad) – особенность в смеющемся и плачущем тонах во время «тишины»;
- женские радость (Happy), злость (Angry) и расстройство (Sad) громче;
- женское отвращение (Disgust) содержит в себе звук рвоты.
Повторение эксперимента
Автор убрал классы neutral, disgust и surprised, чтобы сделать 10-классовое распознавание датасета RAVDESS. Пытаясь повторить опыт автора, я получил такой результат:
Однако я выяснил, что имеет место утечка данных, когда датасет для валидации идентичен тестовому датасету. Поэтому я повторил разделение данных, изолировав датасеты двух актеров и двух актрис, чтобы они не были видны во время теста:
- актеры с 1 по 20 используются для сетов Train / Valid в соотношении 8:2;
- актеры с 21 по 24 изолированы от тестов;
- параметры Train Set: (1248, 216, 1);
- параметры Valid Set: (312, 216, 1);
- параметры Test Set: (320, 216, 1) — (изолировано).
Я заново обучил модель и вот результат:
Тест производительности
Из графика Train Valid Gross видно, что не происходит схождение для выбранных 10 классов. Поэтому я решил понизить сложность модели и оставить только мужские эмоции. Я изолировал двух актеров в рамках test set, а остальных поместил в train/valid set, соотношение 8:2. Это гарантирует, что в датасете не будет дисбаланса. Затем я тренировал мужские и женские данные отдельно, чтобы провести тест.
- Train Set – 640 семплов от актеров 1-10;
- Valid Set – 160 семплов от актеров 1-10;
- Test Set – 160 семплов от актеров 11-12.
Опорная линия: мужчины
- Train Set – 608 семплов от актрис 1-10;
- Valid Set – 152 семпла от актрис 1-10;
- Test Set – 160 семплов от актрис 11-12.
Опорная линия: женщины
Как можно заметить, матрицы ошибок отличаются.
Мужчины: злость (Angry) и радость (Happy) – основные предугаданные классы в модели, но они не похожи.
Женщины: расстройство (Sad) и радость (Happy) – основыне предугаданные классы в модели; злость (Angry) и радость (Happy) легко спутать.
Вспоминая наблюдения из Разведочного анализа данных, я подозреваю, что женские злость (Angry) и радость (Happy) похожи до степени смешения, потому что их способ выражения заключается просто в повышении голоса.
Вдобавок ко всему, мне интересно, что если я еще больше упрощу модель, остави только классы Positive, Neutral и Negative. Или только Positive и Negative. Короче, я сгруппировал эмоции в 2 и 3 класса соответственно.
- Позитивные: радость (Happy), спокойствие (Calm);
- Негативные: злость (Angry), страх (fearful), расстройство (sad).
3 класса:
- Позитивные: радость (Happy);
- Нейтральные: спокойствие (Calm), нейтральная (Neutral);
- Негативные: злость (Angry), страх (fearful), расстройство (sad).
До начала эксперимента я настроил архитектуру модели с помощью мужских данных, сделав 5-классовое распознавание.
Я добавил 2 слоя Conv1D, один слой MaxPooling1D и 2 слоя BarchNormalization; также я изменил значение отсева на 0.25. Наконец, я изменил оптимизатор на SGD со скоростью обучения 0.0001.
Для тренировки модели я применил уменьшение «плато обучения» и сохранил только лучшую модель с минимальным значением val_loss . И вот каковы результаты для разных целевых классов.
Производительность новой модели
Мужчины, 5 классов
Мужчины, 2 класса
Мужчины, 3 класса
Увеличение (аугментация)
Когда я усилил архитектуру модели, оптимизатор и скорость обучения, выяснилось, что модель по-прежнему не сходится в режиме тренировки. Я предположил, что это проблема количества данных, так как у нас имеется только 800 семплов. Это привело меня к методам увеличения аудио, в итоге я увеличил датасеты ровно вдвое. Давайт взглянем на эти методы.
Мужчины, 5 классов
Динамическое увеличение значений
Настройка высоты звука
Добавление белого шума
Заметно, что аугментация сильно повышает точность, до 70+% в общем случае. Особенно в случае с добавлением белого, которое повышает точность до 87,19% – однако тестовая точность и F1-мера падают более чем на 5%. И тут мне ко пришла идея комбинировать несколько методов аугментации для лучшего результата.
Объединяем несколько методов
Белый шум + смещение
Тестируем аугментацию на мужчинах
Мужчины, 2 класса
Белый шум + смещение
Для всех семплов
Белый шум + смещение
Только для позитивных семплов, так как 2-классовый сет дисбалансированный (в сторону негативных семплов).
Настройка высоты звука + белый шум
Для всех семплов
Настройка высоты звука + белый шум
Только для позитивных семплов
Заключение
В конце концов, я смог поэкспериментировать только с мужским датасетом. Я заново разделил данные так, чтобы избежать дисбаланса и, как следствие, утечки данных. Я настроил модель на эксперименты с мужскими голосами, так как я хотел максимально упростить модель для начала. Также я провел тесты, используя разные методы аугментации; добавление белого шума и смещение хорошо зарекомендовали себя на дисбалансированных данных.
Источник
Распознавание эмоций речи с помощью сверточной нейронной сети
Дата публикации Jun 1, 2019
Распознавание человеческих эмоций всегда было увлекательной задачей для исследователей данных. В последнее время я работаю над экспериментальным проектом распознавания речи (SER), чтобы изучить его потенциал. Я выбрал самый отмеченный репозиторий SER изGitHubбыть основой моего проекта.
Прежде чем мы пройдемся по проекту, было бы хорошо узнать главное узкое место распознавания речи.
Основные препятствия:
- Эмоции субъективны, люди будут интерпретировать это по-разному. Трудно определить понятие эмоций.
- Аннотирование аудио записи является сложной задачей. Должны ли мы обозначить одно слово, предложение или целый разговор? Сколько эмоций мы должны определить, чтобы распознать?
- Сбор данных является сложным. Есть много аудиоданных, которые можно получить из фильмов или новостей. Тем не менее, они оба предвзяты, поскольку новостные репортажи должны быть нейтральными, а эмоции актеров подражать Трудно найти нейтральную аудиозапись без предвзятости.
- Маркировка данных требует больших человеческих и временных затрат. В отличие от рисования ограничительной рамки на изображении, он требует, чтобы обученный персонал прослушал всю аудиозапись, проанализировал ее и дал аннотацию. Результат аннотации должен оцениваться несколькими лицами из-за его субъективности.
Описание Проекта:
Использование Convolutional Neural Network для распознавания эмоций при записи звука. И владелец хранилища не предоставляет никаких бумажных ссылок.
Описание данных:
Это два набора данных, которые изначально использовались в репозитории RAVDESS и SAVEE, и я использовал RAVDESS только в моей модели. В RAVDESS есть два типа данных: речь и песня.
- 12 актеров и 12 актрис записали речь и версию песни соответственно.
- Актер № 18 не имеет данных о версии песни.
- эмоция Disgust , Neutral а также Surprised не включены в данные о версии песни.
Общий класс:
Вот диаграмма распределения классов эмоций.
Функция извлечения:
Когда мы выполняем задачи распознавания речи, MFCC — это самая современная функция, так как она была изобретена в 1980-х годах.
Эта форма определяет, какой звук выходит. Если мы можем точно определить форму, это должно дать нам точное представление офонемапроизводятся. Форма голосового тракта проявляется в огибающей кратковременного спектра мощности, и задача MFCC состоит в том, чтобы точно представить эту огибающую. — Отмечено от:Учебник MFCC
Мы будем использовать MFCC, чтобы быть нашей функцией ввода. Если вы хотите глубокое пониманиекоэффициенты MFCCвот отличныйруководстводля тебя.Загрузка аудиоданных и преобразование их в формат MFCC может быть легко сделано с помощью пакета Python librosa ,
Архитектура модели по умолчанию:
Автор разработал модель CNN с Keras и построил из 7 слоев — 6 слоев Conv1D, за которыми следует плотный слой.
Автор прокомментировал слой № 4 и № 5 в последней записной книжке (обновление от 18 сентября 2018 г.), и файл весов модели не соответствует предоставленной сети, поэтому я не могу загрузить предоставленный вес и воспроизвести его результатТочность тестирования 72%.
Модель только обучалась с batch_size=16 700 эпох без расписания обучения и т. д.
Его функция потери categorical_crossentropy и метрика оценки — точность.
Мой эксперимент
Исследовательский анализ данных:
В наборе данных RADVESS каждый актер должен выполнить 8 эмоций, произнося и напевая два предложения и два раза для каждого. В результате каждый актер будет вызывать 4 образца для каждой эмоции, кроме нейтральной, отвращения и удивления, поскольку для этих эмоций нет данных о пении. Каждая звуковая волна длится около 4 секунд, первая и последняя секунды, скорее всего, отключены.
Стандартные предложения:
1. Дети разговаривают у двери.
2. Собаки сидят у двери.
Наблюдение:
После того, как я выбрал 1 актера и 1 набор данных актрисы и выслушал их все. Я обнаружил, что мужчины и женщины выражают свои эмоции по-разному. Вот некоторые выводы:
- МалеСердитыйпросто увеличивается в объеме.
- МалеСчастливыйа такжеПечальныйЗначительными чертами были смех и плач в тишине периода в аудио.
- самкиСчастливый,Сердитыйа такжеПечальныйувеличены в объеме.
- самкиОтвращениедобавил бы рвотный звук внутри.
Репликация результата:
Автор исключил класс neutral , disgust а также surprised сделать распознавание 10 классов для набора данных RAVDESS.
Я пытался повторить его результат с помощью предоставленной модели, я могу добиться результата
Однако я обнаружил, что существует проблема утечки данных, когда набор проверки, используемый на этапе обучения, идентичен тестовому набору. Итак, я заново делаю часть разделения данных, выделяя данные двух актеров и двух актрис в тестовый набор, чтобы убедиться, что они не видны на этапе обучения.
- Актер № 1–20 используются для Train / Valid устанавливается с коэффициентом разделения 8: 2.
- Актер № 21–24 изолированы для тестирования использования.
- Форма набора поезда: (1248, 216, 1)
- Допустимая форма набора: (312, 216, 1)
- Форма тестового набора: (320, 216, 1) — (изолированный)
Я заново обучил модель новым настройкам разделения данных, и вот результат:
Ориентир:
Из графика достоверных потерь поезда мы видим, что модель не может даже хорошо сходиться с 10 целевыми классами. Таким образом, я решил уменьшить сложность моей модели, распознавая только мужские эмоции. Я изолировал двух актеров, чтобы быть test set , а остальное будет train/valid set с 8: 2Многослойное разделение в случайном порядкечто гарантирует отсутствие дисбаланса классов в наборе данных. После этого я изучил данные как для мужчин, так и для женщин отдельно, чтобы изучить эталон.
Мужской набор данных
- Поезд Set = 640 образцов от актера 1-10.
- Действительный набор = 160 образцов от актера 1-10.
- Тестовый набор = 160 образцов от актера 11-12.
Мужской базовый уровень
Женский набор данных
- Поезд Set = 608 образцов от актрисы 1-10.
- Действительный набор = 152 образца от актрисы 1-10.
- Тестовый набор = 160 образцов от актрисы 11-12.
Женский базовый уровень
Как видите, матрица смешения мужской и женской моделей различна.
—мужчина: Angry а также Happy являются доминирующими предсказанными классами в мужской модели, но они вряд ли перепутать.
—женский: Sad а также Happy являются доминирующими предсказанными классами в женской модели и Angry а также Happy очень вероятно, чтобы перепутать.
Ссылаясь на форму наблюденияEDAраздел, я подозреваю причину женского пола Angry а также Happy очень вероятно, что перепутать, потому что их метод выражения просто увеличивает громкость речи.
Кроме того, мне интересно, что если я еще больше упросту модель, уменьшив целевой класс до Positive , Neutral а также Negative или даже Positive а также Negative только. Итак, я сгруппировал эмоции в 2 класса и 3 класса.
2 класс:
- Положительный: happy , calm ,
- Отрицательный: angry , fearful , sad ,
3 класс:
- Положительный: happy ,
- Нейтральные: calm , neutral ,
- Отрицательный: angry , fearful , sad ,
(Добавлен нейтральный для 3 класса, чтобы изучить результат.)
Прежде чем приступить к обучающему эксперименту, я настраиваю архитектуру модели с данными для мужчин, выполняя распознавание по 5 классам.
Я добавил 2 слоя Conv1D, 1 слой MaxPooling1D и 2 слоя BarchNormalization, более того, я изменил значение выпадения до 0,25. Наконец, я изменил оптимизатор на SGD со скоростью обучения 0,0001.
Для модельного обучения я принял Reduce Learning On Plateau и сохранить лучшую модель с мин val_loss только. А вот модель производительности различных установок целевого класса.
Источник