Дескрипторы функций MFCC для классификации аудио с использованием librosa
Я пытаюсь получить представления одиночных векторных функций для аудиофайлов, которые будут использоваться в задаче машинного обучения (в частности, классификация с использованием нейронной сети). У меня есть опыт в области компьютерного зрения и обработки естественного языка, но мне нужна помощь в ускорении работы с аудиофайлами.
Существует множество дескрипторов функций для аудиофайлов, но кажется, что MFCC используются больше всего для задач классификации аудио. Мой вопрос заключается в следующем: как взять представление MFCC для аудиофайла, который обычно представляет собой матрицу (предположительно), и превратить ее в один вектор функции? В настоящее время я использую librosa.
У меня есть куча аудиофайлов, но все они различаются по форме:
for filename in os.listdir('data'):
y, sr = librosa.load('data/' + filename)
print filename, librosa.feature.mfcc(y=y, sr=sr).shape
213493.ogg (20, 2375)
120093.ogg (20, 7506)
174576.ogg (20, 2482)
194439.ogg (20, 14)
107936.ogg (20, 2259)
То, что я сделал бы как человек CV, квантовать эти коэффициенты, выполняя k-средства, а затем использовать что-то вроде scipy.cluster.vq для получения векторов идентичной формы, которую я могу использовать в качестве входных данных для моего NN. Это то, что вы делали бы в звуковом случае, или есть разные/лучшие подходы к этой проблеме?
Ответы
Ответ 1
Откройте scikits.talkbox. Он имеет различные функции, которые помогут вам генерировать MFCC из аудиофайлов. В частности, вы хотели бы сделать что-то подобное для генерации MFCC.
import numpy as np
import scipy.io.wavfile
from scikits.talkbox.features import mfcc
sample_rate, X = scipy.io.wavfile.read("path/to/audio_file")
ceps, mspec, spec = mfcc(X)
np.save("cache_file_name", ceps) # cache results so that ML becomes fast
Затем, выполняя ML, сделайте что-то вроде:
X = []
ceps = np.load("cache_file_name")
num_ceps = len(ceps)
X.append(np.mean(ceps[int(num_ceps / 10):int(num_ceps * 9 / 10)], axis=0))
Vx = np.array(X)
# use Vx as input values vector for neural net, k-means, etc
Я использовал этот материал, когда создавал инструмент классификации жанров аудио (genreXpose).
PS: Один удобный инструмент для преобразования звука, который я использовал, был PyDub
Ответ 2
Это действительно зависит от задачи. Я бы попробовал kmeans и т.д., Но есть много случаев, когда это может быть не полезно.
Вот несколько хороших примеров использования динамическое изменение времени с помощью librosa.
Также может быть и идея использования скользящих окон известной формы. Тогда вы могли бы рассмотреть предыдущее предсказание и матрицу вероятности перехода.
Ответ 3
Обычно в литературе по классификации аудио все звуковые файлы усекаются до одной длины в зависимости от задачи классификации (т.е. я работаю над устройствами обнаружения падения, поэтому я знаю, что аудиофайлы не должны длиться дольше, чем 1 с это ожидаемая продолжительность события падения).
Затем для каждого аудиофайла вы можете извлекать коэффициенты MFCC для каждого кадра и складывать их вместе, генерируя матрицу MFCC для данного аудиофайла. Поскольку каждый аудиофайл имеет одинаковую длину, и мы предполагаем, что все кадры содержат одинаковое количество выборок, все матрицы будут иметь одинаковый размер.
Ответ 4
Вы можете использовать библиотеки, такие как https://github.com/jsingh811/pyAudioProcessing, чтобы получить функции mfcc, а затем выполнить классификацию с помощью одной команды.
Он вычисляет mfcc, получает его в один вектор объектов для каждого аудио и дает возможность выбора из различных классификаторов sklearn для выполнения классификации функций mfcc.