Python 在创建特征后的UBM创建过程中,Sidekit代码冻结
我一直在尝试运行UBM.EM_Split()函数。我创建了一个功能文件feat.h5(3.8MB),其中存储了24个音频文件中的功能。我尝试使用此功能文件作为函数中功能列表参数的输入。但是,代码已经运行了72个多小时,没有输出或响应。仔细检查后,代码冻结的代码行如下所示:Python 在创建特征后的UBM创建过程中,Sidekit代码冻结,python,mpi,speech-recognition,sidekit,Python,Mpi,Speech Recognition,Sidekit,我一直在尝试运行UBM.EM_Split()函数。我创建了一个功能文件feat.h5(3.8MB),其中存储了24个音频文件中的功能。我尝试使用此功能文件作为函数中功能列表参数的输入。但是,代码已经运行了72个多小时,没有输出或响应。仔细检查后,代码冻结的代码行如下所示: # Wait for all the tasks to finish queue_in.join() 以下是我使用的代码(它基于sidekit网站上的UBM教程): 我还根据经验丰富的用户的建议尝试了以下函数
# Wait for all the tasks to finish
queue_in.join()
以下是我使用的代码(它基于sidekit网站上的UBM教程):
我还根据经验丰富的用户的建议尝试了以下函数调用(feature\u list=all\u 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_分割部件时,它失败了,可能是因为与您的错误相同 问题相当简单,并且与功能提取器生成的HDF5文件的内部目录结构有关。FeaturesServer对象在解释文件列表时似乎不是很灵活。因此,可以选择编辑源代码(features_server.py)。但是,最简单的解决方法是将功能文件列表更改为FeatureServer可以解释的内容 特征提取:
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分钟。(Ubuntu14.04,Python3.5.3,Sidekit v1.2,30分钟16kHz采样率的训练数据)。我对你的代码做了一些调整,并设法使用我作为任意训练数据的一些wav文件训练UBM 编辑“我的数据”的目录路径后,您的代码成功地提取了特征。当运行EM_分割部件时,它失败了,可能是因为与您的错误相同 问题相当简单,并且与功能提取器生成的HDF5文件的内部目录结构有关。FeaturesServer对象在解释文件列表时似乎不是很灵活。因此,可以选择编辑源代码(features_server.py)。但是,最简单的解决方法是将功能文件列表更改为FeatureServer可以解释的内容 特征提取:
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分钟。(Ubuntu14.04,Python3.5.3,Sidekit v1.2,30分钟的训练数据,16kHz采样率)。谢谢Jorgen。经过调整的代码可以在Linux和Mac操作系统上运行。在windows环境中仍然存在同样的问题。谢谢Jorgen。经过调整的代码可以在Linux和Mac操作系统上运行。在windows环境中仍然存在同样的问题。