Próbuję nauczyć realizację HMM GMM i stworzył prosty model wykryć jakieś pewne dźwięki (połączenia zwierzęce itp)MATLAB Murphy'ego HMM Toolbox
Staram się trenować HMM (Ukryty model Markowa) sieci z GMM (Mieszanki Gaussa) w MATLAB.
Mam kilka pytań, nie mogłem być w stanie znaleźć żadnych informacji na temat.
1) Jeżeli mhmm_em()
funkcja nazywa się w pętli dla każdego HMM-państwa lub jest automatycznie zrobić?
Przykładowo:
for each state
Initialize GMM’s and get parameters (use mixgauss_init.m)
end
Train HMM with EM (use mhmm_em.m)
2)
[LL, prior1, transmat1, mu1, Sigma1, mixmat1] = ...
mhmm_em(MFCCs, prior0, transmat0, mu0, Sigma0, mixmat0, 'max_iter', M);
ostatni parametr powinien być liczba Gaussians ORa number_of_states-1?
3) Jeśli szukamy maksymalnego prawdopodobieństwa, to gdzie do gry wchodzi Viterbi?
Powiedz, czy chcę wykryć pewien rodzaj zwierzęcego/ludzkiego połączenia po treningu mojego modelu z wektorami cech akustycznych, które wydobyłem, czy nadal powinienem potrzebować algorytmu Viterbiego w trybie testowym?
To trochę dezorientuje mnie i będę bardzo wdzięczny za wyjaśnienie tej części.
Wszelkie uwagi dotyczące kodu pod względem logiki HMM GMM również będą mile widziane.
Dzięki
Oto moja rutyna MATLAB;
O = 21; % Number of coefficients in a vector(coefficient)
M = 10; % Number of Gaussian mixtures
Q = 3; % Number of states (left to right)
% MFCC Parameters
Tw = 128; % analysis frame duration (ms)
Ts = 64; % analysis frame shift (ms)
alpha = 0.95; % preemphasis coefficient
R = [ 1 1000 ]; % frequency range to consider
f_bank = 20; % number of filterbank channels
C = 21; % number of cepstral coefficients
L = 22; % cepstral sine lifter parameter(?)
%Training
[speech, fs, nbits ] = wavread('Train.wav');
[MFCCs, FBEs, frames ] = mfcc(speech, fs, Tw, Ts, alpha, hamming, R, f_bank, C, L);
cov_type = 'full'; %the covariance type that is chosen as ҦullҠfor gaussians.
prior0 = normalise(rand(Q,1));
transmat0 = mk_stochastic(rand(Q,Q));
[mu0, Sigma0] = mixgauss_init(Q*M, dat, cov_type, 'kmeans');
mu0 = reshape(mu0, [O Q M]);
Sigma0 = reshape(Sigma0, [O O Q M]);
mixmat0 = mk_stochastic(rand(Q,M));
[LL, prior1, transmat1, mu1, Sigma1, mixmat1] = ...
mhmm_em(MFCCs, prior0, transmat0, mu0, Sigma0, mixmat0, 'max_iter', M);
%Testing
for i = 1:length(filelist)
fprintf('Processing %s\n', filelist(i).name);
[speech_tst, fs, nbits ] = wavread(filelist(i).name);
[MFCCs, FBEs, frames ] = ...
mfcc(speech_tst, fs, Tw, Ts, alpha, hamming, R, f_bank, C, L);
loglik(i) = mhmm_logprob(MFCCs,prior1, transmat1, mu1, Sigma1, mixmat1);
end;
[Winner, Winner_idx] = max(loglik);
Wielkie dzięki za odpowiedź Nikolay. – bluemustang