DiffSingerモデル制作wiki

Google Colabを利用した学習

最終更新:

roku10shi

- view
メンバー限定 登録/ログイン
(書きかけのページ)

Google Colabについて

Google Colabは、サーバー上でプログラムを実行できるサービスです。これを利用して、自前のPCではなくサーバー上で機械学習をすることができます。
Google Colabを利用するメリットは、以下のようなものが挙げられます。
  • 無料で使用できる(高価なPC機材を揃えなくてよい)
  • ブラウザ上で使用できる(ソフトのインストールやPythonの環境構築が必要ない)
  • DiffSingerの学習用ノートブック(プログラム)が公開されているため手軽に始められる

Google Colabのプラン

無料プランで使える学習量には限りがあり、上限に達すると一定時間使用できなくなります。
有料プランに加入することで、機材のスペックが上がったり、より長時間学習を回すことが可能になります。また、最上位の有料プランではバックグラウンド実行ができます。
制限に達して学習がストップした場合は、数日置けばまた使えるようになります。

Google Colabの仕様

  • GPUはランダムに割り当てられます。有料プランでは高性能なGPUを優先的に使用できます。
  • 無料プランではバックグラウンド実行ができないため、ブラウザをずっと開いたままにしておく必要があります。また、定期的にスパムチェックが発生し、放置していると自動的に切断されます。
  • ノートブック(プログラム)はGoogleドキュメントやスプレッドシートなどと同様にユーザー間で共有できます。
  • 利用制限の基準は流動的なため公開されていません。また、良いGPUを引き当てようと何度もランタイムをリセットすると制限が早まります。

DiffSingerモデル作成用ノートブックについて

一般的に使用されているのはMLo7さんが保守しているバージョンのノートブックです。
DiffSinger training notebook

学習用のデータベースや学習過程・結果のデータはGoogle Driveに保存されるため、学習を中断しても次回続きから再開できるようになっています。

最新の仕様はGitHubのリポジトリを参照してください。

ノートブック使用の流れ

セットアップ

Google Driveを接続します。
学習に使用する歌声DBを指定し、データを抽出(解析・分割)します。

VarianceとAcoustic

VarianceモデルとAcousticモデルという2つのモデルが必要なため、以下の手順を2回繰り返します。
  • 学習の設定
  • 学習

エクスポート

ONNX(オニキス)形式でモデルをエクスポートします。

OpenUtau用のシンガー設定

OpenUtauにモデルを読み込むための設定ファイルを作成します。

ノートブックの使い方

こちらのGoogleドキュメントを参考に記述しています。

ランタイムの接続について

Colabでは、Googleのサーバー上にランタイム(実行環境)を展開して機械学習を行ないます。
ランタイムは接続が切れて一定時間経つと削除され、作業中のデータが消失します。
このノートブックでは特定のタイミングで作業内容がGoogle Driveに保存されますが、保存前に接続が切れるとそれまで実行していた内容(ランタイム上にのみ保存されていた内容)は消失するので注意しましょう。

内容が保存されるタイミング:
  • Preprocess data for training > Preprocess data
  • Training中(指定したステップごとに自動保存)
  • Export ONNX

ランタイムが削除される条件:
  • PCを放置したり、ブラウザを閉じたりしてから90分が経過する
  • ランタイムの開始(作業開始)から12時間が経過する
  • 「ランタイムを接続解除して削除」を選択する
自動でブラウザを再読み込みするChrome拡張等を入れると、無操作で接続が切れるのを防ぐことができます。
Auto Refresh Plusは日本語も対応でおすすめです。
1時間ごとぐらいで再読み込みすると良いでしょう。

下準備

Googleアカウントの用意

Google Driveの容量が大量に必要になるので、心もとない場合は新規にGoogleアカウントを作成することも検討しましょう。

歌声DBのアップロード

DBのパッケージング
  • wavは44100kHz・16bitにしておきます。
  • ファイル名は日本語、半角スペース、#などの記号は避けます。
以下はマルチスピーカーモデルの例です。図のようなフォルダ構造でzipにします。
マルチスピーカーモデルでない場合は表情や多言語のフォルダは必要ありません。

