Обнаружение высоты тона с использованием нейронных сетей [закрыто

StackOverflow https://stackoverflow.com/questions/2163267

Вопрос

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

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

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

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

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top