このリポジトリは、44100Hzの音声を学習および出力できるように編集したQuickVC-VoiceConversionです。但し、以下の点を変更しております。
- ContentEncoderをWaveNetからAttentionに変更
- HuBERT-softのHiddenUnitsを、日本語HuBERT12層目768dim特徴量に変更
- MS-iSTFT-VITSのsubband数を4⇛8に変更
- ContentEncoderにF0埋め込みを追加。それに従い、PreprocessにF0抽出処理を追加。
学習と推論を実装済。事前学習モデル等は学習音源の問題が解決し次第公開。
Anacondaによる実行環境構築を想定する。
-
Anacondaで"QuickVC"という名前の仮想環境を作成する。[y]or nを聞かれたら[y]を入力する。
conda create -n QuickVC python=3.8
-
仮想環境を有効化する。
conda activate QuickVC
-
このレポジトリをクローンする(もしくはDownload Zipでダウンロードする)
git clone https://github.com/tonnetonne814/QuickVC-44100-Ja_HuBERT.git cd QuickVC-44100-Ja_HuBERT.git # フォルダへ移動
-
https://pytorch.org/のURLよりPyTorchをインストールする。
# OS=Linux, CUDA=11.7 の例 pip3 install torch torchvision torchaudio
-
その他、必要なパッケージをインストールする。
pip install -r requirements.txt
JVSコーパスは配布時の音源が24000Hzの為適さないが、説明のためにJVSコーパスの学習を想定します。
- こちらからJVSコーパスをダウンロード&解凍する。
- 音源を44100Hz16Bitモノラル音源へと変換する。
- 解凍したフォルダを、datasetフォルダへ移動し、以下を実行する。
python3 ./dataset/encode.py --model japanese-hubert-base --f0 harvest
F0抽出のライブラリは、["dio", "parselmouth", "harvest", "crepe"]から選択可能。適宜変更すること。
3. configsフォルダ内のjsonを編集
主要なパラメータを説明します。必要であれば編集する。
分類 | パラメータ名 | 説明 |
---|---|---|
train | log_interval | 指定ステップ毎にロスを算出し記録する |
train | eval_interval | 指定ステップ毎にモデル評価を行う |
train | epochs | 学習データ全体を学習する回数 |
train | batch_size | 一度のパラメータ更新に使用する学習データ数 |
次のコマンドを入力することで、学習を開始する。YourModelNameは自由に変更して良い。
⚠CUDA Out of Memoryのエラーが出た場合には、config.jsonにてbatch_sizeを小さくする。
python train.py -c configs/quickvc_44100.json -m YourModelName
学習経過はターミナルにも表示されるが、tensorboardを用いて確認することで、生成音声の視聴や、スペクトログラム、各ロス遷移を目視で確認することができます。
tensorboard --logdir logs
次のコマンドを入力することで、推論を開始する。config.jsonへのパス、生成器モデルパスを指定する。
python inference.py --config ./path/to/config.json --model_path ./path/to/G_xxx.pth
実行後、Terminal上にて使用するデバイスを選択後、以下のループが処理される。
- ターゲット音声パスの入力
- ソース音声ファイルパスの入力
- F0計算方式の入力 ( dio:0 | parselmouth:1 | harvest:2 | crepe:3 )
- 処理実行、処理時間表示
- 音声とログデータの保存(infer_logsフォルダがデフォルト)
- 音声の再生
未実装。学習音源選定中。