Обнаружение уровня с помощью нейронных сетей

Я пытаюсь использовать ANN для определения высоты музыкальных нот. Сеть представляет собой простой двухслойный MLP, входы которого в основном представляют собой DFT (усредненные и логарифмически распределенные), а 12 выходов соответствуют 12 нотам конкретной октавы.

Сеть обучается несколькими образцами из тех 12 заметок, которые играют какой-то инструмент (по одной заметке за раз), и несколько примеров "молчания".

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

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

Проблема заключается в том, что я не совсем понимаю, почему она уже работает. Различные примечания (или их ДПФ) - это в основном разные точки в пространстве, для которых сеть обучается. Поэтому я понимаю, почему он распознает похожие звуки (близлежащие точки), но не то, как он "завершает" вывод для комбинации заметок (которые образуют отдаленную точку от каждого из примеров обучения). Точно так же сеть И, которая обучается над (0,0) (0,1) (1,0) = (0), не должна "заключать", что (1,1) = (1).

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

Любые указатели? (извините за длину, кстати:).

Ответ 1

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

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

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

Ответ 2

Anssi Klapuri - уважаемый аудио исследователь, который опубликовал метод определения высоты тона при полифонических записях с использованием Neural Networks.

Возможно, вы захотите сравнить метод Клапури с вашим. Он полностью описан в его магистерской диссертации "Методы обработки сигналов для автоматической транскрипции музыки". Вы можете найти его много документов в Интернете или купить свою книгу, которая объясняет его алгоритм и результаты тестов. Его магистерский тезис связан ниже.

https://www.cs.tut.fi/sgn/arg/klap/phd/klap_phd.pdf

Обнаружение высоты над полифонической записью является очень сложной темой и содержит много противоречий - будьте готовы много читать. Ниже приведена ссылка на другой подход к обнаружению тона в полифонических записях, который я разработал для бесплатного приложения под названием PitchScope Player. Мой исходный код на С++ доступен на GitHub.com и указан в ссылке ниже. Бесплатная исполняемая версия PitchScope Player также доступна в Интернете и работает в Windows.

Обнаружение тангажа в реальном времени

Ответ 3

Я экспериментировал с эволюцией CTRNN (непрерывной повторяющейся нейронной сети) при обнаружении разницы между двумя синусоидальными волнами. У меня был умеренный успех, но у меня не было времени следить за банком этих нейронов (т.е. В полосах, подобных кохлеарным).

Ответ 4

Одним из возможных подходов было бы использовать Genetic Programming (GP), чтобы генерировать короткие фрагменты кода, которые определяют шаг. Таким образом, вы сможете создать правило о том, как работает определение высоты тона, которое, мы надеемся, будет читаемым человеком.