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

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

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

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

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

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

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

Есть указатели? (извините за длину, кстати :).


person sold    schedule 29.01.2010    source источник


Ответы (4)


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

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

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

person user245973    schedule 30.01.2010
comment
Просто брать максимальную частоту очень ненадежно - person finnw; 13.12.2010

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

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

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

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

Определение высоты тона в реальном времени

person James Paul Millard    schedule 30.07.2016

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

person stephendwolff    schedule 14.10.2010

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

person Alexander    schedule 19.11.2012