Python による AI 音声クローン作成のエンドツーエンド ガイド

Python による AI 音声クローン作成のエンドツーエンド ガイド

AI 音声クローニングは、音声の固有の特徴を捉えて正確に複製する技術です。この技術により、既存のサウンドを複製するだけでなく、まったく新しいサウンドを作成することもできます。これは、パーソナライズされた曲からカスタムのナレーションまで、コンテンツ作成に革命をもたらし、言語や文化の壁を越えた創造性の世界を切り開くツールです。

この記事では、AI 音声クローン技術を活用したエンドツーエンドのソリューションを紹介します。カスタム モデルをトレーニングすることで、任意のオーディオを選択したアーティストのトーンや自分の声に変換できます。

技術的背景

この記事で使用する技術は、歌声変換と呼ばれるもので、具体的には「SoftVC VITS 歌声変換」の略である SO-VITS-SVC と呼ばれるシステムです。

SO-VITS-SVC システムは、ディープラーニング技術を使用したサウンド変換 (SVC) の高度な実装を表します。このシステムを理解するには、使用される特定の機械学習アーキテクチャとアルゴリズムを理解する必要があります。

1. 変分推論と生成的敵対ネットワーク

SO-VITS-SVC の中核となるのは、テキスト読み上げ用変分推論 (VITS) アーキテクチャです。このシステムは、変分オートエンコーダ (VAE) と生成的敵対ネットワーク (GAN) を巧みに組み合わせています。 SVC では、メル スペクトログラムはオーディオ信号の重要な表現です。VAE を使用してメル スペクトログラムの分布をモデル化すると、音声の潜在的な変数を捉えるのに役立ちます。

VAE損失関数は以下のように表される。ここで、x は入力メル スペクトログラム、z は潜在変数、KL は Kullback-Leibler ダイバージェンスです。

上記の式は、VAE 損失関数をカプセル化し、Kullback-Leibler ダイバージェンスを通じてメル スペクトログラムの再構築と潜在空間の正規化のバランスをとります。

GAN は合成オーディオのリアリティを高めます。 GAN の識別器はジェネレータの出力を判断し、ジェネレータの精度を向上させます。 GAN 損失関数は次のとおりです。

GAN 損失関数は、生成モデルを駆動して区別がつかない歌声を生成する敵対的トレーニング ダイナミクスを示します。

変分オートエンコーダ (VAE) と敵対的生成ネットワーク (GAN) を完全に理解したい場合は、次の元の論文をご覧ください。

VAE: Kingma, DP、Welling, M.「Auto-Encoding Variational Bayes」arXiv:1312.6114、2013 年。

GAN: Goodfellow, IJ, et al. 「Generative Adversarial Nets」 arXiv:1406.2661, 2014。

2. 浅い拡散プロセス

添付の図に示すように、浅い拡散プロセスはノイズ サンプルから始まり、一連の変換を通じて徐々に構造化されたメル スペクトログラムに洗練されます。

上の図は、浅い拡散モデルの初期ノイズ生成からメル スペクトログラムの改良、最終的な可聴音出力の音声エンコードまでの SO-VITS-SVC 合成パイプラインを示しています。

初期ノイズ サンプル: 拡散プロセスの開始点となるノイズの視覚的表現。

変換手順: ノイズは拡散モデル内の一連の手順を経て、無秩序な状態から構造化されたメル スペクトログラムに移行します。ここで、xt はステップ t におけるデータであり、ε はガウスノイズを表します。

上記の式は、ランダム ノイズを対象の歌声の微妙なニュアンスを捉える構造化データに変換する拡散プロセス中の段階的な変換を示しています。 SO-VITS-SVC のコンテキストでは、「浅い」とはレイヤーやステップが少なく、計算効率とオーディオ品質のバランスが取れていることを意味します。

メル スペクトログラムの最適化: このプロセスの結果は、歌声のオーディオ コンテンツをカプセル化したメル スペクトログラムであり、次の合成段階の準備が整います。

サウンド エンコーディング: 最後のサウンド エンコーディング ステップでは、メル スペクトログラムをサウンド波形 (聞き取れる歌声) に変換します。

拡散モデルを詳しく調べたい場合は、次のリソースをご覧ください。

Sohl-Dickstein, J., et al. 「非平衡熱力学を用いた教師なし深層学習」arXiv:1503.03585, 2015年。

Ho, J., et al. 「拡散確率モデルのノイズ除去」arXiv:2006.11239, 2020年。

3. プロセス全体とSVCシステムの統合

