Google ColabでDDSP-SVCの音声変換用モデルを訓練してみた

はじめに

音声の特徴を別人のものに変えることができる、DDSP-SVCを試すにあたってモデルの訓練をGoogle Colaboratoryで行った時の記録です。 DDSP-SVCのコードと音声データを使って音声変換のためのモデル訓練を行いました。

※バージョン4.0に対応しました。

y-kitaro.hatenablog.com

Google Driveの準備

まずはGoogleDrive上に必要なファイルを配置していきます。

ディレクトリの準備

  1. Google Driveに「ddsp-svcディレクトリを作成します。

  2. 「ddsp-svc」の下に「pretrain」、「train_data」、「input」、「output」を作成します。以下は作成した後の一例です。

    構成例

  3. 次のpyhtonノートブックを開いてドライブにコピーします。 Open In Colab

モデルのダウンロード

DDSP-SVCリポジトリから訓練済みモデルをダウンロードします。

github.com

遷移先の以下の項目のContentVec、HuberSoft、NSF-HiFiGanをクリックしてダウンロードします。

2. Configuring the pretrained model

Feature Encoder (choose only one):
(1) Download the pre-trained ContentVec encoder and put it under  pretrain/contentvec folder.

(2) Download the pre-trained HubertSoft encoder and put it under pretrain/hubert folder, and then modify the configuration file at the same time.

Vocoder or enhancer:
Download the pre-trained NSF-HiFiGAN vocoder and unzip it into pretrain/ folder.

「pretrain」に以下の構成になるようにアップロードします。

学習用データのアップロード

学習用データを「train_data」にアップロードします。 学習用としてアップロードするデータは[mp3, wav, flac]が利用できます。

変換するデータのアップロード

変換元データとして「input」にアップロードします。 変換元データは[wav]が利用できます。

Colaboratoryの準備

コピーしたノートブックを開いてドライブをマウントします。この時、ランタイムのタイプがGPUになっていることを確認してください。

マウント後にOne-time setupの範囲を実行します。 One-time setupでは必要なコードのcloneと依存ライブラリのインストールが行われます。

※ 以下の処理では作成した環境をGoogleDriveに保存しています。保存した場合GoogleDriveに2GB強のファイルが作成されるため、容量を節約したい場合は「Without Saving the Environment」の処理を代わりに実行してください。

! cd DDSP-SVC && sudo python3 -m venv ./venv --without-pip && curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && . ./venv/bin/activate && python3 get-pip.py && pip install --upgrade pip && pip install -r requirements.txt
! tar -zcvf DDSP-SVC.tar.gz DDSP-SVC
! cp DDSP-SVC.tar.gz ./drive/MyDrive/ddsp-svc/ -r

モデルの訓練

モデルの訓練を実施します。

学習済みモデルのコピー

必要な学習済みモデルをGoogleDriveの「pretrain」ディレクトリごとコピーします。

! cp drive/MyDrive/ddsp-svc/pretrain DDSP-SVC/ -r

音声ファイルの準備

音声ファイルを学習用のデータに分割します。 分割対象の音声ファイルはGoogleDriveの「train_data」にある全ての音声ファイルです。

import sys
sys.path.append("./DDSP-SVC/venv/lib/python3.10/site-packages/")
sys.path.append("./DDSP-SVC/")
import separate

separate.separate_audio(input="/content/drive/MyDrive/ddsp-svc/train_data/", output="/content/DDSP-SVC/data/train/audio", silence_thresh=-40, min_silence_len=750, keep_silence=750 , min=2000, max=5000, padding=True)

訓練の実施

モデルの訓練を開始します。

! cd DDSP-SVC && . ./venv/bin/activate && python draw.py && python preprocess.py -c configs/combsub.yaml

! cd DDSP-SVC && . ./venv/bin/activate && python train.py -c configs/combsub.yaml

モデルは2000ステップごとに保存されます。最大で100000エポックまで学習が継続するため、 回転しているボタンをクリックして適当なステップ数で学習を打ち切ってください。

モデルの保存

モデルの保存を行います。 以下の処理が完了するとGoogleDriveのddsp-svcにmodel.zipが作成されます。

!zip model.zip ./DDSP-SVC/exp/combsub-test -r

!mv model.zip ./drive/MyDrive/ddsp-svc/

モデルのテスト

以下の処理で音声変換を試すことができます。 inputにあるname.wavを変換し、outputにname.wavとして出力します。

! cd DDSP-SVC && . ./venv/bin/activate && python main.py -i "../drive/MyDrive/ddsp-svc/input/name.wav" -o "../drive/MyDrive/ddsp-svc/output/name.wav" -m "./exp/combsub-test/model_30000.pt" -d "cuda"

各引数は以下のように設定してください。

  • -I 変換するファイルのパス name.wavを任意のファイル名に変更してください。
  • -o 出力先のパス name.wavを任意のファイル名に変更してください。
  • -m 変換に使うモデルのパス model_30000.ptの数字を任意の値に変更してください。選択可能なモデルは「./DDSP-SVC/exp/combsub-test」配下を確認してください。

おわりに

Google ColaboratoryでDDSP-SVCのモデルを訓練しました。VRAMをそこまで使用しないため無料版ユーザでも利用可能だと思います。モデルの学習が終わればGPUなしのローカル環境でも音声変換を行うことができます。 また、関連するリポジトリやコードをメンテナンスしていただいている皆様に感謝いたします。