tonnetonne814 / QuickVC-44100-Ja_HuBERT

44100Hz日本語HuBERTに対応した QuickVC: Any-to-many Voice Conversion Using Inverse Short-time Fourier Transform for Faster Conversion です。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

QuickVC(44100Hz 日本語HuBERT対応版)

このリポジトリは、44100Hzの音声を学習および出力できるように編集したQuickVC-VoiceConversionです。但し、以下の点を変更しております。

  • ContentEncoderをWaveNetからAttentionに変更
  • HuBERT-softのHiddenUnitsを、日本語HuBERT12層目768dim特徴量に変更
  • MS-iSTFT-VITSのsubband数を4⇛8に変更
  • ContentEncoderにF0埋め込みを追加。それに従い、PreprocessにF0抽出処理を追加。

⚠Work in Progress⚠

学習と推論を実装済。事前学習モデル等は学習音源の問題が解決し次第公開。

1. 環境構築

Anacondaによる実行環境構築を想定する。

  1. Anacondaで"QuickVC"という名前の仮想環境を作成する。[y]or nを聞かれたら[y]を入力する。

    conda create -n QuickVC python=3.8    
  2. 仮想環境を有効化する。

    conda activate QuickVC
  3. このレポジトリをクローンする(もしくはDownload Zipでダウンロードする)

    git clone https://github.com/tonnetonne814/QuickVC-44100-Ja_HuBERT.git
    cd QuickVC-44100-Ja_HuBERT.git # フォルダへ移動
  4. https://pytorch.org/のURLよりPyTorchをインストールする。

    # OS=Linux, CUDA=11.7 の例
    pip3 install torch torchvision torchaudio
  5. その他、必要なパッケージをインストールする。

    pip install -r requirements.txt 

2. データセットの準備

JVSコーパスは配布時の音源が24000Hzの為適さないが、説明のためにJVSコーパスの学習を想定します。

  1. こちらからJVSコーパスをダウンロード&解凍する。
  2. 音源を44100Hz16Bitモノラル音源へと変換する。
  3. 解凍したフォルダを、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 一度のパラメータ更新に使用する学習データ数

4. 学習

次のコマンドを入力することで、学習を開始する。YourModelNameは自由に変更して良い。

⚠CUDA Out of Memoryのエラーが出た場合には、config.jsonにてbatch_sizeを小さくする。

python train.py -c configs/quickvc_44100.json -m YourModelName

学習経過はターミナルにも表示されるが、tensorboardを用いて確認することで、生成音声の視聴や、スペクトログラム、各ロス遷移を目視で確認することができます。

tensorboard --logdir logs

5. 推論

次のコマンドを入力することで、推論を開始する。config.jsonへのパス、生成器モデルパスを指定する。

python inference.py --config ./path/to/config.json --model_path ./path/to/G_xxx.pth 

実行後、Terminal上にて使用するデバイスを選択後、以下のループが処理される。

  1. ターゲット音声パスの入力
  2. ソース音声ファイルパスの入力
  3. F0計算方式の入力 ( dio:0 | parselmouth:1 | harvest:2 | crepe:3 )
  4. 処理実行、処理時間表示
  5. 音声とログデータの保存(infer_logsフォルダがデフォルト)
  6. 音声の再生

事前学習モデル

未実装。学習音源選定中。

参考文献

About

44100Hz日本語HuBERTに対応した QuickVC: Any-to-many Voice Conversion Using Inverse Short-time Fourier Transform for Faster Conversion です。

License:MIT License


Languages

Language:Python 100.0%