разница в скорости между реализациями тензорного потока спектрограммы mfcc

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

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

Первый заключается в использованиибиблиотека.

Это означает, что функции:

      stft = tf.signal.stft(signals, frame_length, frame_step)
spectrogram = tf.abs(stft)
# matrix computed beforehand
tf.tensordot(spectrogram, linear_to_mel_weight_matrix, 1)
log_mel_spectrogram = tf.math.log(mel_spectrogram + 1.e-6)
mfccs = tf.signal.mfccs_from_log_mel_spectrograms(log_mel_spectrogram)

Второй заключается в использованиибиблиотека. В результате получается следующий код:

      # spectrogram computation
spectrogram = tf.raw_ops.AudioSpectrogram(
    input=sample,
    window_size=window_size_samples,
    stride=window_stride_samples
    )

# mfcc computation
mfcc_features = tf.raw_ops.Mfcc(
    spectrogram=spectrogram,
    sample_rate=sample_rate,
    dct_coefficient_count=dct_coefficient_count
)

Проблема в том, что второй намного быстрее (~10x). Как видно из этой таблицы.

В обоих случаях использовались одни и те же параметры (размер окна, размер прыжка, количество коэффициентов...). Я провел несколько тестов, и результат остается таким же до 3-го десятичного знака.

Мой вопрос: есть ли у кого-то опыт работы с этими функциями или кто-то может объяснить такое поведение?

0 ответов

Другие вопросы по тегам