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])
Example #2
0
    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)
Example #3
0
    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])
Example #4
0
    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)
Example #5
0
##  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)
Example #6
0
##  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'])