1. はじめに
急にAIで遊びたくなったので、音声変換AIであるRVCを使ってデータの学習と利用を行いました。
この記事は、その備忘録として作業の一連のプロセスを書き記すものです。
2. 環境の構築
まずは、RVCを動かすための環境を構築する必要があります。AIを使うため、グラフィックボードを積んだそこそこのパソコンが必要になります。ただ、特別なものを要求されるわけではないので一般的なゲーミングPCとかなら問題ないと思います。
筆者は以下の構成で学習を行いました。メモリが足りないと思うケースが多かったので64GBや128GBで作業したかったのですが、メモリの価格が高すぎるので32GBで妥協しました。使用する音源ファイルが大きすぎるとメモリがいっぱいになって変換できなくなったりするので、音源を分割する必要があります。分割する方法は後で書きます。
| メインPCの環境 |
|---|
| Windows 11 Pro (64bit) |
| AMD Ryzen 9700X |
| NVIDIA GeForce RTX 3060 12GB |
| DDR5 Memory 16GB x 2 |
3. 必要なソフトウェアのインストール
一連のプロセスで使ったソフトウェアについて表にまとめます。詳しいインストール方法についてはたくさん記事があがっているのでそちらを参照してください。
| ソフトウェア | 用途 |
|---|---|
| Python | 当たり前ですが、RVCを動かすのに使います |
| ffmpeg | 音源の分割などに使います あると便利です |
| RVC WebUI | 音源の抽出、学習、変換がすべて行えます |
| Audacity | 学習する音源の加工などに使用します |
基本的にはRVC WebUIとAudacityを交互に使って音源を加工していくことになります。適宜インストールしてください。
4. AIに学習させて変換する
必要なソフトはすべて揃いましたので、学習に移ります。具体的には、音源の用意→学習→変換の流れで作業します。
a. 学習に使用する音源の用意
おそらく、ここが一番重要なパートになります。学習に使用するデータの質が悪いと、どんなに学習させてもよいモデルは作れません。
例えば、カラオケのエコーがかかったような音源を使って学習させると、モデル自体にもエコーがかかってしまい使い物になりません。
なので、どの音源を学習に使えばよいのか見極める必要があります。学習に適した音源は次の要素を持ちます。
- BGMや環境音がないこと
- 他の人の声がないこと
- ハキハキと喋っていること
- 声にエコーやリバーブがないこと
- 声のない無音部分がないこと
このことから、仮に配信者の声を学習させる場合は、低いトーンで喋っているライブ配信よりも、ハキハキと喋っている(いわゆる、「つべてん」)動画から学習したほうがよい学習モデルを生成できそうなことが推察できます。
また、ゲーム実況を音源として使うと、ゲームのボイスという不純物が混入してしまい、学習に不向きであることがわかります。
学習させる音源を決めたら、次は音源を学習に適したデータへ加工します。
RVCを起動し、「伴奏ボーカル分離&残響除去&エコー除去」タブに移ります。
フォルダパスまたはファイルをドロップし、「HP2-人声vocals+非人声instrumentals」を選びます。出力フォルダは「Vocal」「Instrumental」などと適当に決め、wavないしはflacで変換します。
変換が終わると、指定したフォルダに声が抽出された音源と声以外が抽出された音源がそれぞれ作成されているはずです。
得られたボイス音源をそのまま学習に使ってもいいですが、このままだと声のない無音部分があるので学習が非効率になります。Audacityを使って無音時間を切り詰めましょう。
Audacityを開いて音源をインポートし音源を選択、エフェクト>特殊>無音を切り詰めるを選びます。継続時間を0.2秒、切り詰めを0.2秒に設定して適用を押します。得られた音源データをエクスポートすれば完成です。
ここからは自分でもよくわかっていないのですが、どうやら学習する音源は短く切ったほうがいいらしいので、コマンドラインから音源を分割します。とりあえず20秒で区切っています。
音源があるフォルダからターミナルを開いて、以下のコマンドを打ちます。
ffmpeg -i "voicedata.wav" -f segment -segment_time 20 -c copy "voicedata_%03d.wav"
追記:RVCは自動で無音時間を切り取ってくれるそうなので切り詰める作業はいらないようです。
これで学習させるデータの加工が完成しました。
b. データの学習
RVCの「トレーニング」タブを選択します。
モデルの名前を決めて、サンプリングレートを決め(すべてのモデルについて統一しておくとよい)、バージョンはデフォルトのv2で設定します。
トレーニングフォルダを指定して、「データ処理」ボタンを押します。
処理が終わったら、「特徴抽出」ボタンを押します。
また処理が終わったら、トレーニング設定を入力します。総エポック数は、とりあえず100で様子を見ます。GPUごとのバッチサイズは、大きくすると学習時間を短縮することができますが、GPUのVRAMをより食うようになり、大きくしすぎるとエラーがでるためグラボにあった適切な数値を選ぶ必要があります。筆者は3060 12GBモデルで8から10で設定しています。
入力が終わったら「ワンクリックトレーニング」ボタンを押します。一連の作業で一番時間がかかるので、気長に待ちます。
出力情報に「全工程完了」という表示がでたら成功しています。.pthファイルと.indexファイルが生成されているはずです。
c. 音声の変換
RVCの「モデル推論」タブを選択します。
「音源リストとインデックスパスの更新」ボタンを押すと、先程生成した学習モデルが選べるようになっているはずです。ドロップダウンから使用する学習モデルを選びます。
「処理対象音声ファイルのパスを入力してください」に変換させたい音源を入力します。これに関しても、「伴奏ボーカル分離&残響除去&エコー除去」からボイスのみ抽出してからファイルを指定します。
「インデックスパスの自動検出」のドロップダウンに先程生成した.indexファイルが表示されるので、選択します。
右のバーを動かすことによって変換された音声の精度に差がつくわけですが、説明がめんどくさいので省略します。AIに聞けば答えてくれると思います。
出力音声が生成されたら、ダウンロードします。これで音声を変換することができました。Audacityを使ってボイスデータから分離した背景音データとダウンロードしたボイスデータを合わせれば完成です。
おわりに
RVC WebUIを使った音声変換についてまとめました。
本文では触れませんでしたが、AIの学習においては過学習という概念が存在し、エポック数を増やすとむしろ学習モデルの精度が落ちてしまうということが起こります。なので、TensorBoardにてモデルのステップごとのパラメータ推移を確認し、どのエポック数のモデルが一番優れているかを判別する必要があります。詳しい内容は時間があったらそれについて書くかもしれませんが、今は省略します。
なお、人の許可なく音声を学習させる行為はやめましょう。
それでは。


