DockerまたはCondaを使用して環境を構築できます。
Dockerがインストールされていない場合は、リンクに従ってUbuntu、Mac、またはWindowsのインストール手順を見つけてください。
Dockerイメージを構築する:
docker build -t emospeech .
Docker画像を実行する:
bash run_docker.sh
Condaがインストールされていない場合は、ここでOSのインストール手順を見つけてください。
conda create -n etts python=3.10
conda activate etts
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
pip install -r requirements.txt
マシンに異なるバージョンのcudaがある場合は、Pytorchインストールに該当するリンクをここに見つけることができます。
ESDデータセットの10人の英語話者のデータを使用しました。 MFAを使用して作成された.TextGridファイルとともに、すべての.wav 、 .txtファイルをダウンロードするには:
bash download_data.sh
モデルをトレーニングするには、事前に計算された期間、エネルギー、ピッチ、およびEGEMAP機能が必要です。 srcディレクトリの実行から:
python -m src.preprocess.preprocess
これは、データフォルダーがどのように見えるかです。
.
├── data
│ ├── ssw_esd
│ ├── test_ids.txt
│ ├── val_ids.txt
└── └── preprocessed
├── duration
├── egemap
├── energy
├── mel
├── phones.json
├── pitch
├── stats.json
├── test.txt
├── train.txt
├── trimmed_wav
└── val.txt
config/config.pyで引数を構成します。python -m src.scripts.trainを実行します。テストは、ESDデータセットのサブセットのテストに実装されています。オーディオを合成し、ニューラルMO(NISQA TTS)を計算するには:
Inferenceセクションでconfig/config.pyで引数を構成します。python -m src.scripts.testを実行します。 test.logでオリジナル、再構築、生成されたオーディオ用のNisqa TTSを見つけることができます。
Emospeechは音素シーケンスで訓練されています。サポートされている携帯電話はdata/preprocessed/phones.jsonにあります。このリポジトリは、学術研究のために作成されており、自動グラフェムから音量間変換をサポートしていません。ただし、感情条件付けで任意の文を合成したい場合は、次のことができます。
MFAを使用してグラフェメムから音素シーケンスを生成します。
1.1インストールガイドに従ってください
1.2英語G2Pモデルのダウンロード: mfa model download g2p english_us_arpa
1.3 graphemes.txtからPhoneme.txtを生成: mfa g2p graphemes.txt english_us_arpa phoneme.txt
python -m src.scripts.inferenceを実行し、引数を指定します。
| arrgument | 意味 | 考えられる値 | デフォルト値 |
|---|---|---|---|
-sq | Synthesizeの音素配列 | data/phones.jsonで検索します。 | 設定されていない、必要な引数。 |
-emo | 希望の音声感情のID | 0:ニュートラル、1:怒り、2:ハッピー、3:悲しい、4:サプライズ。 | 1 |
-sp | スピーカーの音声のID | 1〜10、0011 ... 0020に対応している元のESD表記。 | 5 |
-p | 合成されたオーディオを保存するパス | .wav拡張機能を備えています。 | Generation_from_phoneme_sequence.wav |
例えば
python -m src.scripts.inference --sq "S P IY2 K ER1 F AY1 V T AO1 K IH0 NG W IH0 TH AE1 NG G R IY0 IH0 M OW0 SH AH0 N"
結果ファイルが合成されていない場合は、OOV電話のinference.logを確認してください。