gpt4 book ai didi

python - Sidekit 代码在创建功能后 UBM 创建期间卡住

转载 作者:太空宇宙 更新时间:2023-11-04 09:44:25 26 4
gpt4 key购买 nike

我一直在尝试运行 UBM.EM_Split() 函数。我创建了一个特征文件 feat.h5 (3.8 MB),其中存储了 24 个音频文件的特征。我尝试使用此功能文件作为函数中 feature_list 参数的输入。但是,代码已经运行了 72 多个小时,没有任何输出或响应。仔细检查,代码被卡住的代码行如下:

# Wait for all the tasks to finish
queue_in.join()

这是我使用的代码(它基于 sidekit 网站上的 UBM 教程):

import sidekit
import os

#Read all the files in the directory
all_files = os.listdir("D:/DatabaseFiles/Sidekit/")

extractor = sidekit.FeaturesExtractor(audio_filename_structure="D:/DatabaseFiles/Sidekit/{}",
feature_filename_structure="D:/Sidekit/Trial/feat.h5",
sampling_frequency=16000,
lower_frequency=200,
higher_frequency=3800,
filter_bank="log",
filter_bank_size=24,
window_size=0.04,
shift=0.01,
ceps_number=20,
vad="snr",
snr=40,
pre_emphasis=0.97,
save_param=["vad", "energy", "cep", "fb"],
keep_all_features=True)

#To iterate through a whole list
for x in all_files:
extractor.save(x)

server = sidekit.FeaturesServer(feature_filename_structure="D:/Sidekit/Trial/feat.h5",
sources=None,
dataset_list=["vad", "energy", "cep", "fb"],
feat_norm="cmvn",
global_cmvn=None,
dct_pca=False,
dct_pca_config=None,
sdc=False,
sdc_config=None,
delta=True,
double_delta=True,
delta_filter=None,
context=None,
traps_dct_nb=None,
rasta=True,
keep_all_features=True)

ubm = sidekit.Mixture()

ubm.EM_split(features_server=server,
feature_list="D:/Sidekit/Trial/feat.h5",
distrib_nb=32,
iterations=(1, 2, 2, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8),
num_thread=10,
save_partial=True,
ceil_cov=10,
floor_cov=1e-2
)

我还根据一位有经验的用户 (feature_list = all_files) 的建议尝试了以下函数调用。但是,这也没有解决问题。

ubm.EM_split(features_server=server,
feature_list=all_files,
distrib_nb=32,
iterations=(1, 2, 2, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8),
num_thread=10,
save_partial=True,
ceil_cov=10,
floor_cov=1e-2
)

我在 Windows 和 Linux 环境中都遇到了同样的问题。两个系统都有 32 GB RAM,并且 mpi 设置为 true。

你知道我做错了什么吗?一个包含 24 个音频文件(feat.h5 是 3.8 MB)的特征的 h5 文件需要这么长时间吗?

最佳答案

我对您的代码做了一些调整,并设法使用我作为任意训练数据撒谎的一些 wav 文件来训练 UBM。

编辑我的数据的目录路径后,您的代码成功提取了特征。在运行 EM_split 部分时,它失败了,可能是因为与您的错误相同。

问题很简单,与特征提取器生成的 HDF5 文件的内部目录结构有关。似乎 FeaturesServer 对象在解释文件列表时不是很灵活。因此,一种选择是编辑源代码 (features_server.py)。但是,最简单的解决方法是将您的功能文件列表更改为 FeaturesServer 可以解释的内容。

特征提取:

import sidekit
import os
import numpy as np

# Setting parameters
nbThread = 4 # change to desired number of threads
nbDistrib = 32 # change to desired final number of Gaussian distributions
base_dir = "./Database/sidekit_data"
wav_dir = os.path.join(base_dir, "wav")
feature_dir = os.path.join(base_dir, "feat")

# Prepare file lists
all_files = os.listdir(wav_dir)
show_list = np.unique(np.hstack([all_files]))
channel_list = np.zeros_like(show_list, dtype = int)

# 1: Feature extraction
extractor = sidekit.FeaturesExtractor(audio_filename_structure=os.path.join(wav_dir, "{}"),
feature_filename_structure=os.path.join(feature_dir, "{}.h5"),
sampling_frequency=16000,
lower_frequency=200,
higher_frequency=3800,
filter_bank="log",
filter_bank_size=24,
window_size=0.04,
shift=0.01,
ceps_number=20,
vad="snr",
snr=40,
pre_emphasis=0.97,
save_param=["vad", "energy", "cep", "fb"],
keep_all_features=True)


extractor.save_list(show_list=show_list,
channel_list=channel_list,
num_thread=nbThread)

现在训练数据中的每个 wav 文件都有一个 HDF5 文件。不是很优雅,因为你可以只用一个来管理,但它确实有效。函数 extractor.save_list() 很有用,因为它允许运行多个进程,这将大大加快特征提取速度。

我们现在可以训练 UBM:

# 2: UBM Training
ubm_list = os.listdir(os.path.join(base_dir, "feat")) # make sure this directory only contains the feature files extracted above
for i in range(len(ubm_list)):
ubm_list[i] = ubm_list[i].split(".h5")[0]

server = sidekit.FeaturesServer(feature_filename_structure=os.path.join(feat_dir, "{}.h5"),
sources=None,
dataset_list=["vad", "energy", "cep", "fb"],
feat_norm="cmvn",
global_cmvn=None,
dct_pca=False,
dct_pca_config=None,
sdc=False,
sdc_config=None,
delta=True,
double_delta=True,
delta_filter=None,
context=None,
traps_dct_nb=None,
rasta=True,
keep_all_features=True)


ubm = sidekit.Mixture()


ubm.EM_split(features_server=server,
feature_list=ubm_list,
distrib_nb=nbDistrib,
iterations=(1, 2, 2, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8),
num_thread=nbThread,
save_partial=True,
ceil_cov=10,
floor_cov=1e-2
)

我建议在末尾添加以下行以保存您的 UBM:

ubm_dir = os.path.join(base_dir, "ubm")
ubm.write(os.path.join(ubm_dir, "ubm_{}.h5".format(nbDistrib)))

就是它了!如果这对你有用,请告诉我。特征提取和模型训练用时不到 10 分钟。 (Ubuntu 14.04、Python 3.5.3、Sidekit v 1.2、30 分钟的训练数据,16kHz 采样率)。

关于python - Sidekit 代码在创建功能后 UBM 创建期间卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50363860/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com