浅い拡散モデルがノイズをより一貫した形式に構造化した後、生成されたメル スペクトログラムは、前述のグラフに示すように、歌声の微妙なオーディオ コンテンツをキャプチャします。このメル スペクトログラムは、生の非構造化データと最終的なサウンド出力の間の重要な橋渡しとして機能します。

最適化されたメル スペクトログラムは、ボコーダーを使用してオーディオ波形に変換されます。このステップでは、視覚データが可聴な歌声に変換されます。ボコーダーの役割は、メル スペクトログラムでキャプチャされたピッチ、音色、リズムの微妙な違いを合成して、最終的な歌声出力を生成することです。

高忠実度の合成を実現するために、SO-VITS-SVC システムを再トレーニングして最適化します。トレーニングは、VAE、GAN、拡散モデル コンポーネントの寄与を組み合わせた損失関数を最適化することから構成されます。この最適化は、全体的な損失を最小限に抑えることを最終目標として、確率的勾配降下法や Adam などのアルゴリズムを使用して実行されます。このプロセスにより、最終的な出力が音色、ピッチ、リズムの点で対象の歌声に非常に近くなることが保証されます。

このプロセスの最終結果は、対象の歌声に非常によく似た合成音声です。ソースサウンドの音楽性と表現のニュアンスを維持しながら、ターゲットの音質を採用する能力は、SO-VITS-SVC システムの洗練性を反映しています。

4. 使用されるPythonライブラリ

GitHub の SO-VITS-SVC フォークは、リアルタイムのボーカル変換用に設計されたプロフェッショナル ツールです。これは、CREPE を使用したより正確なピッチ推定、グラフィカル ユーザー インターフェイス (GUI)、トレーニング時間の短縮、pip インストール ツールの使いやすさなど、強化された機能を提供するオリジナルの SO-VITS-SVC プロジェクトのフォークです。

また、QuickVC を統合し、元のリポジトリに存在するいくつかの問題を修正しました。リアルタイム音声変換にも対応しています。使い方を実演してみましょう。

AI音声クローン

サウンドクローニングは、一般的に推論段階と呼ばれ、ニューラルネットワークモデルが特定のサウンドを理解するためにデータセットでトレーニングされた後、学習したサウンドを使用して新しいコンテンツを生成するプロセスを指します。

この段階では、事前トレーニング済みのモデルに新しい入力(生のボーカル オーディオ)を提供することで AI に「歌わせる」ことができ、アーティストの歌唱スタイルを模倣した生のボーカル オーディオの出力が生成されます。

1. 環境を整える

簡単にするために、仮想環境を作成してから使用します。

 conda create -n sovits-svc conda activate sovits-svc

必要なライブラリをインストールします。

 !python -m pip install -U pip wheel %pip install -U ipython %pip install -U so-vits-svc-fork

svcコマンドを実行して、次の図のようなエラーが発生した場合

pip uninstall Torchaudio を使用して Torchaudio をアンインストールし、次に pip install Torchaudio を使用して再インストールする必要があります。これは、一部の依存関係が完全にインストールされていないことが原因である可能性があります。そのため、それらをアンインストールして再インストールしてください。

2. 事前学習済みモデル

EntrepreneurdlyはHuggingfaceで多くの事前トレーニング済みモデルを提供しています

直接ダウンロードして使用します:

 from huggingface_hub import hf_hub_download import os # Set the repository ID and local directory, we'll use Drake's Model repo_id = 'Entreprenerdly/drake-so-vits-svc' local_directory = '.' # Download the config.json file config_file = hf_hub_download( repo_id=repo_id, filename='config.json', local_dir=local_directory, local_dir_use_symlinks=False ) # Construct the path to the config file in the current directory local_config_path = os.path.join(local_directory, 'config.json') print(f"Downloaded config file: {local_config_path}") # Download the model file model_file = hf_hub_download( repo_id=repo_id, filename='G_106000.pth', local_dir=local_directory, local_dir_use_symlinks=False ) # Construct the path to the model file in the current directory local_model_path = os.path.join(local_directory, 'G_83000.pth') print(f"Downloaded model file: {local_model_path}")

3. クリーンなオーディオファイルを選択する

次のステップはオーディオをコピーすることですが、ここでのオーディオは人間の声のみのクリーンなオーディオ ファイルである必要があります。オーディオにノイズが多い場合は、手動で前処理する必要があります。ソースオーディオの品質は音声変換の忠実度に大きく影響する可能性があるため、常に高品質でクリーンな録音を使用することをお勧めします。

 import requests vocals_url = 'https://drive.google.com/uc?id=154awrw0VxIZKQ2jQpHQQSt__cOUdM__y' response = requests.get(vocals_url) with open('vocals.wav', "wb") as file: file.write(response.content) display(Audio('vocals.wav', autoplay=True))

