HTSで話者適応。少量サンプルで音響モデル作成! デモ編

Ubuntu18.04にて、HTSを使って話者適応の音響モデル(.htsvoice)を作るシリーズの第2回です。話者適応モデルは、複数話者の音声データから「平均声」をつくって、それに新たに作成したい話者の音声データの特徴量をのせることで音響モデルを作成する方法になります。少ない音声データで新たな音響モデルが作成できることが特徴です。

再びこちらのサイトを大いに参考にさせていただきました。

https://ragolun.exblog.jp/23144146/

  

3. サンプルの実行

動作確認として、サンプル用にプリセットされているデータを使って音響モデル(Htsvoice)を作成してみます。

<準備>

変数uidを定義しておかないとエラーが出るとのことなので、端末を開き、以下のコマンドを実行します。(nano以外のエディタをお使いの方は適宜読み替えてください)

~$sudo nano .bashrc

開いた~/.bashrcファイルに、以下の行を付け加えて保存します。

export uid=$USER

端末を再起動させて、以下のコマンドを実行するとユーザ名が表示されることを確認します。

~$cd HTS
~/HTS $ env | grep uid
uid=ユーザ名

このあとの処理には時間がかかるため、スリープをしないように設定しておきます。
Ubuntuなら、設定ー電源管理ーサスペンド,電源ボタンー自動サスペンドオフ
で設定可能です。

  

<サンプルの実行ー最小限の動作確認>

1. dataの編集

”HTS/HTS-demo_CMU-ARCTIC-ADAPT/data”に移動する。その中の”raw”フォルダの中身を見ると、bdl,clb,jmk,rms,sltという5つのフォルダがある。これらのうち、bdl,clb,jmk,rmsに平均声を作成するための複数話者の音声データをそれぞれ入れ、sltに適応させたい話者の音声データを入れる。最小限の動作をさせたいので、これらのすべてのフォルダの中身を10個に減らす。(例:bdlなら、cmu_us_arctic_bdl_a0001.rawからcmu_us_arctic_bdl_a0010.rawまで、等)
(念の為、もともとあった”raw”フォルダのバックアップを取っておくと安心です。)

2. 端末を開き、以下のコマンドを実行。

~$cd HTS/HTS-demo_CMU-ARCTIC-ADAPT
~/HTS/HTS-demo_CMU-ARCTIC-ADAPT $ ./configure --with-fest-search-path=$HOME/HTS/festival/festival/examples --with-sptk-search-path=$HOME/HTS/prog/SPTK/bin --with-hts-search-path=$HOME/HTS/prog/htk/bin --with-hts-engine-search-path=$HOME/HTS/prog/hts_engine_API/bin
~/HTS/HTS-demo_CMU-ARCTIC-ADAPT $ make

3. 途中経過の確認

Perlのプログラムがバックグラウンドで実行されています。以下のコマンドで様子を見ることができます。

~/HTS/HTS-demo_CMU-ARCTIC-ADAPT $ tail -f log

4. Config.pm関係のエラー

自分の場合、ここで「MLLR type is not supported!」のエラーが出ました。これは話者依存モデルのときと同様に、scripts/Config.pmのパスが通っていないため、話者依存モデル用にパスを通したConfig.pmを参照してしまっていることで起こるエラーでした。このパスを通したConfig.pm(自分の場合、/usr/share/perl/5.26/scripts/Config.pm)を、”HTS-demo_CMU-ARCTIC-ADAPT/script”にあるConfig.pmで置き換えてあげると解決しました。

~/HTS/HTS-demo_CMU-ARCTIC-ADAPT $sudo cp scripts/Config.pm /usr/share/perl/5.26/scripts/Config.pm

5. adapt.scpがないよ、と言われるエラー

自分の場合、さらに「cannot find adapt.scp」的なエラーが出ました。”HTS-demo_CMU-ARCTIC-ADAPT/data/scp”の中に本来生成されているはずの”adapt.scp”というファイルができていないのが問題です。インターネットの大海原を1時間ほど周回してやっと解決法にたどり着きました。参考にしたURLはこちら
”HTS-demo_CMU-ARCTIC-ADAPT/data”の”Makefile.in”ファイルのscpに関する部分(387行目から)で、adapt.scpを生成する部分うち403行目にある、「$(ADAPTHEAD)」の部分を削除すると解決します。サンプル動かす時点でこんなわかりにくいエラーがあるってどういうこっちゃ…涙

6. 終了のログ

あとは無事に動くはずです。プログラムが無事に終了すると、以下のようなログが出ます。

7. 出力の確認

