Как мы можем улучшить точность определения темпа в Librosa? - PullRequest
0 голосов
/ 05 мая 2020

Я использую встроенную функцию beat_track из Librosa, как показано ниже,

from librosa.beat import beat_track
tempo, beat_frames = beat_track(audio, sampling_rate)

Исходный темп песни равен 146 BPM, тогда как функция приближается к 73.5 BPM. Пока понимаю 73.5*2 ~ 148 BPM. Как мы можем достичь следующего: 1. Знать, когда нужно увеличивать / уменьшать оценки 2. Повышать точность с помощью некоторой формы предварительной обработки сигнала.

Я изучаю DSP на лету, поэтому, возможно, не привык ко всем понятиям. Любое руководство приветствуется. Спасибо.

1 Ответ

1 голос
/ 06 мая 2020

То, что вы наблюдаете, является так называемой «октавной ошибкой», т. Е. Оценка ошибочна в 2, 1/2, 3 или 1/3 раза. Это довольно распространенная проблема при оценке глобального темпа. Отличное, классическое c введение в глобальную оценку темпа можно найти в Экспериментальное сравнение алгоритмов индукции темпа звука . В статье также представлены общие метрики Acc1 и Acc2.

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

Оба подхода используют сверточные нейронные сети (CNN) для анализа спектрограмм. Хотя CNN также может быть реализована в librosa , в настоящее время отсутствует программная инфраструктура c, позволяющая легко это сделать. Другой фреймворк аудиоанализа кажется шагом вперед в этом отношении: Essentia . Он может работать с TensorFlow -моделями.

...