Как ускорить расчет спектрограммы с тензорным потоком? - PullRequest
2 голосов
/ 29 марта 2019

Я хочу вычислить спектрограмму 1-секундного аудиоклипа для каждого кадра в видеофайле.

Я использую функцию tensorflow.contrib.framework.python.ops.audio_ops.audio_spectrogram для вычисления спектрограммы.

Звук, извлеченный извидео и сэмплированные при 48 кГц.Я использую window_size=480 (0.01 * sample_rate) и stride=240 (0.5 перекрытия).Весь мой видеофайл имеет 25 кадров в секунду и длительность 1 ~ 10 минут.Поэтому ему необходимо вычислять 25 спектрограмм в секунду.

В настоящее время я вычисляю спектрограмму, получая сигнал в моменты времени от x до x + 1 секунды и передавая сигнал в функцию audio_spectrogram().Вот фрагмент кода того, как я вычисляю спектрограмму аудиофайла:

audio_binary = tf.read_file(filename)
wav = audio_ops.decode_wav(audio_binary)

with tf.Session() as sess:
    waveform, sample_rate = tf.run(wav)

for i in range(25 * video_duration):
    start = i * sample_rate / 25 # fps
    spect = audio_ops.audio_spectrogram(waveform[start:start+sample_rate], 480, 240)

    # spectrogram post processing...

    with tf.Session() as sess, open(get_output_filename(filename, i)) as output:
        encode = tf.image.encode_jpeg(spect)
        output.write(tf.run(encode))

К сожалению, этот код требует очень много времени для вычисления всех спектрограмм.Для полного расчета спектрограмм 5 аудиофайлов требуется 12 часов.И у меня есть сотни видео для вычисления: (.

Есть ли способ ускорить этот процесс?

Я думаю о выполнении функции audio_spectrogram() в пакетном режиме (вид работы на[batch_size, waveform]) но не знаю, как это сделать, потому что аргумент формы волны принимает массив только 1 дим. Кроме того, я не уверен, что выполнение операции в пакете ускорит процесс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...