4. 推論を実行する

 from IPython.display import Audio, display import os # Filenames audio_filename = 'vocals.wav' model_filename = 'G_106000.pth' config_filename = 'config.json' # Construct the full local paths audio_file = f"\"{os.path.join('.', audio_filename)}\"" model_path = f"\"{os.path.join('.', model_filename)}\"" config_path = f"\"{os.path.join('.', config_filename)}\"" # Running the inference command !svc infer {audio_file} -m {model_path} -c {config_path}

5. 出力の表示

出力オーディオは、Jupyter ノートブックまたは任意の IPython インターフェースに直接表示できます。

 from IPython.display import Audio, display # Path for the output audio file output_audio_path = "vocals.out.wav" # Display the output audio display(Audio(output_audio_path, autoplay=True))

GUIの使用

SO-VITS-SVC システムは、音声変換を実行するためのオプションの GUI を提供します。次のコマンドで起動できます

svcg

独自のAIモデルをトレーニングする

上記では、事前トレーニング済みのモデルを使用した推論プロセスを示しました。次に、独自のモデルをトレーニングする方法を紹介します。

SO-VITS-SVC システムを使用してカスタム歌声変換モデルをトレーニングするために必要な手順を示します。まずデータセットを準備し、環境設定とモデルのトレーニングに進み、最後に既存のオーディオクリップから歌声を生成する生成に進みます。

このタスクは計算負荷が高いため、ハイエンドの GPU と大容量の VRAM (通常 10 GB 以上) を備えたシステムが必要です。個人のハードウェアがこれらの要件を満たしていない場合は、Google Colab が実行可能な代替手段となり、強力な GPU と十分なメモリ (T4 GPU で十分) へのアクセスを提供します。

1. データの準備

カスタム so-vits-svc モデルのトレーニングに適した多くの音声データセットは、Hugging Face で見つかります。しかし、独自のモデルをカスタマイズして、独自の声の特徴を反映させるには、自分の声を録音する必要があります。

サウンドサンプルの要件:

  • サンプルの長さ: セグメントあたり 10 秒が最適です。この長さは、処理に過度の負担をかけずに音のニュアンスを捉えるのに最適です。
  • サンプルサイズ: データが多いほど、効果は高くなります。最低 200 個のサウンド サンプルが必要です。歌唱が必要な場合は、同様の比率で 50 個の歌唱サンプルと 150 個の話し声サンプルが必要になります。
  • オーディオの合計長さ: オーディオの合計時間は少なくとも 5 分。これにより、モデルが学習するための強固な基盤が提供されます。
  • 多様なコンテンツ:バランスのとれた音声品質で文章を読み上げることで、さまざまな音素をカバーします。たとえば、IEEE 音声品質測定に関する推奨プラクティスでは、包括的なデータセットに貢献できるような文のリストが提供されています。
  • 録音ツール: Audacity は、サンプルを録音するのに最適な無料のオープンソース ソフトウェアです。 WAVファイルの録音、編集、エクスポートが簡単にでき、オーディオ処理もできるので、

サウンドサンプルの前処理

オーディオ トラックからバックグラウンド ノイズを除去する必要があります。 Spleeterライブラリはこの機能を実現できる

 !pip install spleeter from spleeter.separator import Separator # Initialize the separator with the desired configuration. # Here, 'spleeter:2stems' means we want to separate the audio into two stems: vocals and accompaniment. separator = Separator('spleeter:2stems') # Use the separator on the audio file. # This function will separate the audio file into two files: one containing the vocals, and one containing the background music. separator.separate_to_file('audiofile.wav', './')

オーディオ トラックをセグメントに分割: AudioSlicer を使用すると、大きなオーディオ ファイルをモデルのトレーニングに適した 10 ~ 15 秒のセグメントに分割できます。

 from audioslicer import slice_audio # Path to the input audio file input_audio_path = 'long_audio_file.wav' # Path to the output directory where snippets will be saved output_directory = 'output/snippets/' # Length of each audio snippet in seconds snippet_length = 15 # Slice the audio file into snippets slice_audio(input_audio_path, output_directory, snippet_length)

現在のディレクトリにdataset_rawフォルダが作成され、録音はdataset_raw/{speaker_id}ディレクトリに保存されます(以下のフォルダ構造を参照)。

 . ├── dataset_raw │ └── {speaker_id} │ └── {wav_file}.wav

