int getGMMSize() { GMMDiag gmm = hmmsHTK.gmms.get(0); return gmm.getNgauss(); }
@Override public String toString() { StringBuilder sb = new StringBuilder (); for (int i = 0; i < getNgauss(); i++) { sb.append(getMean(i, 0)).append(' ').append(getVar(i, 0)).append( '\n'); } return sb.toString(); } }
public PrintWriter saveHTKheader(String nomFich, String parmKind) { try { PrintWriter fout = new PrintWriter(new FileWriter(nomFich)); fout.println("~o"); fout.println("<HMMSETID> tree"); fout.println("<STREAMINFO> 1 " + getNcoefs()); fout.println("<VECSIZE> " + getNcoefs() + "<NULLD>" + parmKind + "<DIAGC>"); fout.println("~r \"rtree_1\""); fout.println("<REGTREE> 1"); fout.println("<TNODE> 1 " + getNgauss()); return fout; } catch (IOException e) { e.printStackTrace(); return null; } }
public void saveHTKState(PrintWriter fout) { fout.println("<NUMMIXES> " + getNgauss()); for (int i = 1; i <= getNgauss(); i++) { fout.println("<MIXTURE> " + i + ' ' + getWeight(i - 1)); fout.println("<RCLASS> 1"); fout.println("<MEAN> " + getNcoefs()); for (int j = 0; j < getNcoefs(); j++) { fout.print(getMean(i - 1, j) + " "); } fout.println(); fout.println("<VARIANCE> " + getNcoefs()); for (int j = 0; j < getNcoefs(); j++) { fout.print(getVar(i - 1, j) + " "); } fout.println(); } }
fout.println("~r \"rtree_1\""); fout.println("<REGTREE> 1"); fout.println("<TNODE> 1 " + getNgauss()); fout.println("~h \"" + nomHMM + '\"'); fout.println("<BEGINHMM>"); fout.println("<NUMSTATES> 3"); fout.println("<STATE> 2"); fout.println("<NUMMIXES> " + getNgauss()); for (int i = 1; i <= getNgauss(); i++) { fout.println("<MIXTURE> " + i + ' ' + getWeight(i - 1)); fout.println("<RCLASS> 1");
/** * * @param g second GMM for the merge * @param w1 weight of the first GMM for the merge * @return gaussian */ public GMMDiag merge(GMMDiag g, float w1) { GMMDiag res = new GMMDiag(getNgauss() + g.getNgauss(), getNcoefs()); for (int i = 0; i < getNgauss(); i++) { System.arraycopy(means[i], 0, res.means[i], 0, getNcoefs()); System.arraycopy(covar[i], 0, res.covar[i], 0, getNcoefs()); res.setWeight(i, getWeight(i) * w1); } for (int i = 0; i < g.getNgauss(); i++) { System.arraycopy(g.means[i], 0, res.means[ngauss + i], 0, getNcoefs()); System.arraycopy(g.covar[i], 0, res.covar[ngauss + i], 0, getNcoefs()); res.setWeight(ngauss + i, g.getWeight(i) * (1f - w1)); } res.precomputeDistance(); return res; }
/** * 2 GMMs are considered to be equal when all of their parameters do not * differ from more than 1% * @param g second gmm to compare to * @return if GMMs are equal */ public boolean isEqual(GMMDiag g) { if (getNgauss() != g.getNgauss()) return false; if (getNgauss() != g.getNcoefs()) return false; for (int i = 0; i < getNgauss(); i++) { if (isDiff(getWeight(i), g.getWeight(i))) return false; for (int j = 0; j < getNcoefs(); j++) { if (isDiff(getMean(i, j), g.getMean(i, j))) return false; if (isDiff(getVar(i, j), g.getVar(i, j))) return false; } } return true; }
public GMMDiag getMarginal(boolean[] mask) { int nc = 0; for (boolean flag : mask) if (flag) nc++; GMMDiag g = new GMMDiag(getNgauss(), nc); int curc = 0; for (int j = 0; j < ncoefs; j++) { if (mask[j]) { for (int i = 0; i < ngauss; i++) { g.setMean(i, curc, getMean(i, j)); g.setVar(i, curc, getVar(i, j)); } curc++; } } for (int i = 0; i < ngauss; i++) { g.setWeight(i, getWeight(i)); } g.precomputeDistance(); return g; }
int getGMMSize() { GMMDiag gmm = hmmsHTK.gmms.get(0); return gmm.getNgauss(); }
@Override public String toString() { StringBuilder sb = new StringBuilder (); for (int i = 0; i < getNgauss(); i++) { sb.append(getMean(i, 0)).append(' ').append(getVar(i, 0)).append( '\n'); } return sb.toString(); } }
public PrintWriter saveHTKheader(String nomFich, String parmKind) { try { PrintWriter fout = new PrintWriter(new FileWriter(nomFich)); fout.println("~o"); fout.println("<HMMSETID> tree"); fout.println("<STREAMINFO> 1 " + getNcoefs()); fout.println("<VECSIZE> " + getNcoefs() + "<NULLD>" + parmKind + "<DIAGC>"); fout.println("~r \"rtree_1\""); fout.println("<REGTREE> 1"); fout.println("<TNODE> 1 " + getNgauss()); return fout; } catch (IOException e) { e.printStackTrace(); return null; } }
public void saveHTKState(PrintWriter fout) { fout.println("<NUMMIXES> " + getNgauss()); for (int i = 1; i <= getNgauss(); i++) { fout.println("<MIXTURE> " + i + ' ' + getWeight(i - 1)); fout.println("<RCLASS> 1"); fout.println("<MEAN> " + getNcoefs()); for (int j = 0; j < getNcoefs(); j++) { fout.print(getMean(i - 1, j) + " "); } fout.println(); fout.println("<VARIANCE> " + getNcoefs()); for (int j = 0; j < getNcoefs(); j++) { fout.print(getVar(i - 1, j) + " "); } fout.println(); } }
fout.println("~r \"rtree_1\""); fout.println("<REGTREE> 1"); fout.println("<TNODE> 1 " + getNgauss()); fout.println("~h \"" + nomHMM + '\"'); fout.println("<BEGINHMM>"); fout.println("<NUMSTATES> 3"); fout.println("<STATE> 2"); fout.println("<NUMMIXES> " + getNgauss()); for (int i = 1; i <= getNgauss(); i++) { fout.println("<MIXTURE> " + i + ' ' + getWeight(i - 1)); fout.println("<RCLASS> 1");
/** * * @param g second GMM for the merge * @param w1 weight of the first GMM for the merge * @return gaussian */ public GMMDiag merge(GMMDiag g, float w1) { GMMDiag res = new GMMDiag(getNgauss() + g.getNgauss(), getNcoefs()); for (int i = 0; i < getNgauss(); i++) { System.arraycopy(means[i], 0, res.means[i], 0, getNcoefs()); System.arraycopy(covar[i], 0, res.covar[i], 0, getNcoefs()); res.setWeight(i, getWeight(i) * w1); } for (int i = 0; i < g.getNgauss(); i++) { System.arraycopy(g.means[i], 0, res.means[ngauss + i], 0, getNcoefs()); System.arraycopy(g.covar[i], 0, res.covar[ngauss + i], 0, getNcoefs()); res.setWeight(ngauss + i, g.getWeight(i) * (1f - w1)); } res.precomputeDistance(); return res; }
/** * 2 GMMs are considered to be equal when all of their parameters do not * differ from more than 1% * @param g second gmm to compare to * @return if GMMs are equal */ public boolean isEqual(GMMDiag g) { if (getNgauss() != g.getNgauss()) return false; if (getNgauss() != g.getNcoefs()) return false; for (int i = 0; i < getNgauss(); i++) { if (isDiff(getWeight(i), g.getWeight(i))) return false; for (int j = 0; j < getNcoefs(); j++) { if (isDiff(getMean(i, j), g.getMean(i, j))) return false; if (isDiff(getVar(i, j), g.getVar(i, j))) return false; } } return true; }
public GMMDiag getMarginal(boolean[] mask) { int nc = 0; for (boolean flag : mask) if (flag) nc++; GMMDiag g = new GMMDiag(getNgauss(), nc); int curc = 0; for (int j = 0; j < ncoefs; j++) { if (mask[j]) { for (int i = 0; i < ngauss; i++) { g.setMean(i, curc, getMean(i, j)); g.setVar(i, curc, getVar(i, j)); } curc++; } } for (int i = 0; i < ngauss; i++) { g.setWeight(i, getWeight(i)); } g.precomputeDistance(); return g; }