В настоящее время я работаю над нейронной сетью свертки (CNN) и начал смотреть на разные графики спектрограмм:
Что касается графика Librosa (MFCC), спектрограмма сильно отличается от графиков других спектрограмм. Я взглянул на комментарий, размещенный здесь, в котором говорится о «недетализированной» спектрограмме MFCC. Как выполнить задачу (с точки зрения кода Python), размещенную в решении, приведенном там?
Кроме того, будет ли этот график MFCC с плохим разрешением пропускать какие-либо неприятности, когда изображения проходят через CNN?
Будем искренне признательны за любую помощь в выполнении кода Python, упомянутого здесь!
Вот мой код на Python для сравнения спектрограмм, а вот расположение анализируемого wav-файла.
Код Python
# Load various imports
import os
import librosa
import librosa.display
import matplotlib.pyplot as plt
import scipy.io.wavfile
#24bit accessible version
import wavfile
plt.figure(figsize=(17, 30))
filename = 'AWCK AR AK 47 Attached.wav'
librosa_audio, librosa_sample_rate = librosa.load(filename, sr=None)
plt.subplot(4,1,1)
xmin = 0
plt.title('Original Audio - 24BIT')
fig_1 = plt.plot(librosa_audio)
sr = librosa_sample_rate
plt.subplot(4,1,2)
mfccs = librosa.feature.mfcc(y=librosa_audio, sr=librosa_sample_rate, n_mfcc=40)
librosa.display.specshow(mfccs, sr=librosa_sample_rate, x_axis='time', y_axis='hz')
plt.title('Librosa Plot')
print(mfccs.shape)
plt.subplot(4,1,3)
X = librosa.stft(librosa_audio)
Xdb = librosa.amplitude_to_db(abs(X))
librosa.display.specshow(Xdb, sr=sr, x_axis='time', y_axis='hz')
# plt.colorbar()
# maximum frequency
Fs = 96000.
samplerate, data = scipy.io.wavfile.read(filename)
plt.subplot(4,1,4)
plt.specgram(data, Fs=samplerate)
plt.title('Scipy Plot (Fs=96000)')
plt.show()
MFCC - это не спектрограммы (время-частота), а "кепстрограммы" (время-кепстр). Сравнивать визуально MFCC со спектрограммой непросто, и я не уверен, что это очень полезно. Если вы хотите это сделать, инвертируйте MFCC, чтобы получить обратно спектрограмму (mel), выполнив обратный DCT. Вероятно, вы можете использовать для этого mfcc_to_mel. Это позволит оценить, сколько данных было потеряно при прямом преобразовании MFCC. Но это может ничего не сказать о том, сколько релевантной для вашей задачи информации было потеряно или насколько уменьшился нерелевантный шум. Это необходимо оценить для вашей задачи и набора данных. Лучший способ — попробовать разные настройки и оценить производительность, используя интересующие вас показатели оценки.
Обратите внимание, что MFCC может быть не таким хорошим представлением типичных 2D CNN, которые применяются к спектрограммам. Это связано с тем, что локальность была уменьшена: в области MFCC частоты, которые близки друг к другу, больше не расположены рядом друг с другом по вертикальной оси. А поскольку 2D-CNN имеют ядра с ограниченной локальностью (тип 3x3 или 5x5 на ранних этапах), это может снизить производительность модели.
Для MFCC я добавил здесь несколько ссылок. stackoverflow.com/a/65208434/1967571 - не очень авторитетный, но, вероятно, весьма полезный. Я ожидаю, что любой хороший учебник по распознаванию речи достаточно хорошо расскажет об этом.
Что касается CNN по вопросам MFCC, я не знаю авторитетного источника. Это своего рода «здравый смысл» и с некоторой косвенной поддержкой в эмпирических оценках (CNN на melspecogram работают лучше, чем на MFCC). Если вы найдете хороший источник для этого, хотелось бы увидеть его!
Спасибо за ваш ответ. С уважением! Где я могу найти дополнительную информацию о MFCC, связанную с ответом, который вы мне дали? Я еще не встречал информацию, которую вы упомянули в своем ответе. Можете ли вы указать мне авторитетное место/документ, описывающий некоторую информацию, которой вы поделились со мной здесь? Спасибо!