シンガー名.zip
├─Normal
│└─曲名1.wav
│└─曲名1.lab
│└─曲名2.wav
│└─曲名2.lab
├─Power
│└─曲名3.wav
│└─曲名3.lab
│└─曲名4.wav
│└─曲名4.lab
├─English
│└─曲名5.wav
│└─曲名5.lab
│└─曲名6.wav
│└─曲名6.lab

Google Driveの用意
Google Driveに適当に「DiffSinger」とかの名前のフォルダを作ります。
そのフォルダの中に歌声DBのzipをアップロードし、「acoustic」「variance」という名前のフォルダを作ります。
DiffSinger(フォルダ)
├─シンガー名.zip
├─acoustic(フォルダ)
├─variance(フォルダ)

セットアップ

Setup - Mount Google Drive and Setup

Google Driveに接続し、ランタイム(Colabの実行環境)上にDiffSingerの学習環境を展開する工程です。

▶ボタンを押すと、Google Driveにマウント(接続)する確認画面が出ます。
しばらく待った後、マウントが成功すると「Setup complete」の音声が流れます。

Setupは初回だけでなく、一度ランタイムが削除されたあとで作業を再開したいときは毎回行ないます。
よくわからなければ、左のファイルアイコンを開いて一覧の中に「sample_data」フォルダだけがある場合はSetupが必要、content・DiffSinger・driveなどのフォルダがあればSetup不要です。

Preprocess data for training - Extract Data

Google Driveにある歌声DBを読み込み、学習用にwavを分割し、ランタイム上にコピーする工程です。

この先、Extract Data~Preprocess dataまでの作業内容はPreprocess dataが終わった時点(Trainingの手前)でGoogle Driveに保存されます。
その間に接続が切れると作業内容が消失します。

  • data_type:データの形式。wabとlabを用意している場合は「lab + wav (NNSVS format)」を選択。
  • data_zip_path:歌声DB.zipのパスを入力(下記参照)。
  • estimate_midi_option:ピッチモデルを作らない場合はFalse、作る場合はTrue|harvestを選択。
  • segment_length:各セグメント(分割後のwav)の長さ。デフォルトは15秒。
  • max_silence_phoneme_amount:各セグメント(分割後のwav)の中に含めていい無音の数。デフォルトは2。

歌声DB.zipのパスは以下の方法で取得できます。
  1. 左のフォルダアイコンをクリック
  2. drive>MyDrive>DiffSingerの中に最初にアップロードしたzipがあるので右クリック
  3. 「パスをコピー」を選択

設定できたら、「Extract Data」の▶ボタンを押し、しばらく待ちます。

Varianceモデルの学習

  • VarianceとAcousticの学習はどちらからやっても構いませんが、Acousticの方が時間がかかります。
  • あとでAcousticの設定をするときにVarianceと同じ設定に揃えないといけない項目があるので、パラメータを変更した部分はメモやスクリーンショットを取っておきましょう。
  • 余談:学習結果は、定期的に「model_*****.ckpt」ファイルとして保存されます。どこまで学習したか等の情報は「config.yaml」に保存され、これを参照することで続きから学習を再開できます。

Edit Config

Variance用の各種設定をする工程です。

  • model_type:varianceを選択。
  • diffusion_type:デフォルトでOK(?)
  • diff_accelerator:デフォルトでOK(?)
  • loss_type:デフォルトでOK(?)
  • use_shallow_diffusion:デフォルトでOK(?)
  • precision:デフォルトでOK(?)
  • save_dir:保存先を入力。歌声DBのパス取得時と同じ要領で、最初に作った「variance」フォルダのパスを取得しペーストする。このページの案内通りに作業していれば「/content/drive/MyDrive/DiffSinger/variance」になる。
  • enable_finetuning:ベースモデルを使用するオプション(?)
  • base_model_path:ベースモデルのパスを指定。
  • selected_param:調声時に使用できるパラメータ。なんでも調声できるようにしてしまうとモデルに問題が出るため、使用できるパラメータを制限し選択制にしている。Tensionを選んでおけばテンション(声の張り、強弱)を調声できる。
  • parameter_extraction_method:デフォルトでOK(?)
  • pitch_training:ピッチモデルを作るか否か。Trueの場合はMelodyEncoderを選択(要出典)
  • duration_training:デフォルトでOK(?)
  • f0_ext:harvestを選択(要出典)
  • それ以下の項目:よくわからなければデフォルトのままにしておく。