”HTS-demo_CMU-ARCTIC-ADAPT/voices/qst001/ver1”にhtsvoiceファイルができていると思います。(ファイル名は”cmu_us_arctic_slt.htsvoice”)
”HTS-demo_CMU-ARCTIC-ADAPT/gen/qst001/ver1/SAT(およびSI)/0”には、平均声のサンプル音声(wavファイル)が入っています。
”HTS-demo_CMU-ARCTIC-ADAPT/gen/qst001/ver1/SAT(およびSI)+dec_feat3/0(およびhts_voice)”には、話者適応された声のサンプル音声が入っています。ただし、いずれも英語です。

  

<オプション:サンプルの実行ーきっちりとした動作確認>

1. dataの編集

”HTS/HTS-demo_CMU-ARCTIC-ADAPT/data”に移動する。その中の”raw”フォルダの中身をもともとの状態(bdl,clb,jmk,rms,sltそれぞれに1132個)に戻す。

2. 上記と同様に実行

3. 実行結果

”raw”フォルダの中身がそれぞれ10個のときと比べて、はるかに声が鮮明になっていると思います。(ただし超時間がかかる:自分の場合は半日ほど)

  

サンプルの実行の次は、いよいよカスタム音声での実行に移りたいと思います。

9件の返信

  1. 阿部高志 より:

    初めまして、音響モデルの学習を始めたばかりの初心者です。

    早速ですが、サイトの手順に従い作業を行っていたのですが、
    「2. 端末を開き、以下のコマンドを実行。」
    ここの2番目のコマンドでエラーが発生して先に進めない状態です。
    festivalのexamplesフォルダの中のファイルが探してもないというエラーです。

    checking for text2utt… :
    configure: error: Can’t find text2utt of festival

    checking for dumpfeats… :
    configure: error: Can’t find dumpfeats of festival

    text2uttのほうは.shの拡張子を消して保存しなおすとエラーは消えましたが、dumpfeatsのほうはエラーが消えません。
    調べてもよくわからず、ファイルの名前も何度も確認したので間違っているとも思えません。

    原因がわかるかわかりませんが、返答のほうをよろしくお願いします。

    因みに、
    「HTSで話者依存の自作音響モデルをつくる!」
    こちらの方は最後まで成功しており、とても感謝しています。

    • kyabe2 より:

      コメントくださりありがとうございます。festival/examplesの中に、text2uttおよびdumpfeatsのファイル自体はありますでしょうか(.shじゃない方)?ない場合は、./configureおよびmakeの段階でエラーが出てしまっている可能性があります。その場合の対処法は現在模索中です汗 もしよろしければ、speech_toolsをmakeするときのログの最後の数行を教えていただけるとありがたいです。
      もしファイルが存在するのであれば、怪しいのはパスがきちんと通っているか、というところのはずです…。フォルダ構成としては、HTSーfestivalーfestivalーexampleという風になっておりますでしょうか?festivalフォルダがfestivalフォルダ内にあるので、少しややこしくなってしまっております。
      よろしくお願いいたします。

      話者依存の方、うまくいったようで良かったです!ありがとうございます。

      • 阿部高志 より:

        festivalとspeech_toolsのバージョンを2.5に、
        フォルダーの構成もチェックしましたが同じエラーとなりました。
        speech_toolsのほうを先にコンパイルしました。

        可能性の通り、./configureやmakeした際の最後あたりがおかしく感じます。
        以下がspeech_toolsのログです。

        checking build system type… x86_64-unknown-linux-gnu
        checking host system type… x86_64-unknown-linux-gnu
        checking target system type… x86_64-unknown-linux-gnu
        checking for gcc… gcc
        checking whether the C compiler works… yes
        checking for C compiler default output file name… a.out
        checking for suffix of executables…
        checking whether we are cross compiling… no
        checking for suffix of object files… o
        checking whether we are using the GNU C compiler… yes
        checking whether gcc accepts -g… yes
        checking for gcc option to accept ISO C89… none needed
        checking for ranlib… ranlib
        checking for ar… ar
        checking how to run the C preprocessor… gcc -E
        checking for grep that handles long lines and -e… /bin/grep
        checking for egrep… /bin/grep -E
        checking for ANSI C header files… yes
        checking for sys/types.h… yes
        checking for sys/stat.h… yes
        checking for stdlib.h… yes
        checking for string.h… yes
        checking for memory.h… yes
        checking for strings.h… yes
        checking for inttypes.h… yes
        checking for stdint.h… yes
        checking for unistd.h… yes
        checking whether byte ordering is bigendian… no
        checking for tputs in -lncurses… no
        checking alsa/asoundlib.h usability… no
        checking alsa/asoundlib.h presence… no
        checking for alsa/asoundlib.h… no
        configure: creating ./config.status
        config.status: creating config/config

        makeのログです。

        Check system type
        Remake modincludes.inc
        NATIVE_AUDIO
        ok
        EDITLINE
        config/modules/editline.mak
        SIOD
        siod/siod.mak
        WAGON
        stats/wagon/wagon.mak
        SCFG
        grammar/scfg/scfg.mak
        WFST
        grammar/wfst/wfst.mak
        OLS
        stats/ols.mak
        RXP
        rxp/rxp.mak
        LINUX16_AUDIO
        config/modules/linux16_audio.mak
        Making in directory ./siod …
        Making in directory ./rxp …
        Making in directory ./audio …
        Making in directory ./utils …
        Making in directory ./base_class …
        Making in directory base_class/string …
        Making in directory base_class/inst_tmpl …
        Making in directory ./ling_class …
        Making in directory ./speech_class …
        Making in directory ./sigpr …
        Making in directory sigpr/pda …
        Making in directory ./stats …
        Making in directory stats/wagon …
        Making in directory stats/kalman_filter …
        Making in directory ./grammar …
        Making in directory grammar/scfg …
        Making in directory grammar/wfst …
        Making in directory grammar/ngram …
        Making in directory ./intonation …
        Making in directory intonation/tilt …
        Making in directory ./lib …
        make est_program_makefile from est_program_makefile-in
        make est_mainline from est_mainline-in
        Making in directory ./main …
        gcc -O3 -Wall -o ch_lab ch_lab_main.o -L../lib -lestools -L../lib -lestbase -L../lib -leststring -lcurses -ldl -lncurses -lm -lstdc++ -fopenmp
        /usr/bin/ld: -lcurses が見つかりません
        /usr/bin/ld: -lncurses が見つかりません
        collect2: error: ld returned 1 exit status
        Makefile:102: recipe for target ‘ch_lab’ failed
        make[1]: *** [ch_lab] Error 1
        config/rules/targets.mak:55: recipe for target ‘main’ failed
        make: *** [main] Error 2

        エラー表示がなかったのでスルーしていましたが、原因と思われます。
        しかし、対処の仕方がわからないので、何かのバージョンでしょうか?

        windows10(64bit)
        ubuntu18.04.3(64bit)
        linux
        virtualbox

        途中でmake、gccがないというエラーが出るので、sudo apt installを行っています。

        • kyabe2 より:

          「/usr/bin/ld: -lcurses が見つかりません
          /usr/bin/ld: -lncurses が見つかりません」
          のところがあやしいですね。
          $ sudo apt install build-essential
          をしていただいて、それでもダメなら
          $ sudo apt install libncurses5-dev libncursesw5-dev
          で、curses,ncurses関連がインストールされるかと思います!

          • 阿部高志 より:

            早い返答ありがとうございます。
            $ sudo apt install build-essential
            こちらのインストールは行っていましたが、
            $ sudo apt install libncurses5-dev libncursesw5-dev
            こちらを行っておらず、インストールしてみるとエラーにならず進みました。

            ./configure –with…/bin
            コマンドを打ち正常に終わったと思われます.
            しかし、makeコマンドを打った後、今度は下記の警告文が大量に出てくるようになりました。

            WARNING
            No default voice found in (“/home/ユーザー名/HTS/festival/festival/lib/voices/”)
            either no voices unpacked or voice-path is wrong
            Scheme interpreter will work, but there is no voice to speak with.
            WARNING

            No phoneset currently selectedNo phoneset currently selectedNo phoneset currently selectedNo phoneset currently selectedNo phoneset currently selectedNo phoneset currently selectedNo phoneset currently selectedNo phoneset currently selectedNo phoneset currently selectedNo phoneset currently selectedNo phoneset currently selectedNo phoneset currently selectedNo phoneset currently selectedNo phoneset currently selectedNo phoneset currently selectedNo phoneset currently selectedNo phoneset currently selectedNo phoneset currently selectedNo phoneset currently selectedNo phoneset currently selectedExtracting labels from utts/bdl/cmu_us_arctic_bdl_b0312.utt

            階層を調べてみるとvoicesフォルダがなかったので、festival2.5のvoicesフォルダのことでしょうか?
            中身すべてが必要だとするとダウンロードが重くなるのですが、一括で行えないでしょうか?

            何度も何度も質問して申し訳ないですが、よろしくお願いします。

            あと、open-jtalkを使えば自由なテキストでしゃべらせることができるのは知っていますが、このサンプルのテキストを変えるようなことはできないでしょうか?
            若しくは、サンプル音声ファイルの元となるサンプルテキスト? のファイルの箇所など。

            そのファイルを把握して内部を少し理解しようと考えています。

          • kyabe2 より:

            確認してみたところ、たしかにfestival2.5にはvoicesフォルダがないですね…
            これはどうやら以前貼っていたリンクのhttp://www.cstr.ed.ac.uk/downloads/festival/2.1/の中にある、festvox_ではじまるファイルに該当するようですので、これをダウンロードしてfestival/festivalフォルダに統合しないといけないみたいです、すみません。記事の方も修正いたしました。
            festivalの「INSTALL」ファイルを見てみると、
            「To simply make it run with a male US English voiuce it is sufficient to install just
            festlex_CMU.tar.gz
            festlex_POSLEX.tar.gz
            festvox_kallpc16k.tar.gz」
            と書いてあるので、全部入れる必要は必ずしもなさそうですが、面倒だったのと念の為に自分は全部入れてます…。

            自由な発話の件ですが、まず、このデモで作成されるhtsvoiceファイルは英語用のものになるため、このデモで作成されたhtsvoiceファイルから音声発話をさせるためにはOpenjtalkではなくFlite+hts_engineを使うことになります。Openjtalkへの対応化のところは、次の記事で書いてあるので、ご参照ください。

            次にサンプルのテキストがどこにあるかということですが、HTS/HTS-demo_CMU-ARCTIC-ADAPT/data/labels/genの中に、ラベルの形式(.lab)で入っているようです。なので、変更するのは少し大変そうです…
            よろしくお願いいたします。

    • kyabe2 より:

      P.S.
      いろいろ試してみたところ、festivalとspeech_toolsのバージョンを2.5に変更するとうまくmakeできるみたいです!そうすると.shの付いていないtext2uttおよびdumpfeatsができているので、おそらくエラーは無くなるはずです。(speech_toolsを先にmakeすることをお忘れなく)
      以下、リンクを貼らせていただきます。「準備編」の記事の方も修正させていただきます。
      http://festvox.org/packed/festival/2.5/

  2. 阿部高志 より:

    結果報告が遅くなりましたが、無事サンプル音声ファイルの出力まで行うことができました。
    (まだ、1132ファイル全てで行ってはいませんが、10ファイルでできたので大丈夫かと思います)
    大変お世話になり、ありがとうございます。

    それでですが、いくつか質問と報告があります。

    質問は、出力された音声ファイルがたくさんあることです。
    SATやSAT(およびSI)+dec_feat3フォルダの中を確認すると、音声ファイル(wav)の他にraw・dur・lf0・mgc・pitファイルがあり、それぞれ40ファイルありました。
    (それぞれが何を示すファイルなのか教えていただけるとありがたいです)
    イメージでは、
    sltを基準に10音声ファイル
    5つのフォルダの平均10音声ファイル
    が作られる予定だったのですが、これはどのような内訳となってるのでしょうか?
    50ファイルでもないので不思議に思いました。
    (それぞれのフォルダの中身は10ファイルにしているのを確認済みです)

    報告は、
    ・環境を再度構築した際、再びtext2uttやdumpfeatsファイルが作られていなかった現象
     ->speach_toolsのコンパイルなどをする前に
      $ sudo apt install libncurses5-dev libncursesw5-dev
      コマンドを打つとファイルが作成されました。
      どこか間違えていたのか、順番があるのかわかりませんが、自分はそれでファイルが作成されました。

    ・Config.pm関係のエラー解消はroot権限に移動しないとコピーできない
     ->自分の場合、権限がないためフォルダ/ファイルのコピーができず
      $ sudo su –
      rootでログインしたのち該当の階層でscriptsフォルダの作成とファイルのコピーを行いました。

    他にも回答したフォルダの名称が異なり中身を移動させないといけないなど(PCの違いですかね?)、諸々の違いはありました。
    最初にも言いましたが、ありがとうございます。

    まだ独自の音声でしゃべらせるところまでできてはいないので今後も質問をすると思います。
    お手数ですが、よろしくお願いします。

    • kyabe2 より:

      無事にファイル出力できたとのこと、本当に良かったです。

      SAT等のフォルダ内にたくさんあるファイルの件ですが、各フォルダ内に40ファイルあるのは、英語のサンプルとしての出力音声が40個あるためだと思われます。HTS/HTS-demo_CMU-ARCTIC-ADAPT/data/labels/genの中にも40個.labファイルが入っているかと思います。
      rawはRAW形式の音声データ、durはDuration(状態別継続長)、lf0はlog f0の略(ピッチの代表)、mgcはmel generalized cepstral features(メル一般化ケプストラム)、bapはband averaged aperiodicity(帯域平均非周期性)、pitは調べても出てこなかったのですがおそらくピッチ関連…といったような感じです(自分でもよくわからんで書いてますが…)。
      こちらのページに一部詳しく書いてありました→ http://www.cs.columbia.edu/~ecooper/tts/data.html

      $ sudo apt install libncurses5-dev libncursesw5-dev でspeech_toolsのコンパイルが解決できたようで、安心しました。エラーメッセージにncursesとcursesがないよ、と書いてあったので、このコマンドでインストールできたみたいです。

      かしこまりました、可能な限りお役に立てればと思います。ぜひ素敵な自作音声ライフをお送りください!

コメントは受け付けていません。