def getNextSplitData(self): p1 = Popen([ 'apply-cmvn', '--print-args=false', '--norm-vars=true', '--utt2spk=ark:' + self.data + '/split' + str(self.numSplit) + 'utt/' + str(self.splitDataCounter) + '/utt2spk', 'scp:' + self.data + '/split' + str(self.numSplit) + 'utt/' + str(self.splitDataCounter) + '/cmvn.scp', 'scp:' + self.data + '/split' + str(self.numSplit) + 'utt/' + str(self.splitDataCounter) + '/feats.scp', 'ark:-' ], stdout=PIPE, stderr=DEVNULL) p2 = Popen(['add-deltas', '--print-args=false', 'ark:-', 'ark:-'], stdin=p1.stdout, stdout=PIPE) p1.stdout.close() with open( self.labelDir.name + '/' + str(self.splitDataCounter) + '.pickle', 'rb') as f: labels = pickle.load(f) featList = [] labelList = [] while True: uid, featMat = kaldiIO.readUtterance(p2.stdout) if uid == None: return (numpy.vstack(featList), numpy.hstack(labelList)) if uid in labels: labelMat = self.getBinaryLabels(labels[uid]) featList.append(featMat) labelList.append(labels[uid])
def getNextSplitData (self): p1 = Popen (['apply-cmvn','--print-args=false','--norm-vars=true', '--utt2spk=ark:' + self.data + '/split' + str(self.numSplit) + '/' + str(self.splitDataCounter) + '/utt2spk', 'scp:' + self.data + '/split' + str(self.numSplit) + '/' + str(self.splitDataCounter) + '/cmvn.scp', 'scp:' + self.data + '/split' + str(self.numSplit) + '/' + str(self.splitDataCounter) + '/feats.scp','ark:-'], stdout=PIPE, stderr=DEVNULL) p2 = Popen (['splice-feats','--print-args=false','--left-context=5','--right-context=5', 'ark:-','ark:-'], stdin=p1.stdout, stdout=PIPE) p1.stdout.close() p3 = Popen (['add-deltas','--print-args=false','ark:-','ark:-'], stdin=p2.stdout, stdout=PIPE) p2.stdout.close() with open (self.labelDir.name + '/' + str(self.splitDataCounter) + '.pickle', 'rb') as f: labels = pickle.load (f) featList = [] labelList = [] while True: uid, featMat = kaldiIO.readUtterance (p3.stdout) if uid == None: return (numpy.vstack(featList), numpy.vstack(labelList)) if uid in labels: labelMat = self.getBinaryLabels(labels[uid]) featList.append (featMat) labelList.append (labelMat)
def getNextSplitData(self): p = Popen([ 'splice-feats', '--print-args=false', '--left-context=' + self.context, '--right-context=' + self.context, 'scp:' + self.data + '/split' + str(self.numSplit) + 'utt/' + str(self.splitDataCounter) + '/feats.scp', 'ark:-' ], stdout=PIPE) with open( self.labelDir.name + '/' + str(self.splitDataCounter) + '.pickle', 'rb') as f: labels = pickle.load(f) ##ipdb.set_trace() featList = [] labelList = [] while True: uid, featMat = kaldiIO.readUtterance(p.stdout) if uid == None: return (numpy.vstack(featList), numpy.hstack(labelList)) if uid in labels: ## NOTE: The featMat may contain more frames if the labels were generated from ## MFCCs extracted on 25ms frames (and here we are using 10ms frames). Using ## these labels is fairly OK because the frame rate (10ms) is unchanged. We ## discard the last few frames that have no corresponding labels. featList.append(featMat[0:len(labels[uid])]) labelList.append(labels[uid])
def getNextSplitData(self): p1 = Popen([ 'apply-cmvn', '--print-args=false', '--norm-vars=true', '--utt2spk=ark:' + self.data + '/split' + str(self.numSplit) + 'utt/' + str(self.splitDataCounter) + '/utt2spk', 'scp:' + self.data + '/split' + str(self.numSplit) + 'utt/' + str(self.splitDataCounter) + '/cmvn.scp', 'scp:' + self.data + '/split' + str(self.numSplit) + 'utt/' + str(self.splitDataCounter) + '/feats.scp', 'ark:-' ], stdout=PIPE, stderr=DEVNULL) p2 = Popen([ 'splice-feats', '--print-args=false', '--left-context=' + str(self.left), '--right-context=' + str(self.right), 'ark:-', 'ark:-' ], stdin=p1.stdout, stdout=PIPE) p1.stdout.close() with open( self.labelDir.name + '/' + str(self.splitDataCounter) + '.pickle', 'rb') as f: labels = pickle.load(f) #print(labels) featList = [] labelList = [] while True: uid, featMat = kaldiIO.readUtterance(p2.stdout) if uid == None: self.lable_list = labelList return (numpy.vstack(featList), numpy.hstack(labelList)) if uid in labels: row, col = featMat.shape fillNum = self.timeSteps - (row % self.timeSteps) fillRight = fillNum // 2 fillLeft = fillNum - fillRight featMat = numpy.concatenate([ numpy.tile(featMat[0], (fillLeft, 1)), featMat, numpy.tile(featMat[-1], (fillRight, 1)) ]) #print(featMat.shape) labels4uid = labels[uid] labels4uid = numpy.concatenate([ numpy.tile(labels4uid[0], (fillLeft, )), labels4uid, numpy.tile(labels4uid[-1], (fillRight, )) ]) featList.append(featMat) labelList.append(labels4uid)
## You should have received a copy of the GNU General Public License ## along with this program. If not, see <http://www.gnu.org/licenses/>. import sys import numpy import keras import kaldiIO from signal import signal, SIGPIPE, SIG_DFL if __name__ == '__main__': model = sys.argv[1] if not model.endswith('.h5'): raise TypeError( 'Unsupported model type. Please use h5 format. Update Keras if needed' ) ## Load model m = keras.models.load_model(model) arkIn = sys.stdin.buffer arkOut = sys.stdout.buffer encoding = sys.stdout.encoding signal(SIGPIPE, SIG_DFL) uttId, featMat = kaldiIO.readUtterance(arkIn) while uttId: logProbMat = numpy.log(m.predict(featMat)) kaldiIO.writeUtterance(uttId, logProbMat, arkOut, encoding) uttId, featMat = kaldiIO.readUtterance(arkIn)
## You should have received a copy of the GNU General Public License ## along with this program. If not, see <http://www.gnu.org/licenses/>. import sys import numpy import keras import kaldiIO from signal import signal, SIGPIPE, SIG_DFL if __name__ == '__main__': model = sys.argv[1] if not model.endswith('.h5'): raise TypeError ('Unsupported model type. Please use h5 format. Update Keras if needed') ## Load model m = keras.models.load_model (model) arkIn = sys.stdin.buffer arkOut = sys.stdout.buffer encoding = sys.stdout.encoding signal (SIGPIPE, SIG_DFL) uttId, featMat = kaldiIO.readUtterance(arkIn) while uttId: logProbMat = numpy.log (m.predict (featMat)) kaldiIO.writeUtterance(uttId, logProbMat, arkOut, encoding) uttId, featMat = kaldiIO.readUtterance(arkIn)
] model_list = [keras.models.load_model(m) for m in model_list] weights = list(np.ones(len(model_list))) ## Save teacher predictions on disk st = time.time() outfile = data_tr + '/teacher_predictions.ark' print('Writing teacher predictions...', outfile) p1 = Popen([ 'splice-feats', '--print-args=false', '--left-context=5', '--right-context=5', 'scp:' + data_tr + '/feats.scp', 'ark:-' ], stdout=PIPE) with open('temp_teacher.ark', 'wb') as f: while True: uid, featMat = kaldiIO.readUtterance(p1.stdout) if uid == None: break avg_prediction = geometric_mean(featMat, model_list, weights) kaldiIO.writeUtterance(uid, avg_prediction, f, sys.stdout.encoding) p1.stdout.close() et = time.time() os.rename('temp_teacher.ark', outfile) print('Done writing teacher predictions for ', data_tr, '. Time taken: ', et - st) ## Initialize data generator trGen = dataGenerator_student_tr(data_tr, ali_tr, sgmm, learning['batchSize']) cvGen = dataGenerator_student_cv(data_cv, ali_cv, sgmm, learning['batchSize'])