Это хранилище метода, представленного в статье «Языковое моделирование для обнаружения звуковых событий с принуждением учителя и запланированным отбором», К. Дросссос, С. Гариб, П., Магрон и Т. Виртанен.
Наша статья представлена на обнаружение и классификацию акустических сцен и событий (DSACE) Семинар 2019. Вы можете найти онлайн -версию нашей статьи по адресу arxiv: https://arxiv.org/abs/1907.08506
Если вы используете наш метод, пожалуйста, укажите нашу статью.
Вы можете получить версию кода, используемого в статье
Обнаружение звукового события (SED) - это задача определения действий звуковых событий из коротких представлений аудио. Например, учитывая вектор аудио, который извлекается в течение 0,04 секунды, метод SED должен определить действия различных звуковых событий в этом векторе. Обычно SED применяется на последовательности коротких векторов аудио -функций, и идентификация действий звуковых событий выполняется для каждого входного вектора. То есть в качестве ввода дается матрица, причем T и F является количеством векторов и функций функций, соответственно, вывод - это матрица, которая содержит прогнозы для каждого из классов C на каждом векторе t -признаков.
В реальных записях различные звуковые события, вероятно, имеют временные структуры внутри и между событиями . Например, событие «шаги» может быть повторено с паузами между (внутри-событием). С другой стороны, «автомобильный рог», вероятно, будет следовать или предшествовать звуковому событию «автомобиль проезжает мимо» (структура между событиями). Такие временные структуры используются и используются в других задачах машинного обучения, например, в машинном переводе, подписании изображения и распознавании речи. В этих задачах разработанный метод также изучает модель временных ассоциаций целевых классов. Эти ассоциации обычно называются языковой моделью.
Методы SED могут извлечь выгоду из языковой модели. Метод в этом репозитории именно об этом. Метод использования языковой модели для SED.
Чтобы воспользоваться вышеупомянутыми временными структурами, мы используем технику , принуждающую учителя [1]. Учительное принуждение - это кондиционирование вклада в RNN с действиями звуковых событий на предыдущем временном шаге. То есть,
Где вывод RNN на временных шагах T , является входом в RNN (из предыдущего слоя) и при временном шаге T , и является действиями звуковых событий на то время T-1 .
Если как используются значения истины основного, то RNN не будет устойчивым к случаям, когда это не является правильной классовой деятельностью. Например, в процессе тестирования, где нет основных значений истины.
Если используются прогнозы классификатора, то RNN будет трудно изучить какие -либо зависимости звуковых событий, потому что во время обучения (и особенно в начале процесса обучения) он будет питаться неверными занятиями в классе.
Чтобы справиться с обоим вышеперечисленным, мы используем запланированную технику выборки [2]. То есть в начале обучения мы используем в качестве основных ценностей истины. По мере того, как обучение продолжается и классификатор учится прогнозировать все более и более правильные занятия в классе, мы постепенно используем прогнозы классификатора AS.
[1] RJ Williams и D. Zipser, «Алгоритм обучения для постоянного запуска полностью повторяющихся нейронных сетей», Neural Recuration, Vol. 1, нет. 2, с. 270–280, июнь 1989 г.
[2] С. Бенгио, О. Виньялс, Н. Джайли и Н. Шейзер, «Запланированная выборка для прогнозирования последовательностей с рецидивирующими нейронными сетями», в Слушаниях 28 -й Международной конференции по системам обработки нейронной информации, том 1, Ser. Nips'15. Кембридж, Массачусетс, США: MIT Press, 2015, с. 1171–1179. Онлайн Доступно: http://dl.acm.org/citation.cfm?id=2969239.2969370
Чтобы начать использовать наш проект, вы должны:
Используйте Python 3.6. Код в этом репозитории проверяется и работает с Python 3.6. Вероятно, использование других версий Python 3.x будет в порядке, но, пожалуйста, имейте в виду, что этот код предназначен для Python 3.6.
Установите зависимости, используя либо файлы pip (pip_Requirements.txt) или conda (conda_requirements.txt). Перейдите с вашим терминалом внутри корневого каталога проекта (то есть каталог, который создается после клонирования этого репозитория), а затем выпустите правильную команду на терминале:
pip : $ pip install -r requirements/pip_requirements.txtconda , вы можете выпустить команду $ conda install --yes --file requirements/conda_requirements.txtЗагрузите аудиоданные. Вы можете скачать три набора данных аудио с:
Набор данных Tut-SED Synthetic 2016 доступен отсюда.
Загрузите аудиофайлы (т.е. Audio 1/5, Audio 2/5, ..., Audio 5/5), выполните извлечение вашей функции и следуйте инструкциям в разделе «Настройка данных».
События Tut Sound 2016 доступны отсюда.
Загрузите аудиофайлы, выполните извлечение своей функции и следуйте инструкциям в разделе «Настройка данных».
Tut Sound Event 2017 доступно отсюда
Загрузите аудиофайлы, выполните извлечение своей функции и следуйте инструкциям в разделе «Настройка данных».
Теперь проект настроен, и вы можете использовать его с помощью данных, которые вы получили с шага 3.
Вы можете использовать SEDLM напрямую для ваших данных, или вы можете проверить код и принять SEDLM для вашей задачи SED или повторить процесс, описанный в нашей статье.
Код SEDLM основан на Pytorch, версия 1.1.0.
В текущей форме различные переменные кода указаны в файле YAML, удерживая все настройки для кода. Все файлы YAML находятся в каталоге settings , а функция загрузки YAML ищет поиск в каталоге settings для файлов YAML. В целом, вы можете просто изменить значения настройки в файле YAML, а затем запустить код.
Данные должны быть в каталоге data .
Если вы хотите использовать существующие погрузчики данных, то вы должны организовать ваши данные определенным образом. Прежде всего, вы должны иметь разные файлы для входных функций и целевых значений. Например, input_features.npy и target_values.npy . Затем, в зависимости от набора данных, который вы будете использовать, вы должны иметь свои данные в разных каталогах. То есть:
Tutsed Synthetic 2016.
Данные должны быть в каталоге, называемом synthetic , в каталоге data . То есть data/synthetic . Затем файлы для данных обучения, проверки и тестирования должны быть в другом каталоге. То есть:
data/synthetic/trainingdata/synthetic/validationdata/synthetic/testingВы должны иметь разные файлы Numpy для функций ввода и целевых значений. Вы можете указать имя каждого из входных или целевых файлов в файле настроек YAML. Например, файлы обучения должны быть похожи на:
data/synthetic/training/input_features.npydata/synthetic/training/target_values.npyКод будет загружать файлы Numpy и использовать их для обучения метода SEDLM. Вы можете убедиться, что входные функции и целевые значения правильно упорядочены. То есть первый элемент в входных функциях соответствует первому элементу в целевых значениях.
Tut Real Life 2016
Данные должны быть в каталоге под названием real_life_2016 , в каталоге data . То есть data/real_life_2016 . Затем файлы для каждой из складок должны быть в другом каталоге. То есть:
data/real_life_2016/fold_1data/real_life_2016/fold_2data/real_life_2016/fold_3data/real_life_2016/fold_4Вы должны иметь разные маринованные файлы для входных функций и целевых значений, а также для обучения и тестирования каждого сгиба. Поскольку существует несколько файлов на сцену и за раз, вы не можете иметь все функции в массиве Numpy. Таким образом, вы должны иметь все данные в списке и сериализовать (т.е. хранить на диск), которые перечисляют, используя пакет Pickle. Кроме того, есть файлы для обучения и тестирования в каждом складе.
Для удобства SEDLM автоматически использует предварительную фикса для имен файлов. То есть он автоматически добавляет «поезд» и «тест» в указанное имя файла.
Вы можете указать имя каждого из входных или целевых файлов в файле настроек YAML. Например, файлы должны быть похожи на:
input_features.ptarget_values.pЗатем код SEDLM будет искать соответствующие файлы и для каждого сгиба. Например, для скидки 1 и домашней сцены будут запрошены следующие файлы:
data/real_life_2016/home/fold_1/train_input_features.pdata/real_life_2016/home/fold_1/train_target_values.pdata/real_life_2016/home/fold_1/test_input_features.pdata/real_life_2016/home/fold_1/test_target_values.pКод загрузит файлы маринованного маринованного состава и будет использовать их для обучения метода SEDLM. Вы можете убедиться, что входные функции и целевые значения правильно упорядочены. То есть первый элемент в входных функциях соответствует первому элементу в целевых значениях.
Tut Real Life 2017
Данные должны быть в каталоге под названием real_life_2017 , в каталоге data . То есть data/real_life_2017 . Затем файлы для каждой из складок должны быть в другом каталоге. То есть:
data/real_life_2017/fold_1data/real_life_2017/fold_2data/real_life_2017/fold_3data/real_life_2017/fold_4Вы должны иметь разные маринованные файлы для входных функций и целевых значений, а также для обучения и тестирования каждого сгиба. Поскольку существует несколько файлов в сфере, вы не можете иметь все функции в массиве Numpy. Таким образом, вы должны иметь все данные в списке и сериализовать (т.е. хранить на диск), которые перечисляют, используя пакет Pickle. Кроме того, есть файлы для обучения и тестирования в каждом складе.
Для удобства SEDLM автоматически использует предварительную фикса для имен файлов. То есть он автоматически добавляет «поезд» и «тест» в указанное имя файла.
Вы можете указать имя каждого из входных или целевых файлов в файле настроек YAML. Например, файлы должны быть похожи на:
input_features.ptarget_values.pЗатем код SEDLM будет искать соответствующие файлы и для каждого сгиба. Например, для сгиба 1 будут запрошены следующие файлы:
data/real_life_2017/fold_1/train_input_features.pdata/real_life_2017/fold_1/train_target_values.pdata/real_life_2017/fold_1/test_input_features.pdata/real_life_2017/fold_1/test_target_values.pКод загрузит файлы маринованного маринованного состава и будет использовать их для обучения метода SEDLM. Вы можете убедиться, что входные функции и целевые значения правильно упорядочены. То есть первый элемент в входных функциях соответствует первому элементу в целевых значениях.
Гиперпараметры можно настроить из файлов настройки YAML. Доступны гиперпараметры для настройки:
Вы можете запустить систему, используя сценарий Bash. Примером такого сценария являются файлы:
example_bash_script_baseline.sh , которая запускает базовую конфигурацию для SEDLMexample_bash_script_tf.sh , который запускает SEDLM с набором данных Tut Real Life 2017.