Skip to content

Commit 59255ae

Browse files
authored
[src] Making ivector extractor tolerate dim mismatch due to pitch (kaldi-asr#3727)
1 parent 249e2b2 commit 59255ae

File tree

3 files changed

+21
-1
lines changed

3 files changed

+21
-1
lines changed

src/online2/online-ivector-feature.cc

+7
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,13 @@ void OnlineIvectorExtractionInfo::Init(
6767
this->Check();
6868
}
6969

70+
int32 OnlineIvectorExtractionInfo::ExpectedFeatureDim() const {
71+
int32 num_splice = 1 + splice_opts.left_context + splice_opts.right_context,
72+
full_dim = diag_ubm.Dim();
73+
KALDI_ASSERT(full_dim % num_splice == 0 &&
74+
"Something went wrong getting the feature dimension");
75+
return full_dim / num_splice;
76+
}
7077

7178
void OnlineIvectorExtractionInfo::Check() const {
7279
KALDI_ASSERT(global_cmvn_stats.NumRows() == 2);

src/online2/online-ivector-feature.h

+2
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,8 @@ struct OnlineIvectorExtractionInfo {
193193

194194
void Init(const OnlineIvectorExtractionConfig &config);
195195

196+
int32 ExpectedFeatureDim() const;
197+
196198
// This constructor creates a version of this object where everything
197199
// is empty or zero.
198200
OnlineIvectorExtractionInfo();

src/online2bin/ivector-extract-online2.cc

+12-1
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ int main(int argc, char *argv[]) {
9494
RandomAccessBaseFloatVectorReader frame_weights_reader(frame_weights_rspecifier);
9595
BaseFloatMatrixWriter ivector_writer(ivectors_wspecifier);
9696

97+
bool warned_dim = false;
9798
for (; !spk2utt_reader.Done(); spk2utt_reader.Next()) {
9899
std::string spk = spk2utt_reader.Key();
99100
const std::vector<std::string> &uttlist = spk2utt_reader.Value();
@@ -108,7 +109,17 @@ int main(int argc, char *argv[]) {
108109
}
109110
const Matrix<BaseFloat> &feats = feature_reader.Value(utt);
110111

111-
OnlineMatrixFeature matrix_feature(feats);
112+
int32 feat_dim = feats.NumCols();
113+
if (feat_dim == ivector_info.ExpectedFeatureDim() + 3) {
114+
if (!warned_dim) {
115+
KALDI_WARN << "Feature dimension is too large by 3, assuming there are "
116+
"pitch features and removing the last 3 dims.";
117+
warned_dim = true;
118+
}
119+
feat_dim -= 3;
120+
}
121+
122+
OnlineMatrixFeature matrix_feature(feats.ColRange(0, feat_dim));
112123

113124
OnlineIvectorFeature ivector_feature(ivector_info,
114125
&matrix_feature);

0 commit comments

Comments
 (0)