Ses Verilerinin Hazırlanması ve Artırılması

TensorFlow.org'da görüntüleyin Google Colab'da çalıştırın Kaynağı GitHub'da görüntüleyin Not defterini indir

genel bakış

Otomatik Konuşma Tanımadaki en büyük zorluklardan biri, ses verilerinin hazırlanması ve güçlendirilmesidir. Ses verisi analizi, görüntüler gibi diğer veri kaynaklarıyla karşılaştırıldığında ek karmaşıklık ekleyen zaman veya frekans alanında olabilir.

TensorFlow ekosistemin bir parçası olarak, tensorflow-io paket ses verilerinin hazırlanmasını ve büyütme hafifletilmesi yardımcı epeyce kullanışlı sesle ilgili API'ler sağlar.

Kurmak

Gerekli Paketleri kurun ve çalışma zamanını yeniden başlatın

pip install tensorflow-io

kullanım

Bir Ses Dosyasını Okuyun

TensorFlow IO olarak, sınıf tfio.audio.AudioIOTensor tembel yüklenmiş bir ses dosyası okumanızı sağlar 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>

Yukarıdaki örnekte, FLAC dosya brooklyn.flac genel olarak erişilebilir ses klibi ila hakkında bulutu .

GCS adresi gs://cloud-samples-tests/speech/brooklyn.flac GCS TensorFlow desteklenen bir dosya sistemi olduğu için doğrudan kullanılmaktadır. Ek olarak Flac formatında, WAV , Ogg , MP3 , ve MP4A da desteklediği AudioIOTensor otomatik dosya biçimi algılama.

AudioIOTensor , bu nedenle sadece şekil yüklenen-yavaş d_type ve numune oranı, ilk olarak gösterilmiştir. Şekli AudioIOTensor olarak temsil edilir [samples, channels] Yüklediiniz ses klibi ile mono kanal olduğu anlamına gelir, 28979 numune int16 .

Gerektiğinde ses klibi içeriği yalnızca ya dönüştürerek okunacak AudioIOTensor için Tensor yoluyla to_tensor() veya dilimleme bile. Dilimleme, özellikle büyük bir ses klibinin yalnızca küçük bir kısmına ihtiyaç duyulduğunda kullanışlıdır:

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)

Ses şu yollarla çalınabilir:

from IPython.display import Audio

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

Tensörü kayan sayılara dönüştürmek ve ses klibini grafikte göstermek daha uygundur:

import matplotlib.pyplot as plt


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

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

png

Gürültüyü kırp

Bazen API yoluyla yapılabilir ses, gürültü kesmek için mantıklı tfio.audio.trim . API döndü bir çift [start, stop] bölüt bir pozisyon:

position = tfio.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 0x7fbdd3dce9d0>]

png

Solmaya ve Kararmaya

Yararlı bir ses mühendisliği tekniği, ses sinyallerini kademeli olarak artıran veya azaltan fadedir. Bu yoluyla yapılabilir tfio.audio.fade . tfio.audio.fade gibi Fades farklı şekillerini destekler linear , logarithmic veya exponential :

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

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

png

Spektrogram

Gelişmiş ses işleme, genellikle zaman içindeki frekans değişiklikleri üzerinde çalışır. Gelen tensorflow-io bir dalga formu ile spektrogram dönüştürülebilir tfio.audio.spectrogram :

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

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

png

Farklı ölçeklere ek dönüşüm de mümkündür:

# Convert to mel-spectrogram
mel_spectrogram = tfio.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.audio.dbscale(
    mel_spectrogram, top_db=80)

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

png

png

SpecAugment

Bahsedilen veri hazırlama ve büyütme API'leri üzerinde, ek olarak tensorflow-io paketi ayrıca gelişmiş spektrogram augmentations, özellikle Frekans sağlar ve saat maskeleme tartışılan SpecAugment: (. Park ve diğerleri, 2019) 'otomatik konuşma tanıma için basit bir veri Büyütme yöntem .

Frekans Maskeleme

Frekans maskeleme, frekans kanallarında [f0, f0 + f) burada maskelenmiş f gelen tek bir şekilde dağılımı seçilmesidir 0 parametre frekans maskeye F ve f0 arasından seçilir (0, ν − f) ν sayısıdır frekans kanalları.

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

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

png

Zaman Maskeleme

Zaman maskeleme olarak, t ardışık zaman adımları [t0, t0 + t) maskelenir t gelen tek bir şekilde dağılımı seçilmesidir 0 parametre zaman maskeye T ve t0 seçilmesidir [0, τ − t) τ olduğu zaman adımları.

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

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

png