序章
AI ステファニー サンの爆発により、主要なビデオ プラットフォームでの AI 音声の投稿数が急増し、ステーション B のホームページから関連ビデオが頻繁にプッシュされます。私はたまたま AIGC に非常に興味があり、アクションほど心が優れていないため、自分の声でモデルをトレーニングしたところ、プロセス全体が非常に簡単で、最終的な効果も優れていることがわかりました。実際に必要なのは手を加えるだけなので、今回は私自身のトレーニングと推論プロセスの経験を皆さんと共有します
ソビッツ
まず、今日お話しする Sovits についてご紹介します。So-vits-svc (別名 Sovits) は、VITS、soft-vc、VISinger2 などのプロジェクトに基づいて中国民謡合成愛好家の Rcell によって開発されたオープン ソースの無料 AI 音声変換ソフトウェアです。SoftVC コンテンツ エンコーダーを使用してソース オーディオの音声特徴を抽出し、F0 と同時に VITS を入力して元のテキスト入力を置き換え、歌声変換の効果を実現します。
何らかの理由で、元の作成者 Rcell が元のコード ウェアハウスを削除し、現在 svc-develop-team がフォローアップ メンテナンスを引き継いでいます。現在のウェアハウス アドレス: https://github.com/svc-develop-team/so-vits-svc
構成要件
- CUDA をサポートし、少なくとも 6G のビデオ メモリを搭載した NVIDIA グラフィック カード
- システムの利用を推奨します
Windows
。その後の教材処理や学習、チュートリアルの推論はすべてWindows
プラットフォーム上で完結します。同時に統合パッケージのGUIを利用することで、初心者でも複雑な環境設定などの作業を回避し、学習・推論そのものに集中することができます。
環境構成
この環境では、bilibili@羽布団ボスが提供する統合パッケージを使用します: https://www.yuque.com/umoubuton/ueupp5/sdahi7m5m6r0ur1r。ダウンロード アドレスといくつかの手順を確認できます。
ダウンロード後、Sovits 圧縮パッケージとツール ソフトウェアが提供されますので、so-vits-svc を解凍し、中のファイルを開くと、自動的に環境が启动webui.bat
準備され、Web ページが表示されます。
Web ページのタブ ページをトレーニング ページに切り替えると、グラフィック カードの情報が表示されます。
確認後、トレーニングを開始できます
データセットの準備
データセットの品質とサイズによって、トレーニング モデルの品質の上限と下限が決まります。品質の低いデータセットでどれだけ長時間トレーニングしたり、何万ステップをトレーニングしたとしても、理想的な効果を達成することは不可能です。
乾燥する準備ができています
ソビッツのトレーニングでは、トレーニングしたい音声ラインに対応するドライ サウンド 素材をいくつか見つける必要があります。複数の音声ラインを混合しないでください。継続時間は 2 時間以上が望ましく、最低でも 30 分以上です。そうでない場合、トレーニングされたモデルの品質は保証されません。話す声、読む声、または歌う声にすることができます (泣き声、笑い声、その他の音を追加すると奇跡的な効果があると言う人もいます。私は試したことはありません。試してみてください)。モデルを歌わせたい場合、歌の素材は次のことを行う必要があります。低音、中音、高音の複数の周波数をカバーします
ドライ音素材には伴奏、残響、ハーモニーが含まれていないこと(独自のBGMとの変換音は避けてください)、呼吸音、ビブラート、音の遷移などがなく、背景ノイズが可能な限り除去されていること
ノイズ減少
元の素材が伴奏リバーブのないドライなサウンドファイルで、背景ノイズが多少うるさい場合は、Adobe Audition
ノイズリダクション処理に (以下 AU と呼びます) を使用できます。
チュートリアル: https://helpx.adobe.com/en/audition/using/noise-reduction-restoration-Effects.html
リバーブを伴う
素材が以前に録音された曲である場合は、伴奏を消して残響を除去する必要があるため、Ultimate Vocal Remover v5 (略して UVR5)を使用することをお勧めします。
UVR5 をダウンロードした後、残響効果がより良くなるように、オーディオを処理する前にオプションをAdvanced VR Options
オンにすることをお勧めします (形而上学)Post-Process
次に、伴奏を開始します。次の構成をお勧めします。
- 処理方法: Demucs
- ステム: ボーカル
- Demucs モデル: v3 | UVR_Model_1注: 対応するモデルが見つからない場合は、ドロップダウン ボックスで [ダウンロード] を選択して、ソフトウェアに対応するモデルをダウンロードできます。
- GPU変換にチェックを入れます
次に、処理されたボーカル ファイルに対して残響除去処理を実行します。次の構成をお勧めします。
- 処理方式:VRアーキテクチャ
- ウィンドウサイズ: 320
- 攻撃性設定: 10
- VRモデル: 5_HP-Karaoke_UVR
- GPU変換にチェックを入れます
- 母音のみをチェックする
このような簡単な手順で、ソング ファイルからドライ サウンドを抽出できました。抽出された効果が満足のいくものではないと思われる場合は、RipX DeepAudioを使用して調整することもできます。
ファイルを RipX にインポートすると、以下に示すような曲線が生成されます。
黄色の曲線の 1 つをクリックしてこのオーディオを再生します。セグメントごとに聞いて、手動でノイズ部分を削除できます。
ラウドネスの一致
ドライサウンド素材のソースが異なる場合、素材のラウドネスが異なる場合があるため、AU を使用してすべてのオーディオのラウドネスを一致させ、すべての素材のデシベル値が均一の範囲内になるようにする必要があります。
チュートリアル: https://helpx.adobe.com/en/audition/using/match-loudness.html
圧力限界
ドライサウンドの大きさは -6db を超えないようにしてください。Adobe Audition
使用するコンプレッサーによってサウンドのデシベルが -6db 以内に制限されることをお勧めします。
チュートリアル: https://helpx.adobe.com/en/audition/using/amplitude-compression-Effects.html
スライス
すべてのドライサウンド素材が処理されたら、次のステップはこれらの素材を 2 ~ 15 秒の小さな断片にカットすることです (断片は長すぎてビデオ メモリをバーストできません。20 秒を超えないことが最善です)。ここでは、ラウドネスのしきい値と間隔時間に従ってオーディオを自動的にスライスできるオーディオ スライサーを使用することをお勧めします。
ドライ サウンド ファイルをドラッグした後、デフォルトのパラメータを使用して最初にスライスし、次に出力ディレクトリに移動して、ファイル サイズの降順にファイルを並べ、15 秒を超えるオーディオ スライスがあるかどうかを確認します。ある場合は、これらのオーディオ ファイルをソフトウェアにドラッグして戻し、次のパラメータに従って再度スライスします。
- 閾値(db):-20
- 最小間隔: 100
- 最大無音長(ms):500
一般に、15 秒を超えるオーディオはありません。ある場合は、これらのパラメータの意味を以下に示します。パラメータを自分で調整してみることもできます。また、他のオーディオ処理ツール (AU など) を使用して手動でスライスすることもできます
- しきい値
RMS しきい値 (dB)。すべての RMS 値がこのしきい値を下回るエリアは、サイレントとみなされます。音声にノイズが多い場合は、この値を増やします。デフォルト値は -40 です。
- 最小長さ
スライスされた各オーディオ クリップに必要な最小長 (ミリ秒単位)。デフォルト値は 5000 です。
- 最小間隔
スライスする無音の最小の長さ (ミリ秒単位)。音声に短い中断しか含まれない場合は、この値を低く設定します。この値が小さいほど、このアプリケーションはより多くのスライスされたオーディオ クリップを生成します。この値は、最小長より小さく、ホップ サイズより大きくなければならないことに注意してください。デフォルト値は 300 です。
- ホップサイズ
各 RMS フレームの長さ (ミリ秒)。この値を増やすとタイルの精度は向上しますが、処理は遅くなります。デフォルト値は 10 です。
- 最大無音長
スライスされたオーディオの周囲に保持する無音の最大長 (ミリ秒単位)。必要に応じてこの値を調整します。この値を設定しても、スライスされたオーディオの無音が正確に指定された長さになることを意味するわけではないことに注意してください。上で述べたように、アルゴリズムはスライスするのに最適な場所を検索します。デフォルト値は 1000 です。
最後に、短すぎる音声スライスを忘れずに削除してください。
フォーマット変換
データセットのフォーマットは、wav
元の波形フォーマットである必要があります。確認してください。非フォーマットのファイルがある場合は、wav
フォーマット変換を行う必要があります。それを使用するFoobar2000
か、直接FFmepg
変換に使用することをお勧めします。
重命名
中国語などの英語以外の文字はデータ セットに含めることはできません。特殊文字にはアンダースコアのみを使用することをお勧めします。Windows
すべてのファイルを直接選択して名前を変更します。ファイル名は次の形式になります:
- xxx (1).wav
- xxx (2).wav
- …
私はこの名前付けを個人的にテストしました。警告は報告されますが、トレーニングには影響せず、実行可能です。
事前トレーニング
それからトレーニングを始めました
データセットを置く
まず、処理したすべてのドライサウンドをフォルダーに配置し、次にこのフォルダーをso-vits-svc
ディレクトリの下のdataset_raw
フォルダーに配置します。
データの前処理
WebUI インターフェイスを開き、トレーニング タブに切り替え、最初をクリックします。识别数据集
上のテキスト ボックスに準備したデータ セットの名前が表示され、次に使用したトレーニングを選択します。ここで、写真にマークされている 2 つのオプション (現時点ではより良いオプションです) を選択します。次に、データ前処理编码器
をf0预测器
クリックします。進行状況が前処理出力情報の列に出力されます。完了するまで辛抱強く待ちます。
トレーニング構成
データの前処理が完了するのを待った後、トレーニング設定とパラメーターを構成ファイルに書き込む必要があります。
ここでは、パラメータの意味と推奨設定を紹介します。
- ステップ数(ステップ)ごとに評価ログを生成:現在のステップ数での学習率や損失値などを一定ステップ数ごとに出力し、好みに応じて記入します
- ステップ数(ステップ)ごとにモデルを検証して保存します。文字通り、個人の好みに応じてモデルを入力できます。
- 最新の X モデルのみを保持します。110,000 ステップまでトレーニングすると、モデルは 600MB 近くになります。ハードディスクのサイズと個人的な好みに応じて埋めることができます。
- バッチ サイズ: バッチ サイズを大きくすると、トレーニング時間が短縮され、安定性が向上しますが、モデルの汎化能力の低下にもつながります。したがって、ビデオ メモリが大きい場合でも、このパラメーターをあまり大きく設定することはお勧めできません。4 を使用することをお勧めします。
- 学習率: 初期学習率が大きすぎると、モデルは収束できません。小さすぎると、モデルの収束が非常に遅くなるか、学習できません。デフォルト値の 0.0001 を使用することをお勧めします。
- fp16 混合精度トレーニングを使用する: 混合精度トレーニングでは、精度損失を可能な限り低減しながらトレーニングを高速化するために、半精度浮動小数点数を使用します。重みと勾配を保存するために FP16、つまり半精度浮動小数点数を使用するため、メモリ使用量を削減しながらトレーニングを高速化します。理論的には、混合精度を使用しても精度損失はほとんど発生しませんが、モデルの品質への影響はまだ検証されていません。グラフィックカードは十分です。
- データ セットをメモリにロードします。メモリが十分なときに確認することをお勧めします。これにより、トレーニングが高速化されます。
すべてのトレーニング パラメーターを設定したら、下の [設定ファイルの書き込み] ボタンをクリックすると、下の出力情報に表示され配置文件写入完成
、正式なトレーニングを開始できます。
正式な訓練
下の をクリックする从头开始训练
と、新しいターミナル ウィンドウが表示され、現在のトレーニング ログが継続的に出力されます。
私のトレーニング パラメータは、200 ステップごとに評価ログを生成し、1000 ステップごとにモデルを保存するように設定されています。ログの出力値は、モデルの出力と実際の値とのギャップを表します。理論的には、値が低いほど良いと考えられます。値が低いほど、モデルが出力するサウンドは実際の人の声に近づきます。しかし、経験から、これは当てはまらない可能性があります。損失値が低すぎると、モデルが過学習している可能性もあります。このパラメータは参照としてのみ使用できます。推論用のモデルreference_loss
テスト
トレーニングは自動的に終了しません。トレーニングがほぼ完了したと感じ、モデルの実際の効果を試したい場合は、トレーニング ターミナル ウィンドウでキーボードを入力してトレーニングを停止できます。今回トレーニングされたモデルに満足できず、トレーニングを続行したい場合は、クリックすると、プログラムは最後に自動的に保存されたモデルの進行状況からトレーニングを続行しCtrl + C
ます继续上一次的训练进度
。
推論
ロードモデル
モデルがトレーニングされた後、タブを切り替えてモデルの実際の効果推理
を
まず をクリックする刷新选项
と、前にトレーニングしたモデルが と のドロップダウン メニューに表示されます模型选择
。配置文件
前のreference_loss
値を参照して、モデル (G で始まる) を選択し、トレーニングに使用する構成ファイルを選択し、モデルのロードをクリックして、下のテキスト ボックスに単語が表示されるまで待ちます。その後、推論を正式に開始Output Message
でき模型加载成功
ます
推理を始める
Sovits はサウンド変換ツールです。まず、変換したいオリジナルのサウンド オーディオを見つける必要があります。データセットの準備に関する章と同じです。伴奏、残響、ハーモニーのないドライなサウンドが必要です。モデルに歌を歌わせたい場合は、以前にデータセットを準備したときに使用した方法を使用し、伴奏の残響から原曲を直接削除し、処理後に音声アップロード領域にドラッグします。
デフォルトのf0 予測器pm
によって推論された音質が最高であるため、最初はデフォルトのパラメータを推論に使用し、問題がある場合は目的の方法でパラメータを調整することをお勧めします。
下のボタンをクリックして音频转换
しばらくお待ちください。Output Audio
そこで推論音声が生成されます。
それを聞いた後、特定の問題に応じて変換パラメータを設定します。
- 無音
ミュートの原因は、元のオーディオのハーモニー部分がきれいではないため、f0 予測器によるピッチの予測に誤差が生じ、予測が非常に高いピッチになり、モデルが歌うことができないためです。
この問題を解決するには2つの方法があり、1つはソースから問題を解決し、元のオーディオの倍音残響を除去し、より純粋なドライサウンドを取得して再推論する方法と、f0プレディクタを適度に調整して置き換え(通常はデフォルト値を使用し、サイズとサイズの変更に違いはありません)、その後再推論することで基本的にこの問題は解決できますが、音質はf0プレディクタほど良くありcrepe
ませF0过滤阈值
んpm
。
- 射程距離が大きすぎる
トレーニングされたモデルが男性の声であるが、推論に使用される元の声が女性の声である場合、またはその逆の場合、範囲ギャップが大きすぎる状況に遭遇すると、推論された音声は見苦しくなります。
これを修正するには f0 自動予測オプションをオンにすることができますが、オプションで説明したように、このオプションは音声を変換する場合にのみ使用可能であり、歌声を変換するときにこのオプションをオンにすると致命的なチューニングのずれが発生します。
それが歌声であり、本当にこの曲を歌いたい場合は、自分の音域により適したカバーオーディオを見つけて、このオーディオ処理を推論用のオリジナルサウンドとして使用することをお勧めします
- 一部の音を高く(低く)歌えない
トレーニング中に供給されたデータセットは声域の一部をカバーしていませんでした
ここでの転置オプションは、最初に推論してから転置するようです? したがって、この場合は機能しません。最初に AU を使用して元のオーディオ周波数を適切な範囲に調整してから推論することをお勧めします。
- バーストビデオメモリ
推論のプロセスでは、推論のラウドネスしきい値に従って元のオーディオを小さなスライスに切り出し、最終的にそれらを合成するため、ビデオ メモリのバーストが発生する可能性があります。スライスの 1 つが長すぎる場合、ビデオ メモリのバーストが発生する可能性があります。
元のオーディオをより細かい部分にカットできるように、スライスのしきい値を増やすことができます。また、オーディオの自動スライスの値を直接調整して強制スライスを有効にすることもできます。たとえば、10 を入力すると、オーディオが時々メモリにバーストしないように、10 秒ごとにオーディオがセクションにカットされます。
合成
歌の場合は、変換後のドライボイスと伴奏を最終的に1つの音声ファイルにまとめることができますが、AUなどのソフトを使用することもできますし、合成前にドライボイスにEQやリバーブの調整を行うこともできますので、ここでは音楽の知識についてはあまり語りません。
終わり
最後に、私が自分でトレーニングしたモデルによって推定された歌声を投稿します。高品質のドライ サウンド 素材を 30 分、低品質の素材 (ノイズと残響が多い) を 30 分使用しました。110,000 ステップのトレーニング後、f0 予測器を使用して推論しましたcrepe
。
リンク: https://www.bilibili.com/audio/au3907000
Sovits モデルをトレーニングするのは初めてです。漏れや間違いがあれば、ご指摘ください。