hmm_file = '../03gmm_hmm/exp/model_3state_2mix/10.hmm'

    # 訓練データのアライメントファイル
    align_file = \
        './exp/data/train_small/alignment'

    # 計算した事前確率ファイル
    count_file = \
        './exp/model_dnn/state_counts'

    #
    # 処理ここから
    #

    # MonoPhoneHMMクラスを呼び出す
    hmm = MonoPhoneHMM()

    # 学習前のHMMを読み込む
    hmm.load_hmm(hmm_file)

    # HMMの総状態数を得る
    num_states = hmm.num_phones * hmm.num_states

    # 出力ディレクトリ
    out_dir = os.path.dirname(count_file)

    # 出力ディレクトリが存在しない場合は作成する
    os.makedirs(out_dir, exist_ok=True)

    # 状態毎の出現カウンタ
    count = np.zeros(num_states, np.int64)
Beispiel #2
0
    # 実際は全ての発話を用いるが,時間がかかるため
    # このプログラムでは一部の発話のみを使っている
    num_utters = 50

    # 出力ディレクトリ
    out_dir = os.path.dirname(base_hmm)

    #
    # 処理ここから
    #

    # 出力ディレクトリが存在しない場合は作成する
    os.makedirs(out_dir, exist_ok=True)

    # MonoPhoneHMMクラスを呼び出す
    hmm = MonoPhoneHMM()

    # 学習前のHMMを読み込む
    hmm.load_hmm(base_hmm)

    # ラベルファイルを開き,発話ID毎の
    # ラベル情報を得る
    label_list = {}
    with open(label_file, mode='r') as f:
        for line in f:
            # 0列目は発話ID
            utt = line.split()[0]
            # 1列目以降はラベル
            lab = line.split()[1:]
            # 各要素は文字として読み込まれているので,
            # 整数値に変換する
            if insert_sil:
                phones.insert(0, phone_list[0])
                phones.append(phone_list[0])
            # phone_listを使って音素を数値に変換
            ph_int = []
            for ph in phones:
                if ph in phone_list:
                    ph_int.append(phone_list.index(ph))
                else:
                    sys.stderr.write('invalid phone %s' % (ph))
            # 単語,音素列,数値表記の辞書として
            # lexiconに追加
            lexicon.append({'word': word, 'pron': phones, 'int': ph_int})

    # MonoPhoneHMMクラスを呼び出す
    hmm = MonoPhoneHMM()

    # HMMを読み込む
    hmm.load_hmm(hmm_file)

    # 特徴量リストファイルを開き,
    # 発話毎に音声認識を行う
    with open(feat_scp, mode='r') as f:
        for line in f:
            # 0列目は発話ID
            utt = line.split()[0]
            # 1列目はファイルパス
            ff = line.split()[1]
            # 3列目は次元数
            nd = int(line.split()[3])
Beispiel #4
0
    # Trueの場合,文章の先頭と末尾に
    # ポーズがあることを前提とする
    insert_sil = True

    # DNN学習時に出力した設定ファイル
    config_file = os.path.join(\
                      os.path.dirname(dnn_file),
                      'config.json')

    #
    # 設定ここまで
    #

    # MonoPhoneHMMクラスを呼び出す
    hmm = MonoPhoneHMM()
    # HMMを読み込む
    hmm.load_hmm(hmm_file)

    # 設定ファイルを読み込む
    with open(config_file, mode='r') as f:
        config = json.load(f)

    # 読み込んだ設定を反映する
    # 中間層のレイヤー数
    num_layers = config['num_layers']
    # 中間層の次元数
    hidden_dim = config['hidden_dim']
    # spliceフレーム数
    splice = config['splice']
Beispiel #5
0
    # Trueの場合,文章の先頭と末尾に
    # ポーズがあることを前提とする
    insert_sil = True

    # DNN学習時に出力した設定ファイル
    config_file = os.path.join(\
                      os.path.dirname(dnn_file),
                      'config.json')

    #
    # 設定ここまで
    #

    # MonoPhoneHMMクラスを呼び出す
    hmm = MonoPhoneHMM()
    # HMMを読み込む
    hmm.load_hmm(hmm_file)

    # 設定ファイルを読み込む
    with open(config_file, mode='r') as f:
        config = json.load(f)

    # 読み込んだ設定を反映する
    # 中間層のレイヤー数
    num_layers = config['num_layers']
    # 中間層の次元数
    hidden_dim = config['hidden_dim']
    # spliceフレーム数
    splice = config['splice']
Beispiel #6
0
    os.makedirs(out_dir, exist_ok=True)

    # 特徴量の平均/標準偏差ファイルを読み込む
    with open(mean_std_file, mode='r') as f:
        # 全行読み込み
        lines = f.readlines()
        # 1行目(0始まり)が平均値ベクトル(mean),
        # 3行目が標準偏差ベクトル(std)
        mean_line = lines[1]
        std_line = lines[3]
        # スペース区切りのリストに変換
        mean = mean_line.split()
        std = std_line.split()
        # numpy arrayに変換
        mean = np.array(mean, dtype=np.float64)
        std = np.array(std, dtype=np.float64)
        # 標準偏差を分散に変換
        var = std**2

    # MonoPhoneHMMクラスを呼び出す
    hmm = MonoPhoneHMM()

    # HMMプロトタイプを読み込む
    hmm.load_hmm(hmmproto)

    # フラットスタート初期化を実行
    hmm.flat_init(mean, var)

    # HMMのプロトタイプをjson形式で保存
    hmm.save_hmm(os.path.join(out_dir, '0.hmm'))
    # 出力フォルダ
    out_dir = \
      './exp/model_%dstate_1mix' % (num_states)

    #
    # 処理ここから
    #
    # 出力ディレクトリが存在しない場合は作成する
    os.makedirs(out_dir, exist_ok=True)

    # 音素リストファイルを開き,phone_listに格納
    phone_list = []
    with open(phone_list_file, mode='r') as f:
        for line in f:
            # 音素リストファイルから音素を取得
            phone = line.split()[0]
            # 音素リストの末尾に加える
            phone_list.append(phone)

    # MonoPhoneHMMクラスを呼び出す
    hmm = MonoPhoneHMM()

    # HMMのプロトタイプを作成する
    hmm.make_proto(phone_list, num_states,
                   prob_loop, num_dims)

    # HMMのプロトタイプをjson形式で保存
    hmm.save_hmm(os.path.join(out_dir, 'hmmproto'))

    # フレームサイズ [ミリ秒]
    frame_size = 25
    # フレームシフト [ミリ秒]
    # 特徴量抽出時に指定した値と同じものを使用する
    frame_shift = 10

    # プロットを出力するファイル(pngファイル)
    out_plot = './alignment.png'

    #
    # 処理ここから
    #

    # MonoPhoneHMMクラスを呼び出す
    hmm = MonoPhoneHMM()

    # HMMを読み込む
    hmm.load_hmm(hmm_file)

    # ラベルファイルを開き,発話ID毎のラベル情報を得る
    label_list = {}
    with open(label_file, mode='r') as f:
        for line in f:
            # 0列目は発話ID
            utt = line.split()[0]
            # 1列目以降はラベル
            lab = line.split()[1:]
            # 各要素は文字として読み込まれているので,
            # 整数値に変換する
            lab = np.int64(lab)