gpt4 book ai didi

java - 用于训练 HMM 的 MFCC 数据格式

转载 作者:行者123 更新时间:2023-11-30 04:46:47 24 4
gpt4 key购买 nike

我正在尝试使用 mfcc 功能和隐藏马尔可夫模型在 java 中开发一个音频分类系统。我正在关注这篇研究论文:http://acccn.net/cr569/Rstuff/keys/bathSoundMonitoring.pdf .

算法描述如下:

每个声音文件,对应于一个声音事件的样本,在通过具有重叠的汉明窗(25 ms)预强调和加窗的帧50%。由 13 阶 MFCC 组成的特征向量,每个特征向量框架。我们使用从左到右的六状态连续密度对每个声音进行建模没有状态跳跃的 HMM。每个 HMM 状态由两个高斯混合组成成分。模型初始化阶段完成后,所有 HMM 模型经过三个迭代周期的训练。

我已经完成了第一部分的工作,即从样本声音中提取特征。结果我得到了一个二维 double 组,每行由 13 列组成(每行代表声音的一个帧)。现在我的问题是如何使用这些数据来训练 hmm。

我正在使用 jahmm 库。到目前为止,我已经开发了一些示例代码来大致了解该库的工作原理。

/**Some sample data to act as the mfcc data. Here each line terminated by a new space
* is one observation. I don't know whether each line should be one row from the mfcc values
* (representing one frame) or each line should be representing a set of features from one audio file.
*/
String realSequences = "1.1;2.2;3.3;4.4;5.5;6.6;7.7;8.8;9.9;10.0;11.1;12.2;13.3;\n"
+ "1.1;2.2;3.3;4.4;5.5;6.6;7.7;8.8;9.9;10.0;11.1;12.2;13.3;\n"
+ "1.1;2.2;3.3;4.4;5.5;6.6;7.7;8.8;9.9;10.0;11.1;12.2;13.3;\n"
+ "1.1;2.2;3.3;4.4;5.5;6.6;7.7;8.8;9.9;10.0;11.1;12.2;13.3;\n"
+ "1.1;2.2;3.3;4.4;5.5;6.6;7.7;8.8;9.9;10.0;11.1;12.2;13.3;\n"
+ "1.1;2.2;3.3;4.4;5.5;6.6;7.7;8.8;9.9;10.0;11.1;12.2;13.3;\n"
+ "1.1;2.2;3.3;4.4;5.5;6.6;7.7;8.8;9.9;10.0;11.1;12.2;13.3;\n"
+ "1.1;2.2;3.3;4.4;5.5;6.6;7.7;8.8;9.9;10.0;11.1;12.2;13.3;\n"
+ "1.1;2.2;3.3;4.4;5.5;6.6;7.7;8.8;9.9;10.0;11.1;12.2;13.3;\n"
+ "1.1;2.2;3.3;4.4;5.5;6.6;7.7;8.8;9.9;10.0;11.1;12.2;13.3;\n"
+ "1.1;2.2;3.3;4.4;5.5;6.6;7.7;8.8;9.9;10.0;11.1;12.2;13.3;\n"
+ "1.1;2.2;3.3;4.4;5.5;6.6;7.7;8.8;9.9;10.0;11.1;12.2;13.3;\n"
+ "1.1;2.2;3.3;4.4;5.5;6.6;7.7;8.8;9.9;10.0;11.1;12.2;13.3;\n"
+ "1.1;2.2;3.3;4.4;5.5;6.6;7.7;8.8;9.9;10.0;11.1;12.2;13.3;\n"
+ "1.1;2.2;3.3;4.4;5.5;6.6;7.7;8.8;9.9;10.0;11.1;12.2;13.3;\n"
+ "1.1;2.2;3.3;4.4;5.5;6.6;7.7;8.8;9.9;10.0;11.1;12.2;13.3;\n"
+ "1.1;2.2;3.3;4.4;5.5;6.6;7.7;8.8;9.9;10.0;11.1;12.2;13.3;\n"
+ "1.1;2.2;3.3;4.4;5.5;6.6;7.7;8.8;9.9;10.0;11.1;12.2;13.3;\n"
+ "1.1;2.2;3.3;4.4;5.5;6.6;7.7;8.8;9.9;10.0;11.1;12.2;13.3;\n"
+ "1.1;2.2;3.3;4.4;5.5;6.6;7.7;8.8;9.9;10.0;11.1;12.2;13.3;\n"
+ "1.1;2.2;3.3;4.4;5.5;6.6;7.7;8.8;9.9;10.0;11.1;12.2;13.3;\n";


/**
* This is the reader class that reads the data and puts then in a relevant collection format
*
*/
Reader reader = new StringReader(realSequences);
List<? extends List<ObservationReal>> sequences =
ObservationSequencesReader.readSequences(new ObservationRealReader(), reader);
reader.close();


/**
* As the description states that each state is composed of two Gaussian mixture components.
*/
OpdfGaussianMixtureFactory gMixtureFactory = new OpdfGaussianMixtureFactory(2);

/**
* The manual for jahmm says that KMeans learner is a good way to initialize the hmm. It has 6 states
* and uses the two gaussian mixture models created above.
*/
KMeansLearner<ObservationReal> kml = new KMeansLearner<ObservationReal>(6, gMixtureFactory, sequences);
Hmm<ObservationReal> initHmm = kml.iterate();


/*
* As the papers states the hmm is trained in 3 iterative cycles.
*/
BaumWelchLearner bwl = new BaumWelchLearner();
Hmm<ObservationReal> learntHmm = null;
for (int i = 0; i < 3; i++) {
learntHmm = bwl.iterate(initHmm, sequences);
}

我的问题是:

Q1:mfcc数据应该以什么格式传递来训练hmm? (参见 realSeuqences 行的评论)

Q2:在语音识别中,有时我们需要通过重复同一个单词(比如说 10 次)来训练系统。这是否意味着它用这 10 个样本训练了 1 个嗯?如果是,那么如何使用同一声音的不同样本来训练一个嗯。或者它是 10 个单独训练的嗯,但标有该词?

Q3:如何在声音识别方面比较两个 hmm 模型。使用维特比距离还是 Kullback Leibler 距离更好?

最佳答案

Q1: In what format the mfcc data should be passed to train the hmm? (See comments by the realSeuqences line)

MFCC 数据必须表示为:

List<? extends List<ObservationVector>> sequences

这是一个数据序列列表。每个序列对应于单词样本,是一个 vector 列表,每个 vector 代表一个帧并包含13个MFCC值。

Q2: In speech recognition sometimes we need to train the system by repeating the same word lets say 10 times. Does it mean it trains one hmm with those 10 samples?

输入数据是每个单词的序列列表。该列表是一起处理的。

If yes then how to train one hmm with different samples of the same sound. Or is it 10 separately trained hmm but labeled with that word?

这是一个隐马尔可夫模型。 hmm 训练算法适用于每个单词的多个样本。其实需要的样本还蛮多的,10多个。

Q3: How to compare two hmm models in terms of sound recognition. Is it better to use viterbi or Kullback Leibler Distance ?

这里的“比较”是什么意思不太清楚。你希望一个 HMM 的状态比另一个 HMM 的状态少还是什么?你想用什么属性来比较。答案取决于此。

而且,需要注意的是,语音识别 HMM 训练有一些特定性(如何选择状态数、使用哪些特征、如何初始化 HMM)。因此,为了获得最佳性能,最好使用 CMUSphinx ( http://cmusphinx.sourceforge.net ) 等专用工具包,而不是通用工具包。

关于java - 用于训练 HMM 的 MFCC 数据格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10799786/

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