kapre- Keras音频预处理python库

kapre是Keras音频预处理器,用于在GPU上实时计算STFT,ISTFT,Melspectrogram。

在Python 3.6和3.7上通过测试。

Kapre的优点

与预计算相比

  • 您可以优化DSP参数

  • 您的模型部署变得更加简单和一致。

  • 您的代码和模型具有更少的依赖性

与您自己的实现相比

  • 快捷方便!

  • 与1D / 2D张量流批处理形状一致

  • 数据格式不可知(channels_first和channels_last)

  • 更少的错误倾向-Kapre层针对Librosa(stft,decibel等)进行了测试-(请相信我)这比您想象的要棘手。

  • Kapre层具有一些默认tf.signals实现的扩展API,例如:

一个完全可逆的STFT和InverseSTFT对

梅尔频谱图具有更多选择

  • 可再现性-Kapre可在带有版本控制的pip上使用

Kapre的工作流程

  • 预处理音频数据集。以正确的采样率重新采样音频并存储音频信号(波形)

  • 在您的ML模型中,添加Kapre层,例如kapre.time_frequency.STFT()作为模型的第一层。

  • 数据加载器只需加载音频信号并将其输入模型

  • 在您的超参数搜索中,包括DSP参数n_fft以提高性能

  • 部署最终模型时,您只需要记住信号的采样率即可。没有依赖关系或预处理!

安装

pip install kapre 或者下载我们备份的kapre库文件包

API文档

请参阅 kapre.readthedocs.io上的Kapre API文档。

示例

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, BatchNormalization, ReLU, GlobalAveragePooling2D, Dense, Softmax
from kapre import STFT, Magnitude, MagnitudeToDecibel
from kapre.composed import get_melspectrogram_layer, get_log_frequency_spectrogram_layer

# 6 channels (!), maybe 1-sec audio signal, for an example.
input_shape = (44100, 6)
sr = 44100
model = Sequential()
# A STFT layer
model.add(STFT(n_fft=2048, win_length=2018, hop_length=1024,
               window_name=None, pad_end=False,
               input_data_format='channels_last', output_data_format='channels_last',
               input_shape=input_shape))
model.add(Magnitude())
model.add(MagnitudeToDecibel())  # these three layers can be replaced with get_stft_magnitude_layer()
# Alternatively, you may want to use a melspectrogram layer
# melgram_layer = get_melspectrogram_layer()
# or log-frequency layer
# log_stft_layer = get_log_frequency_spectrogram_layer() 

# add more layers as you want
model.add(Conv2D(32, (3, 3), strides=(2, 2)))
model.add(BatchNormalization())
model.add(ReLU())
model.add(GlobalAveragePooling2D())
model.add(Dense(10))
model.add(Softmax())

# Compile the model
model.compile('adam', 'categorical_crossentropy') # if single-label classification

# train it with raw audio sample inputs
# for example, you may have functions that load your data as below.
x = load_x() # e.g., x.shape = (10000, 6, 44100)
y = load_y() # e.g., y.shape = (10000, 10) if it's 10-class classification
# then..
model.fit(x, y)
# Done!

  

 

posted @ 2020-12-10 17:41  expressTHK  阅读(767)  评论(0)    收藏  举报
友情链接: 百度搜索  |  网盘搜索  |  图片搜索  |  中国搜索  |  文档搜索  |  视频搜索  |  优惠券搜索  |  数字图书馆  |  公开课搜索