29 int main(
int argc,
char *argv[]) {
31 using namespace kaldi;
34 typedef kaldi::int64 int64;
37 "Propagate the features through raw neural network model " 38 "and write the output.\n" 39 "If --apply-exp=true, apply the Exp() function to the output " 40 "before writing it out.\n" 42 "Usage: nnet3-compute [options] <nnet-in> <features-rspecifier> <matrix-wspecifier>\n" 43 " e.g.: nnet3-compute final.raw scp:feats.scp ark:nnet_prediction.ark\n" 44 "See also: nnet3-compute-from-egs, nnet3-chain-compute-post\n" 45 "Note: this program does not currently make very efficient use of the GPU.\n";
53 bool apply_exp =
false, use_priors =
false;
54 std::string use_gpu =
"yes";
56 std::string ivector_rspecifier,
57 online_ivector_rspecifier,
59 int32 online_ivector_period = 0;
62 po.
Register(
"ivectors", &ivector_rspecifier,
"Rspecifier for " 63 "iVectors as vectors (i.e. not estimated online); per utterance " 64 "by default, or per speaker if you provide the --utt2spk option.");
65 po.
Register(
"utt2spk", &utt2spk_rspecifier,
"Rspecifier for " 66 "utt2spk option used to get ivectors per speaker");
67 po.
Register(
"online-ivectors", &online_ivector_rspecifier,
"Rspecifier for " 68 "iVectors estimated online, as matrices. If you supply this," 69 " you must set the --online-ivector-period option.");
70 po.
Register(
"online-ivector-period", &online_ivector_period,
"Number of frames " 71 "between iVectors in matrices supplied to the --online-ivectors " 73 po.
Register(
"apply-exp", &apply_exp,
"If true, apply exp function to " 76 "yes|no|optional|wait, only has effect if compiled with CUDA");
77 po.
Register(
"use-priors", &use_priors,
"If true, subtract the logs of the " 78 "priors stored with the model (in this case, " 79 "a .mdl file is expected as input).");
82 CuDevice::RegisterDeviceOptions(&po);
93 CuDevice::Instantiate().SelectGpuId(use_gpu);
96 std::string nnet_rxfilename = po.
GetArg(1),
97 feature_rspecifier = po.
GetArg(2),
98 matrix_wspecifier = po.
GetArg(3);
105 Input ki(nnet_rxfilename, &binary);
111 Nnet &nnet = (use_priors ? am_nnet.
GetNnet() : raw_nnet);
118 priors = am_nnet.
Priors();
121 online_ivector_rspecifier);
123 ivector_rspecifier, utt2spk_rspecifier);
129 int32 num_success = 0, num_fail = 0;
130 int64 frame_count = 0;
134 for (; !feature_reader.
Done(); feature_reader.
Next()) {
135 std::string utt = feature_reader.
Key();
137 if (features.NumRows() == 0) {
138 KALDI_WARN <<
"Zero-length utterance: " << utt;
144 if (!ivector_rspecifier.empty()) {
145 if (!ivector_reader.
HasKey(utt)) {
146 KALDI_WARN <<
"No iVector available for utterance " << utt;
150 ivector = &ivector_reader.
Value(utt);
153 if (!online_ivector_rspecifier.empty()) {
154 if (!online_ivector_reader.
HasKey(utt)) {
155 KALDI_WARN <<
"No online iVector available for utterance " << utt;
159 online_ivectors = &online_ivector_reader.
Value(utt);
166 ivector, online_ivectors,
167 online_ivector_period);
171 for (int32 t = 0; t < nnet_computer.
NumFrames(); t++) {
179 matrix_writer.
Write(utt, matrix);
181 frame_count += features.NumRows();
186 CuDevice::Instantiate().PrintProfile();
188 double elapsed = timer.
Elapsed();
190 <<
"s: real-time factor assuming 100 frames/sec is " 191 << (elapsed*100.0/frame_count);
192 KALDI_LOG <<
"Done " << num_success <<
" utterances, failed for " 195 if (num_success != 0)
return 0;
197 }
catch(
const std::exception &e) {
198 std::cerr << e.what();
This code computes Goodness of Pronunciation (GOP) and extracts phone-level pronunciation feature for...
void CollapseModel(const CollapseModelConfig &config, Nnet *nnet)
This function modifies the neural net for efficiency, in a way that suitable to be done in test time...
void PrintUsage(bool print_command_line=false)
Prints the usage documentation [provided in the constructor].
This class is for when you are reading something in random access, but it may actually be stored per-...
This class enables you to do the compilation and optimization in one call, and also ensures that if t...
void SetBatchnormTestMode(bool test_mode, Nnet *nnet)
This function affects only components of type BatchNormComponent.
A templated class for writing objects to an archive or script file; see The Table concept...
const Nnet & GetNnet() const
void GetOutputForFrame(int32 frame, VectorBase< BaseFloat > *output)
void Write(const std::string &key, const T &value) const
void Read(std::istream &is, bool binary)
void Register(const std::string &name, bool *ptr, const std::string &doc)
void ReadKaldiObject(const std::string &filename, Matrix< float > *m)
This file contains some miscellaneous functions dealing with class Nnet.
Allows random access to a collection of objects in an archive or script file; see The Table concept...
void SetDropoutTestMode(bool test_mode, Nnet *nnet)
This function affects components of child-classes of RandomComponent.
The class ParseOptions is for parsing command-line options; see Parsing command-line options for more...
const T & Value(const std::string &key)
void Read(std::istream &is, bool binary)
void Register(OptionsItf *opts)
int main(int argc, char *argv[])
A templated class for reading objects sequentially from an archive or script file; see The Table conc...
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.
bool HasKey(const std::string &key)
const VectorBase< BaseFloat > & Priors() const
int NumArgs() const
Number of positional parameters (c.f. argc-1).
A class representing a vector.
const T & Value(const std::string &key)
NnetOptimizeOptions optimize_config
double Elapsed() const
Returns time in seconds.
Represents a non-allocating general vector which can be defined as a sub-vector of higher-level vecto...
Config class for the CollapseModel function.