26 int main(
int argc,
char *argv[]) {
28 using namespace kaldi;
32 "Precompute Gaussian indices for pruning\n" 33 " (e.g. in training UBMs, SGMMs, tied-mixture systems)\n" 34 " For each frame, gives a list of the n best Gaussian indices,\n" 35 " sorted from best to worst.\n" 36 "See also: gmm-gselect, copy-gselect, fgmm-gselect-to-post\n" 37 "Usage: fgmm-gselect [options] <model-in> <feature-rspecifier> <gselect-wspecifier>\n" 38 "The --gselect option (which takes an rspecifier) limits selection to a subset\n" 40 "e.g.: fgmm-gselect \"--gselect=ark:gunzip -c bigger.gselect.gz|\" --n=20 1.gmm \"ark:feature-command |\" \"ark,t:|gzip -c >1.gselect.gz\"\n";
43 int32 num_gselect = 50;
44 std::string gselect_rspecifier;
45 std::string likelihood_wspecifier;
46 po.
Register(
"n", &num_gselect,
"Number of Gaussians to keep per frame\n");
47 po.
Register(
"write-likes", &likelihood_wspecifier,
"Wspecifier for likelihoods per " 49 po.
Register(
"gselect", &gselect_rspecifier,
"rspecifier for gselect objects " 50 "to limit the search to");
58 std::string model_filename = po.
GetArg(1),
59 feature_rspecifier = po.
GetArg(2),
60 gselect_wspecifier = po.
GetArg(3);
67 if (num_gselect > num_gauss) {
68 KALDI_WARN <<
"You asked for " << num_gselect <<
" Gaussians but GMM " 69 <<
"only has " << num_gauss <<
", returning this many. " 70 <<
"Note: this means the Gaussian selection is pointless.";
71 num_gselect = num_gauss;
74 double tot_like = 0.0;
75 kaldi::int64 tot_t = 0;
82 int32 num_done = 0, num_err = 0;
83 for (; !feature_reader.
Done(); feature_reader.
Next()) {
84 int32 tot_t_this_file = 0;
double tot_like_this_file = 0;
85 std::string utt = feature_reader.
Key();
87 vector<vector<int32> > gselect(mat.
NumRows());
88 tot_t_this_file += mat.
NumRows();
89 if(gselect_rspecifier !=
"") {
90 if (!gselect_reader.
HasKey(utt)) {
91 KALDI_WARN <<
"No gselect information for utterance " << utt;
95 const vector<vector<int32> > &preselect = gselect_reader.
Value(utt);
96 if (preselect.size() !=
static_cast<size_t>(mat.
NumRows())) {
97 KALDI_WARN <<
"Input gselect for utterance " << utt <<
" has wrong size " 98 << preselect.size() <<
" vs. " << mat.
NumRows();
103 tot_like_this_file +=
105 num_gselect, &(gselect[
i]));
108 tot_like_this_file +=
112 gselect_writer.
Write(utt, gselect);
113 if (num_done % 10 == 0)
114 KALDI_LOG <<
"For " << num_done <<
"'th file, average UBM likelihood over " 115 << tot_t_this_file <<
" frames is " 116 << (tot_like_this_file/tot_t_this_file);
117 tot_t += tot_t_this_file;
118 tot_like += tot_like_this_file;
120 if(likelihood_wspecifier !=
"")
121 likelihood_writer.
Write(utt, tot_like_this_file);
125 KALDI_LOG <<
"Done " << num_done <<
" files, " << num_err
126 <<
" with errors, average UBM log-likelihood is " 127 << (tot_like/tot_t) <<
" over " << tot_t <<
" frames.";
129 if (num_done != 0)
return 0;
131 }
catch(
const std::exception &e) {
132 std::cerr << e.what();
This code computes Goodness of Pronunciation (GOP) and extracts phone-level pronunciation feature for...
int main(int argc, char *argv[])
Definition for Gaussian Mixture Model with full covariances.
void PrintUsage(bool print_command_line=false)
Prints the usage documentation [provided in the constructor].
A templated class for writing objects to an archive or script file; see The Table concept...
void Write(const std::string &key, const T &value) const
void Register(const std::string &name, bool *ptr, const std::string &doc)
void ReadKaldiObject(const std::string &filename, Matrix< float > *m)
Allows random access to a collection of objects in an archive or script file; see The Table concept...
The class ParseOptions is for parsing command-line options; see Parsing command-line options for more...
const SubVector< Real > Row(MatrixIndexT i) const
Return specific row of matrix [const].
const T & Value(const std::string &key)
BaseFloat GaussianSelectionPreselect(const VectorBase< BaseFloat > &data, const std::vector< int32 > &preselect, int32 num_gselect, std::vector< int32 > *output) const
Get gaussian selection information for one frame.
A templated class for reading objects sequentially from an archive or script file; see The Table conc...
BaseFloat GaussianSelection(const VectorBase< BaseFloat > &data, int32 num_gselect, std::vector< int32 > *output) const
Get gaussian selection information for one frame.
int Read(int argc, const char *const *argv)
Parses the command line options and fills the ParseOptions-registered variables.
std::string GetArg(int param) const
Returns one of the positional parameters; 1-based indexing for argc/argv compatibility.
int32 NumGauss() const
Returns the number of mixture components in the GMM.
bool HasKey(const std::string &key)
int NumArgs() const
Number of positional parameters (c.f. argc-1).
#define KALDI_ASSERT(cond)
MatrixIndexT NumRows() const
Returns number of rows (or zero for empty matrix).