Style-Bert-VITS2 WebUI (version 2.6.1)
下のようにmodel_assets
ディレクトリの中にモデルファイルたちを置いてください。
model_assets
├── your_model
│ ├── config.json
│ ├── your_model_file1.safetensors
│ ├── your_model_file2.safetensors
│ ├── ...
│ └── style_vectors.npy
└── another_model
├── ...
各モデルにはファイルたちが必要です:
config.json
:学習時の設定ファイル*.safetensors
:学習済みモデルファイル(1つ以上が必要、複数可)style_vectors.npy
:スタイルベクトルファイル
上2つはTrain.bat
による学習で自動的に正しい位置に保存されます。style_vectors.npy
はStyle.bat
を実行して指示に従って生成してください。
- プリセットまたは音声ファイルから読み上げの声音・感情・スタイルのようなものを制御できます。
- デフォルトのNeutralでも、十分に読み上げる文に応じた感情で感情豊かに読み上げられます。このスタイル制御は、それを重み付きで上書きするような感じです。
- 強さを大きくしすぎると発音が変になったり声にならなかったりと崩壊することがあります。
- どのくらいに強さがいいかはモデルやスタイルによって異なるようです。
- 音声ファイルを入力する場合は、学習データと似た声音の話者(特に同じ性別)でないとよい効果が出ないかもしれません。
テキスト | Language |
---|
既に1ファイル2-12秒程度の音声ファイル集とその書き起こしデータがある場合は、このタブは使用せずに学習できます。
Style-Bert-VITS2の学習用データセットを作成するためのツールです。以下の2つからなります。
- 与えられた音声からちょうどいい長さの発話区間を切り取りスライス
- 音声に対して文字起こし
このうち両方を使ってもよいし、スライスする必要がない場合は後者のみを使ってもよいです。コーパス音源などすでに適度な長さの音声ファイルがある場合はスライスは不要です。
必要なもの
学習したい音声が入った音声ファイルいくつか(形式はwav以外でもmp3等通常の音声ファイル形式なら可能)。 合計時間がある程度はあったほうがいいかも、10分とかでも大丈夫だったとの報告あり。単一ファイルでも良いし複数ファイルでもよい。
スライス使い方
inputs
フォルダに音声ファイルをすべて入れる(スタイル分けをしたい場合は、サブフォルダにスタイルごとに音声を分けて入れる)モデル名
を入力して、設定を必要なら調整して音声のスライス
ボタンを押す- 出来上がった音声ファイルたちは
Data/{モデル名}/raw
に保存される
書き起こし使い方
Data/{モデル名}/raw
に音声ファイルが入っていることを確認(直下でなくてもよい)- 設定を必要なら調整してボタンを押す
- 書き起こしファイルは
Data/{モデル名}/esd.list
に保存される
注意
- 長すぎる秒数(12-15秒くらいより長い?)のwavファイルは学習に用いられないようです。また短すぎてもあまりよくない可能性もあります。 この制限はVer 2.5では学習時に「カスタムバッチサンプラーを使わない」を選択すればなくなりました。が、長すぎる音声があるとVRAM消費量が増えたり安定しなかったりするので、適度な長さにスライスすることをおすすめします。
- 書き起こしの結果をどれだけ修正すればいいかはデータセットに依存しそうです。
すでに適度な長さの音声ファイルからなるデータがある場合は、その音声をData/{モデル名}/rawに入れれば、このステップは不要です。
Ver 2.5以降の変更点
raw/
フォルダの中で音声をサブディレクトリに分けて配置することで、自動的にスタイルが作成されるようになりました。詳細は下の「使い方/データの前準備」を参照してください。- これまでは1ファイルあたり14秒程度を超えた音声ファイルは学習には用いられていませんでしたが、Ver 2.5以降では「カスタムバッチサンプラーを無効化」にチェックを入れることでその制限が無しに学習できるようになりました(デフォルトはオフ)。ただし:
- 音声ファイルが長い場合の学習効率は悪いかもしれず、挙動も確認していません
- チェックを入れると要求VRAMがかなり増えるようので、学習に失敗したりVRAM不足になる場合は、バッチサイズを小さくするか、チェックを外してください
使い方
データを準備して、モデル名を入力して、必要なら設定を調整してから、「自動前処理を実行」ボタンを押してください。進捗状況等はターミナルに表示されます。
各ステップごとに実行する場合は「手動前処理」を使ってください(基本的には自動でいいはず)。
前処理が終わったら、「学習を開始する」ボタンを押すと学習が開始されます。
途中から学習を再開する場合は、モデル名を入力してから「学習を開始する」を押せばよいです。
JP-Extra版について
元とするモデル構造として Bert-VITS2 Japanese-Extra を使うことができます。 日本語のアクセントやイントネーションや自然性が上がる傾向にありますが、英語と中国語は話せなくなります。
まず音声データと、書き起こしテキストを用意してください。
それを次のように配置します。
├── Data/
│ ├── {モデルの名前}
│ │ ├── esd.list
│ │ ├── raw/
│ │ │ ├── foo.wav
│ │ │ ├── bar.mp3
│ │ │ ├── style1/
│ │ │ │ ├── baz.wav
│ │ │ │ ├── qux.wav
│ │ │ ├── style2/
│ │ │ │ ├── corge.wav
│ │ │ │ ├── grault.wav
...
配置の仕方
- 上のように配置すると、
style1/
とstyle2/
フォルダの内部(直下以外も含む)に入っている音声ファイルたちから、自動的にデフォルトスタイルに加えてstyle1
とstyle2
というスタイルが作成されます - 特にスタイルを作る必要がない場合や、スタイル分類機能等でスタイルを作る場合は、
raw/
フォルダ直下に全てを配置してください。このようにraw/
のサブディレクトリの個数が0または1の場合は、スタイルはデフォルトスタイルのみが作成されます。 - 音声ファイルのフォーマットはwav形式以外にもmp3等の多くの音声ファイルに対応しています
書き起こしファイルesd.list
Data/{モデルの名前}/esd.list
ファイルには、以下のフォーマットで各音声ファイルの情報を記述してください。
path/to/audio.wav(wavファイル以外でもこう書く)|{話者名}|{言語ID、ZHかJPかEN}|{書き起こしテキスト}
- ここで、最初の
path/to/audio.wav
は、raw/
からの相対パスです。つまり、raw/foo.wav
の場合はfoo.wav
、raw/style1/bar.wav
の場合はstyle1/bar.wav
となります。 - 拡張子がwavでない場合でも、
esd.list
にはwav
と書いてください、つまり、raw/bar.mp3
の場合でもbar.wav
と書いてください。
例:
foo.wav|hanako|JP|こんにちは、元気ですか?
bar.wav|taro|JP|はい、聞こえています……。何か用ですか?
style1/baz.wav|hanako|JP|今日はいい天気ですね。
style1/qux.wav|taro|JP|はい、そうですね。
...
english_teacher.wav|Mary|EN|How are you? I'm fine, thank you, and you?
...
もちろん日本語話者の単一話者データセットでも構いません。
自動前処理
学習時に特定の部分を凍結させるかどうか
Step 1: 設定ファイルの生成
Step 2: 音声ファイルの前処理
Step 3: 書き起こしファイルの前処理
Step 4: BERT特徴ファイルの生成
Step 5: スタイル特徴ファイルの生成
学習
学習再開の場合の場合はチェックしてください
VRAMに余裕がある場合にチェックすると、長い音声ファイルも学習に使われるようになります
進捗はターミナルで確認してください。結果は指定したステップごとに随時保存されており、また学習を途中から再開することもできます。学習を終了するには単にターミナルを終了してください。
Style-Bert-VITS2でこまかくスタイルを指定して音声合成するには、モデルごとにスタイルベクトルのファイルstyle_vectors.npy
を作成する必要があります。
ただし、学習の過程では自動的に、平均スタイル「Neutral」と、(Ver 2.5.0以降からは)音声をサブフォルダに分けていた場合はそのサブフォルダごとのスタイルが保存されています。
方法
- 方法0: 音声を作りたいスタイルごとのサブフォルダに分け、そのフォルダごとにスタイルベクトルを作成
- 方法1: 音声ファイルを自動でスタイル別に分け、その各スタイルの平均を取って保存
- 方法2: スタイルを代表する音声ファイルを手動で選んで、その音声のスタイルベクトルを保存
- 方法3: 自分でもっと頑張ってこだわって作る(JVNVコーパスなど、もともとスタイルラベル等が利用可能な場合はこれがよいかも)
音声をスタイルごとにサブフォルダを作り、その中に音声ファイルを入れてください。
注意
- Ver 2.5.0以降では、
inputs/
フォルダやraw/
フォルダにサブディレクトリに分けて音声ファイルを入れるだけで、スタイルベクトルが自動で作成されるので、この手順は不要です。 - それ未満のバージョンで学習したモデルに新しくスタイルベクトルをつけたい場合や、学習に使ったのとは別の音声でスタイルベクトルを作成したい場合に使います。
- 学習との整合性のため、もし現在学習中や、今後学習する予定がある場合は、音声ファイルは、
Data/{モデル名}/wavs
フォルダではなく新しい別のディレクトリに保存してください。
例:
audio_dir
├── style1
│ ├── audio1.wav
│ ├── audio2.wav
│ └── ...
├── style2
│ ├── audio1.wav
│ ├── audio2.wav
│ └── ...
└── ...
DBSCANという方法でスタイル分けを行います。 こちらの方が方法1よりも特徴がはっきり出るもののみを取り出せ、よいスタイルベクトルが作れるかもしれません。 ただし事前にスタイル数は指定できません。
パラメータ:
- eps: この値より近い点同士をどんどん繋げて同じスタイル分類とする。小さいほどスタイル数が増え、大きいほどスタイル数が減る傾向。
- min_samples: ある点をスタイルの核となる点とみなすために必要な近傍の点の数。小さいほどスタイル数が増え、大きいほどスタイル数が減る傾向。
UMAPの場合はepsは0.3くらい、t-SNEの場合は2.5くらいがいいかもしれません。min_samplesはデータ数に依存するのでいろいろ試してみてください。
スタイル分けの結果
注意: もともと256次元なものをを2次元に落としているので、正確なベクトルの位置関係ではありません。
結果が良さそうなら、これを保存します。
下のテキスト欄に、各スタイルの代表音声のファイル名を,
区切りで、その横に対応するスタイル名を,
区切りで入力してください。
例: angry.wav, sad.wav, happy.wav
とAngry, Sad, Happy
注意: Neutralスタイルは自動的に保存されます、手動ではNeutralという名前のスタイルは指定しないでください。
複数のStyle-Bert-VITS2モデルから、声質・話し方・話す速さを取り替えたり混ぜたり引いたりして新しいモデルを作成できます。
使い方
マージ方法の選択
マージの方法には4つの方法があります。
- 通常のマージ
new = (1 - weight) * A + weight * B
: AとBのモデルを指定して、要素ごとに比率を指定して混ぜる- 単純にAとBの二人の話し方や声音を混ぜたいとき
- 差分マージ
new = A + weight * (B - C)
: AとBとCのモデルを指定して、「Bの要素からCの要素を引いたもの」をAに足す- 例えば、Bが「Cと同じ人だけど囁いているモデル」とすると、
B - C
は「囁きを表すベクトル」だと思えるので、それをAに足すことで、Aの声のままで囁き声を出すモデルができたりする - 他にも活用例はいろいろありそう
- 例えば、Bが「Cと同じ人だけど囁いているモデル」とすると、
- 重み付き和
new = a * A + b * B + c * C
: AとBとCのモデルを指定して、各モデルの係数を指定して混ぜる- 例えば
new = A - B
としておくと、結果としてできたモデルを別のモデルと「ヌルモデルの加算」で使うことで、差分マージが実現できる - 他にも何らかの活用法があるかもしれない
- 例えば
- ヌルモデルの加算
new = A + weight * B
: AとBのモデルを指定して、Bのモデルに要素ごとに比率をかけたものをAに足す- Bのモデルは重み付き和などで
C - D
などとして作っている場合を想定している - 他にも何らかの活用法があるかもしれない
- Bのモデルは重み付き和などで
マージの手順
- マージ元のモデルたちを選択(
model_assets
フォルダの中から選ばれます) - マージ後のモデルの名前を入力
- 指示に従って重みや係数を入力
- 「モデルファイルのマージ」ボタンを押す (safetensorsファイルがマージされる)
- 結果を簡易音声合成で確認
- 必要に応じてスタイルベクトルのマージを行う
以上でマージは完了で、model_assets/マージ後のモデル名
にマージ後のモデルが保存され、音声合成のときに使えます。
またmodel_asses/マージ後のモデル名/recipe.json
には、マージの配合レシピが記録されます(推論にはいらないので配合メモ用です)。
一番下にマージしたモデルによる簡易的な音声合成機能もつけています。
注意
- 1.x系と2.x-JP-Extraのモデルマージは失敗するようです。
- 話者数が違うモデル同士はおそらくマージできません。
weight
を下の各スライダーで定める数値とすると、各要素ごとに、
new_model = (1 - weight) * A + weight * B
としてマージされます。
つまり、weight = 0
のときはモデルA、weight = 1
のときはモデルBになります。
1. モデルファイル (safetensors) のマージ
2. 結果のテスト
マージ後のモデルで音声合成を行います。ただし、デフォルトではスタイルはNeutral
しか使えないので、他のスタイルを使いたい場合は、下の「スタイルベクトルのマージ」を行ってください。
3. スタイルベクトルのマージ
- マージ後のモデルにいくつスタイルを追加したいかを「作りたいスタイル数」で指定
- マージ前のモデルのスタイルを「各モデルのスタイルを取得」ボタンで取得
- どのスタイルたちから新しいスタイルを作るかを下の欄で入力
- 「スタイルのマージ」をクリック
スタイルベクトルの混ぜられ方
- 構造上の相性の関係で、スタイルベクトルを混ぜる重みは、加重和以外の場合は、上の「話し方」と同じ比率で混ぜられます。例えば「話し方」が0のときはモデルAのみしか使われません。
- 加重和の場合は、AとBとCの係数によって混ぜられます。
Hello world!