設定できたら、「Edit Config」の▶ボタンを押します。

yaml編集

この工程は飛ばしても構いません。
声質のリファレンスは自動的に選別されますが、手動で歌声DBの音声を指定することもできます。
これにより、より狙った声質に近づけることができます。
  1. 「/content/DiffSinger/configs/variance.yaml」をダウンロードします。
  2. 「test_prefixes:」以下を編集します。0:は「speakers:」の0番目の表情のリファレンス、1:は「speakers:」の1番目(2行目)の表情のリファレンスです。歌声DBの分割されたwavは一時的に「/content/raw_data/diffsinger_db」に保存されています。
  3. 「/content/DiffSinger/configs/variance.yaml」を一度削除し、編集後の variance.yaml を同じ場所にアップロードします(ドラッグアンドドロップ)。
※test_prefixes 以外は触らないこと
※variance.yamlを編集した場合は、あとでAcousticのときに使うのでそのまま手元に保管しておくこと

Preprocess data

設定ファイルに基づいて、学習に必要なデータをGoogle Driveに保存する工程です。
特に設定項目はないので、そのまま「Preprocess data」の▶ボタンを押します。

Training

実際の学習に入ります。
  • save_interval:何ステップごとに保存するか。定期的に自動保存することで、途中で中断されても続きからやり直すことができる。デフォルトは2000ステップ。
  • batch_size:上げると一度にメモリで扱う学習データが増える為、ステップが減り学習速度が上がる。GPUのメモリサイズと学習するモデルに合わせて設定する。デフォルトは9で、これはメモリサイズ8GBのAcousticモデル向けの設定。Varianceでは一旦32を設定し、エラーが出た場合は少しずつ減らして再実行すると良い。(Colabで利用可能なGPUはランダムなためメモリサイズも変動する。最大16GB。16GBを引き当てた場合のbatch_sizeは、8GBのときと比べて2倍の値を設定できる)
以下は学習を途中から再開する(Resume training)ときの設定です。
※一度ランタイムが切れてから学習再開する場合は、Setupを実行したあとこの工程を行ないます。
  • resume_training:初回はオフ、続きから学習を再開する場合はオン。
  • local_data:?
  • re_config_path:config.yamlファイルのパスを入力。これは前回のEdit Configの際に指定した保存場所にある。このページの案内通りに作業していれば「/content/drive/MyDrive/DiffSinger/variance/config.yaml」になる。

設定ができたら、▶ボタンを押してひたすら待ちます。定期的にColabから確認のダイアログが出るのでクリックして消します。
Google Driveのゴミ箱に古いデータがどんどん溜まっていくので、たまに削除しましょう。

TensorBoardについて
TensorBoardでは学習の状況を確認できます。
初回のTraining開始直後はTensorBoardが起動していないので、一度ブラウザを再読み込みすると表示されます。

終了の目安
Variance・Acousticともに1~2万ステップほどでとりあえず声が出るようになります。
Edit Configのdiffusion_typeが「ddpm」のときは5~10万ステップ程度が相場のようです。
diffusion_typeが「reflow」の場合は、より少ない1.4~万ステップで実用可能です(要検証)。
到達したら、「Train your model」の左の■ボタンを押してTrainingを終了し、次の工程に進みます。

より厳密には、TensorBoardの「SCALARS」タブにある「~_loss」と書いてあるいくつかのグラフを見て、下がりきったら(これ以上下がらなくなったら)学習終了です。
よくわからなければステップ数を目安にして終了しましょう。

Acousticモデルの学習

Extract Data

前回Extract Dataしてから一度もランタイムの接続が切れていない場合は、この工程は飛ばせます。
一度ランタイムが削除されている(/content/raw_data/diffsinger_db フォルダがない)場合は、最初にやったのと同じ設定でもう一度▶ボタンを押します。

Edit Config

  • model_type:acousticを選択。
  • save_dir:保存先を入力。歌声DBのパス取得時と同じ要領で、最初に作った「acoustic」フォルダのパスを取得しペーストする。このページの案内通りに作業していれば「/content/drive/MyDrive/DiffSinger/acoustic」になる。
  • それ以外:Variance時に変更した項目は同様に変更する。よくわからないものはそのままでOK。

