Catat tanggalnya! Google I / O mengembalikan 18-20 Mei Daftar sekarang
Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Persiapan dan Augmentasi Data Audio

Lihat di TensorFlow.org Jalankan di Google Colab Lihat sumber di GitHub Unduh buku catatan

Gambaran

Salah satu tantangan terbesar dalam Pengenalan Ucapan Otomatis adalah persiapan dan penambahan data audio. Analisis data audio bisa dalam domain waktu atau frekuensi, yang menambah kompleks tambahan dibandingkan dengan sumber data lain seperti gambar.

Sebagai bagian dari ekosistem TensorFlow, paket tensorflow-io menyediakan beberapa API terkait audio yang berguna yang membantu memudahkan persiapan dan augmentasi data audio.

Mendirikan

Instal Paket yang diperlukan, dan mulai ulang runtime

pip install -q tensorflow-io

Pemakaian

Baca File Audio

Di TensorFlow IO, class tfio.audio.AudioIOTensor memungkinkan Anda membaca file audio ke dalam IOTensor dimuat IOTensor :

import tensorflow as tf
import tensorflow_io as tfio

audio = tfio.audio.AudioIOTensor('gs://cloud-samples-tests/speech/brooklyn.flac')

print(audio)
<AudioIOTensor: shape=[28979     1], dtype=<dtype: 'int16'>, rate=16000>

Dalam contoh di atas, file Flac brooklyn.flac berasal dari klip audio yang dapat diakses publik di Google Cloud .

Alamat GCS gs://cloud-samples-tests/speech/brooklyn.flac digunakan secara langsung karena GCS adalah sistem file yang didukung di TensorFlow. Selain format Flac , WAV , Ogg , MP3 , dan MP4A juga didukung oleh AudioIOTensor dengan deteksi format file otomatis.

AudioIOTensor dimuat AudioIOTensor sehingga hanya bentuk, tipe, dan frekuensi sampel yang ditampilkan pada awalnya. Bentuk AudioIOTensor direpresentasikan sebagai [samples, channels] , yang berarti klip audio yang Anda muat adalah saluran mono dengan 28979 sampel di int16 .

Konten klip audio hanya akan dibaca sesuai kebutuhan, baik dengan mengonversi AudioIOTensor ke Tensor melalui to_tensor() , atau melalui pemotongan. Mengiris sangat berguna jika hanya diperlukan sebagian kecil dari klip audio yang besar:

audio_slice = audio[100:]

# remove last dimension
audio_tensor = tf.squeeze(audio_slice, axis=[-1])

print(audio_tensor)
tf.Tensor([16 39 66 ... 56 81 83], shape=(28879,), dtype=int16)

Audio dapat diputar melalui:

from IPython.display import Audio

Audio(audio_tensor.numpy(), rate=audio.rate.numpy())

Lebih mudah untuk mengubah tensor menjadi bilangan float dan menampilkan klip audio dalam grafik:

import matplotlib.pyplot as plt


tensor = tf.cast(audio_tensor, tf.float32) / 32768.0

plt.figure()
plt.plot(tensor.numpy())
[<matplotlib.lines.Line2D at 0x7fd204185c88>]

png

Pangkas kebisingannya

Terkadang masuk akal untuk memangkas derau dari audio, yang dapat dilakukan melalui API tfio.experimental.audio.trim . Kembali dari API adalah sepasang posisi [start, stop] dari segmen:

position = tfio.experimental.audio.trim(tensor, axis=0, epsilon=0.1)
print(position)

start = position[0]
stop = position[1]
print(start, stop)

processed = tensor[start:stop]

plt.figure()
plt.plot(processed.numpy())
tf.Tensor([ 2398 23546], shape=(2,), dtype=int64)
tf.Tensor(2398, shape=(), dtype=int64) tf.Tensor(23546, shape=(), dtype=int64)

[<matplotlib.lines.Line2D at 0x7fd2040f18d0>]

png

Fade In dan Fade Out

Salah satu teknik rekayasa audio yang berguna adalah fade, yang secara bertahap meningkatkan atau menurunkan sinyal audio. Ini dapat dilakukan melalui tfio.experimental.audio.fade . tfio.experimental.audio.fade mendukung berbagai bentuk pudar seperti linear , logarithmic , atau exponential :

fade = tfio.experimental.audio.fade(
    processed, fade_in=1000, fade_out=2000, mode="logarithmic")

plt.figure()
plt.plot(fade.numpy())
[<matplotlib.lines.Line2D at 0x7fd20405b630>]

png

Spectrogram

Pemrosesan audio tingkat lanjut sering kali berfungsi pada perubahan frekuensi seiring waktu. Dalam tensorflow-io bentuk gelombang dapat diubah menjadi spektrogram melalui tfio.experimental.audio.spectrogram :

# Convert to spectrogram
spectrogram = tfio.experimental.audio.spectrogram(
    fade, nfft=512, window=512, stride=256)

plt.figure()
plt.imshow(tf.math.log(spectrogram).numpy())
<matplotlib.image.AxesImage at 0x7fd1e0564630>

png

Transformasi tambahan ke skala yang berbeda juga dimungkinkan:

# Convert to mel-spectrogram
mel_spectrogram = tfio.experimental.audio.melscale(
    spectrogram, rate=16000, mels=128, fmin=0, fmax=8000)


plt.figure()
plt.imshow(tf.math.log(mel_spectrogram).numpy())

# Convert to db scale mel-spectrogram
dbscale_mel_spectrogram = tfio.experimental.audio.dbscale(
    mel_spectrogram, top_db=80)

plt.figure()
plt.imshow(dbscale_mel_spectrogram.numpy())
<matplotlib.image.AxesImage at 0x7fd1d87f8978>

png

png

SpecAugment

Selain persiapan data dan augmentasi API yang disebutkan di atas, paket tensorflow-io juga menyediakan augmentasi spektogram lanjutan, terutama Penyamaran Frekuensi dan Waktu yang dibahas dalam SpecAugment: Metode Augmentasi Data Sederhana untuk Pengenalan Ucapan Otomatis (Park et al., 2019) .

Penyamaran Frekuensi

Dalam masking frekuensi, kanal frekuensi [f0, f0 + f) disamarkan di mana f dipilih dari distribusi seragam dari 0 ke parameter mask frekuensi F , dan f0 dipilih dari (0, ν − f) mana ν adalah jumlah saluran frekuensi.

# Freq masking
freq_mask = tfio.experimental.audio.freq_mask(dbscale_mel_spectrogram, param=10)

plt.figure()
plt.imshow(freq_mask.numpy())
<matplotlib.image.AxesImage at 0x7fd1e0545cc0>

png

Masking Waktu

Dalam penutupan waktu, t langkah waktu yang berurutan [t0, t0 + t) disembunyikan di mana t dipilih dari distribusi seragam dari 0 ke parameter topeng waktu T , dan t0 dipilih dari [0, τ − t) mana τ adalah langkah waktu.

# Time masking
time_mask = tfio.experimental.audio.time_mask(dbscale_mel_spectrogram, param=10)

plt.figure()
plt.imshow(time_mask.numpy())
<matplotlib.image.AxesImage at 0x7fd1d8718668>

png