処理された音声はこの形式で保存できます

次に、svcを自動的に前処理するために実行する必要があります。

 !svc pre-resample !svc pre-config !svc pre-hubert

2. トレーニング構成

トレーニングの前に、config/44k/ ディレクトリに config.json ファイルを作成してモデルを構成する必要があります。この構成ファイルの主なパラメータには、log_interval、eval_interval、epochs、batch_size が含まれます。

サンプル数が 200 でバッチ サイズが 20 のデータセットの場合、各トレーニング エポックは 10 ステップに相当します。 100 エポックトレーニングすると、これは 1,000 ステップに相当します。

デフォルト設定では 10,000 ステップが提案される場合がありますが、ハードウェアとデータセットのサイズに応じて、これを調整する必要がある場合があります。実用的なアプローチとしては、20,000 ステップ (20000/10 はおよそ 2000 エポックに相当) を目指し、パフォーマンスを評価してトレーニングを延長するかどうかを決定することが考えられます。

3. トレーニングを始める

実際のモデルトレーニングを開始するには、svc train コマンドを使用します。

 !svc train

4. モデル推論

モデルのトレーニング、微調整、検証が完了したら、次のステップは推論を実行してソース オーディオをターゲット音声に変換することです。

 from IPython.display import Audio, display import os # Filenames audio_filename = 'vocals.wav' # vocals to applied trained model model_filename = 'model.pth' # model file created config_filename = 'config.json' # config file created # Construct the full local paths audio_file = f"\"{os.path.join('.', audio_filename)}\"" model_path = f"\"{os.path.join('.', model_filename)}\"" config_path = f"\"{os.path.join('.', config_filename)}\"" # Running the inference command !svc infer {audio_file} -m {model_path} -c {config_path}

結果を見ることができます

要約する

SO-VITS-SVC (拡散モデルと変分オートエンコーダに基づく歌声変換システム) は、リアルタイムの歌声変換を実現するための強力なツールです。 SO-VITS-SVC システムは、拡散モデル、変分オートエンコーダー、生成的敵対ネットワークなどの技術を組み合わせることで、歌のニュアンスを捉え、高品質の合成歌声を生成することができます。

SO-VITS-SVC システムは、音楽制作、音声合成、音声変換などのさまざまなシナリオに適用できる強力で柔軟な歌声変換ツールであり、ユーザーにパーソナライズされた歌声変換を実現する利便性と可能性を提供します。

so-vits-svc-fork アドレス:

https://github.com/voicepaw/so-vits-svc-fork

<<:  AIはデジタル変革の失敗から学ぶ必要がある

>>:  調査によると、AIはデータ文化に大きな影響を与えている

ブログ    
ブログ    
ブログ    

推薦する

マーク・アンドリーセン氏、AIが世界を救うと語る

ベンチャーキャピタルの億万長者マーク・アンドリーセン氏は、世界は現在人工知能に関して「ヒステリー」状...

製薬会社はAIと遺伝子配列に基づいて菌類のさらなる薬効を発見している

[[342573]]研究室の菌類1928 年、スコットランドの研究者アレクサンダー・フレミングが休暇...

...

...

人工知能に対して、人間がかけがえのない存在となるような利点は何でしょうか?

人工知能に関して言えば、かつて映画「マトリックス」で描かれたSFシーンが世界に衝撃を与え、トレンドを...

AIビッグモデルの核となる概念を一挙に解説する人気科学記事

写真トークン、ベクトル、埋め込み、アテンション、これらの AI モデル用語は、いつも馴染みがありそう...

...

シリコンバレーの天才たちの没落: 才能から始まり、利益に転落し、「賢さ」のせいで失敗した

若い才能、輝かしい経歴、上司からの評価、順調なキャリア、明るい未来...これらは、2016 年初頭に...

機械学習を学ぶ際に早い段階で知っておくべき3つのこと

私は長年、学界と産業界の両方で機械学習モデリングに取り組んできましたが、Scalable ML で「...

...

...

触覚を感知し、自己治癒するロボットが現実になりつつある

人間の皮膚は柔軟性があり、触り心地がよく、自己治癒力があるため、複製するのが難しいです。しかし、科学...

...

機械学習における皇帝の新しい服の発見

[[246000]]ビッグデータダイジェスト制作編曲:李佳、メロディー、雲周機械学習は、データ内のパ...

いくつかのシンプルな負荷分散アルゴリズム

負荷分散とは負荷分散(英語名は Load Balance)とは、複数のサーバーを対称的に構成したサー...