設定できたら、「Edit Config」の▶ボタンを押します。

yaml編集

Variance時にこの工程を飛ばした場合はAcoustic時も飛ばします。
Variance時にvariance.yamlを変更した場合は、「/content/DiffSinger/configs/acoustic.yaml」の「test_prefixes:」をvariance.yamlの時と同じになるように編集します。
編集のしかたはVarianceの項を参照してください。

Preprocess data

特に設定項目はないので、そのまま「Preprocess data」の▶ボタンを押します。

Training

やりかたはVarianceと同じですが、Varianceのときと比べて何倍もの時間がかかります。

AcousticのTensorBoardでは、「AUDIO」タブで現在の音声を聴くことができます。

エクスポート

Convert model to ONNX format - Drop Speakers from Model (Optional)

この工程は不要なので飛ばします。

Convert model to ONNX format - Export ONNX

学習したモデルをエクスポートする工程です。
  • no_output:余計なファイルを出力しない設定。オンのままにしておく。
  • acoustic_checkpoint_path:「/content/drive/MyDrive/DiffSinger/acoustic」フォルダにある、一番数字の大きいcktpファイルのパスを入力。→「/content/drive/MyDrive/DiffSinger/acoustic/model_ckpt_steps_xxxxx.ckpt」
  • variance_checkpoint_path:「/content/drive/MyDrive/DiffSinger/variance」フォルダにある、一番数字の大きいcktpファイルのパスを入力。→「/content/drive/MyDrive/DiffSinger/variance/model_ckpt_steps_xxxxx.ckpt」
  • exp_folder:保存先を入力。よくわからなければ「/content/drive/MyDrive/DiffSinger」を指定しておく。

設定できたら、「Export ONNX」の▶ボタンを押します。

Raw data conversion

必要であれば行ないます。モデル作成のみが目的なら必要ありません。

OpenUtau用のシンガー設定

Build OpenUtau VB

ONNXモデルをOpenUtauで使えるようにセットアップします。
  • acoustic_onnx_folder:onnx>acousticフォルダのパスを入力。「/content/drive/MyDrive/DiffSinger/onnx/acoustic」
  • acoustic_config:acousticフォルダのconfig.yamlのパスを入力。「/content/drive/MyDrive/DiffSinger/acoustic/config.yaml」
  • variance_onnx_folder:onnx>varianceフォルダのパスを入力。「/content/drive/MyDrive/DiffSinger/onnx/variance」
  • variance_config:varianceフォルダのconfig.yamlのパスを入力。「/content/drive/MyDrive/DiffSinger/variance/config.yaml」
  • dictionary_path:音素表である「dsdict.yaml」ファイルのパスを入力。モデルが日本語の場合は空欄でもOK。
  • save_path:保存先を入力。よくわからなければ「/content/drive/MyDrive/DiffSinger」を指定しておく。
  • name:音源名を入力。半角スペース等一部の記号が使えないため、一旦半角アルファベットのみで仮の名前を入れておくとよい。
設定できたら、「Build OpenUtau VB」の▶ボタンを押します。

完成したモデルのダウンロード

Build OpenUtau VBで作成したzipファイルがGoogle Driveに入っているのでダウンロードします。
zipを解凍し、content > OU_voicebank > 音源名 をフォルダごとOpenUtauのSingersフォルダにコピーします。

名前の編集

character.txtをテキストエディタソフトで開き、「name」欄を正式な名前に編集します。

subbanksの編集

マルチスピーカーモデルの場合はcharacter.yamlをテキストエディタソフトで開き、「subbanks:」の内容を編集します。
表情名を変えたり、不要なスピーカーを削除したりします。
順番は名前順に並び替えられてしまうので、「01」のように冒頭に番号をつけるか、メイン表情の名前を空欄('')にしましょう。
  • color:Voice Color機能で表示される表情名
  • suffix:モデル内の対応する表情

character.yamlの編集

  1. OpenUtauを開き、トラックのシンガーを選択します。
  2. ツール > シンガー... を開きます。
  3. 歯車のボタンから、アイコンや背景イラスト(立ち絵)を設定します。
  4. 日本語モデルであれば、デフォルトのPhonemizerを「DIFFS JA」に変更します。

出典

ウィキ募集バナー