11

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

Сеть тренируется с несколькими образцами из этих 12 нот, исполняемых каким-либо инструментом (по одной заметке за раз), и несколькими образцами «тишины».

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

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

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

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

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

ответ

6

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

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

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

+3

Только принимая максимальную частоту очень ненадежно – finnw

2

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

1

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

3

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

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

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

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

Real time pitch detection