ローカルでの学習について
お手元のPCでDiffSingerモデルを作成することを
ローカル学習と言います。
ローカル学習と言います。
GoogleColabとの違いメリット・デメリット
メリットはGoogleColabの学習リソースの利用制限がないこと、最新機能に早くさわれることが挙げられます。
デメリットは学習構築が必要であること高価なGPU(グラフィックボード)が必要であることが挙げられます。
メリットはGoogleColabの学習リソースの利用制限がないこと、最新機能に早くさわれることが挙げられます。
デメリットは学習構築が必要であること高価なGPU(グラフィックボード)が必要であることが挙げられます。
必要なPCスペック最低限の目安
- Intel Core iシリーズ第六世代以降
または
- AMD Ryzenシリーズ
- NVIDIA RTX3000番代以降のGPU
- 空き容量が100GB以上あるストレージ
必要なツール
以下のリンクからそれぞれダウンロードしてください。
上から順にインストールしてください。
上から順にインストールしてください。
- VisualStudio2022 以降(C++によるデスクトップ開発を選択)
- CUDA Toolkit v11.7以降 (v13.xは非推奨)
- DiffTrainer
DiffTrainerのインストール手順(v0.2.0~v0.3.x時点)
- minicondaをインストールしていない場合
初回起動の際は必ずconda_installer.batから実行してください。
miniconda(Python環境の一種)環境をセットアップします。
次回以降の起動の際はrun_gui.batを実行してください。
miniconda(Python環境の一種)環境をセットアップします。
次回以降の起動の際はrun_gui.batを実行してください。
- minicondaを既にインストール済の場合
初回起動の際はまずrequirements.txtの内容をインストールしてください。
よくわからない場合はこちらでインストール用bat(非公式)が配布されています。
batを使用する場合、対応するCUDAToolkitのバージョンが固定されるため、リンク元の記事をよく読んで使用してください。
終わったら次にsetup_conda_envs.pyを実行してください。
起動の際はrun_gui.batを実行してください。
よくわからない場合はこちらでインストール用bat(非公式)が配布されています。
batを使用する場合、対応するCUDAToolkitのバージョンが固定されるため、リンク元の記事をよく読んで使用してください。
終わったら次にsetup_conda_envs.pyを実行してください。
起動の際はrun_gui.batを実行してください。
どちらのインストール手順でもツールが起動したらまずツールの更新を実行してください。
zipファイルに含まれていない更新を反映することができます。
zipファイルに含まれていない更新を反映することができます。
DiffTrainerの学習手順
データ準備
wavとlabファイルをもとに学習データを作成する。
- セグメントごとの最大無音数
学習データセットを自動分割した後のwavに含めていい無音の数。
設定値によって無音が続く、学習に利用できないデータが作成される場合あります。
設定値によって無音が続く、学習に利用できないデータが作成される場合あります。
- セグメントごとの最大無音数
学習データセットを自動分割した後のwavの長さ。
設定値によって無音が続く、学習に利用できないデータが作成される場合あります。
設定値によって無音が続く、学習に利用できないデータが作成される場合あります。
- MIDIを推定する
ピッチモデルを作成する場合は、MIDI推定をOFF以外を選択(精度:SOME>Default method)
- raw_dataフォルダを選択
raw_dataフォルダの中に用意した歌唱DBを置き、それを選択
設定
- Type
AcousticとVarianceで2回学習するので好きなほうから選んでいい。
ただし他の設定は揃えて学習する必要がある。
ただし他の設定は揃えて学習する必要がある。
- フォーマットされたデータフォルダを選択
学習データのあるフォルダを選択
特にこだわりが無ければデータ準備の段階で加工された歌唱DBをdataフォルダ内に移動して選択
特にこだわりが無ければデータ準備の段階で加工された歌唱DBをdataフォルダ内に移動して選択
- チェックポイントの保存先フォルダを選択
チェックポイントの保存先を選択(/diffsinger/checkpointsのサブフォルダーであること)
- Enable VR preprocessing
ノイズ除去の前処理
- 最大バッチサイズ
GPUメモリサイズとDBのサイズによる、
メモリ8GB、DB20~30曲の場合Acousticの場合(8~9)Varianceの場合(30~32)
メモリ8GB、DB20~30曲の場合Acousticの場合(8~9)Varianceの場合(30~32)
- Other language
学習データの話者ごとの言語コード(ISO 639-1)を設定
- Edit Language settings
Dictionariesは使用する言語コードとphonemes.txt(音素リスト)を設定する。
ここで使用するDBとphonemes.txt内に書いてある音素に違いがあると学習ができないため揃うように編集する。
Merge list locationは「merged.yaml」と入力し、merged.yamlの内容を書き変えて利用する言語の音素のみ設定する。
Extra phonemesは使用する特殊音素を入力する。複数入力する場合は「EP,vf」のようにカンマで区切る。
ここで使用するDBとphonemes.txt内に書いてある音素に違いがあると学習ができないため揃うように編集する。
Merge list locationは「merged.yaml」と入力し、merged.yamlの内容を書き変えて利用する言語の音素のみ設定する。
Extra phonemesは使用する特殊音素を入力する。複数入力する場合は「EP,vf」のようにカンマで区切る。
en+jaの構成の場合
- langloader.yaml(最新のベータ版はUIで設定できるのでこの限りではない)
>dictionaries: > en: dictionaries/en-phonemes.txt > ja: dictionaries/ja-phonemes.txt >extra_phonemes: [] >merge_list: DiffSinger/dictionaries/merged.yaml > >#all formatting is entirely subject to change
- merged.yaml
>merged_phoneme_groups: > - [en/b, ja/b] > - [en/ch, ja/ch] > - [en/d, ja/d] > - [en/g, ja/g] > - [en/k, ja/k] > - [en/m, ja/m] > - [en/n, ja/n] > - [en/p, ja/p] > - [en/s, ja/s] > - [en/sh, ja/sh] > - [en/t, ja/t] > - [en/w, ja/w] > - [en/y, ja/y] > - [en/z, ja/z]
xx-phonemes.txt、dictionary-xx.txtはどうやって準備するのか
データ準備にてcustom_dict.txtが作成されるので、追加したいデータセットごとに実行して言語ごとに用意する。
dictionariesフォルダとDiffSinger/dictionariesフォルダに追加する。
データ準備にてcustom_dict.txtが作成されるので、追加したいデータセットごとに実行して言語ごとに用意する。
dictionariesフォルダとDiffSinger/dictionariesフォルダに追加する。
使用した音素を手動で書きだしてphonemes.txtを作る場合
このあとの工程にある「前処理とトレーニング」のログで調べられる。
または以下の方法でラベルファイルから音素リストを抽出して制作できる。
このあとの工程にある「前処理とトレーニング」のログで調べられる。
または以下の方法でラベルファイルから音素リストを抽出して制作できる。
使用するlabを別のフォルダにコピーする
↓
labの入ったフォルダで「copy *.lab __result.txt」コマンドを実行
よくわからなければこちらでbatファイルが配布されている。
↓
生成されたtxtをスプレッドシートにインポート
インポート時の区切り文字の種類は「カスタム」「 」
↓
C列に並べ替えやクリーンアップを活用して使用音素一覧を作る
クリーンアップで大文字小文字を区別せず重複を削除するとNが消えたりするので注意
↓
作った音素一覧を参考にphonemes.txtを編集する
↓
labの入ったフォルダで「copy *.lab __result.txt」コマンドを実行
よくわからなければこちらでbatファイルが配布されている。
↓
生成されたtxtをスプレッドシートにインポート
インポート時の区切り文字の種類は「カスタム」「 」
↓
C列に並べ替えやクリーンアップを活用して使用音素一覧を作る
クリーンアップで大文字小文字を区別せず重複を削除するとNが消えたりするので注意
↓
作った音素一覧を参考にphonemes.txtを編集する
前処理とトレーニング
- 設定を選択
acoustic.yamlまたはvariance.yamlの学習したい方を選択
最終的にどっちも学習するのでどっちでもいい。
最終的にどっちも学習するのでどっちでもいい。
- チェックポイントフォルダーを選択
チェックポイントと2値化したデータの保存先を選択
基本的には設定タブの「チェックポイントの保存先フォルダを選択」で用意したフォルダを選択することになる
基本的には設定タブの「チェックポイントの保存先フォルダを選択」で用意したフォルダを選択することになる
- データの前処理
学習データを2値化データにする。
ここで最後にエラーが出る場合は何かが間違っている。頑張ってログを読むかログの全文をスクショかコピペしてディスコ鯖に泣きつこう。
ここで最後にエラーが出る場合は何かが間違っている。頑張ってログを読むかログの全文をスクショかコピペしてディスコ鯖に泣きつこう。
- DBに休符しかないwavがありエラーを吐いた場合の対処法(自己責任)
「DiffSinger/preprocessing」内にある「variance(acoustic)_binarizer.py」の一部を書き変えて、休符のみのwavはエラーで止まるのではなく無視して次に進むようにして無理やり動かすことで解決できる。
詳細はこちらを確認。そこそこリスキーな方法なので自己責任。
詳細はこちらを確認。そこそこリスキーな方法なので自己責任。
wavファイルを特定できる場合はcsvファイルから 対象のwavファイルの行を消せばOK
- トレーニング
学習を開始する
デフォルト設定ではそれぞれ10万stepまで学習できる
デフォルト設定ではそれぞれ10万stepまで学習できる
シンガーのエクスポート(基本)
できたモデルを使いやすい形式に変換する。
- Acoustic / Variance
変換する方を選択。最終的にはどちらも変換する。
- チェックポイントフォルダーを選択
学習したモデルが入っているフォルダを選択。
基本的にはcheckpointsのサブフォルダ。
基本的にはcheckpointsのサブフォルダ。
- ONNXをエクスポート
onnxが生成される。
- acoustic(variance)のチェックポイントフォルダを選択
onnxフォルダではなくモデルが保存してあるフォルダを選択。
つまりcheckpointsのサブフォルダ。
つまりcheckpointsのサブフォルダ。
- デフォルトでは「enter_singer_name」と記入してある文字入力欄
シンガー名をスペースや特殊文字無しで入力。
これは後から修正できる。
これは後から修正できる。
- OPTIONAL:カスタムボコーダー
デフォルト以外のボコーダーを使う場合はここからボコーダーのONNXファイルを選ぶ。
よくわからなければ触らなくてもいい。後から修正も可能。
よくわからなければ触らなくてもいい。後から修正も可能。
- 保存先
OU向けに組み立てられたモデルの保存場所。
DiffTrainerではOUのSingersフォルダを推奨している。
DiffTrainerではOUのSingersフォルダを推奨している。
- OpenUtau用に出力
実行すると指定したフォルダ内にOUで使えるDiffSingerが生成される。
OUで読み込めるようにする
シンガーのエクスポートでは不足している設定を追加する
- OUにボコーダーをインストール
まだ一度もOUでDiffSingerを使ったことが無い場合、または導入していないボコーダーを使用する場合、OUにボコーダーをインストールする必要がある。
使用したいDiffSingerに合わせたoudepをOUにD&D。わからなければ全部導入してもOK。
よく使われてそうなもののURLは以下の通り。他にも存在している可能性あり。
公式
hifipln-v1※GPU動作が遅くなるバグ有り
hifipln-v2
PC-NSF-HiFiGAN
使用したいDiffSingerに合わせたoudepをOUにD&D。わからなければ全部導入してもOK。
よく使われてそうなもののURLは以下の通り。他にも存在している可能性あり。
公式
hifipln-v1※GPU動作が遅くなるバグ有り
hifipln-v2
PC-NSF-HiFiGAN
- dsdict.yamlを配置
エクスポートしたDiffSingerのフォルダ内のdsconfig.yamlが入っているフォルダそれぞれにdsdict.yamlを配置。
dsdict.yamlは配布されているものを使っても自作のものを使っても問題ない。
一つのシンガーに使用するdsdict.yamlはすべて同じ内容にする必要がある。
カノン氏製作(日本語)
めーぷる氏製作(日本語)
dsdict.yamlは配布されているものを使っても自作のものを使っても問題ない。
一つのシンガーに使用するdsdict.yamlはすべて同じ内容にする必要がある。
カノン氏製作(日本語)
めーぷる氏製作(日本語)
- OU上で設定を編集
OUにエクスポートしたDiffSingerを読み込んで、「ツール」→「シンガー」を選択。
エクスポートしたDiffSingerを選んで、歯車マークからアイコンなどを編集。
シンガータイプを設定→diffsinger
デフォルトのPhonemizerを設定→エクスポートしたDiffSingerのメインで使用する言語に合わせる。日本語ならDIFFS JA
エクスポートしたDiffSingerを選んで、歯車マークからアイコンなどを編集。
シンガータイプを設定→diffsinger
デフォルトのPhonemizerを設定→エクスポートしたDiffSingerのメインで使用する言語に合わせる。日本語ならDIFFS JA