オタクのためのRVCで楽曲CV改変実践
この記事は2023/04/15時点の記述です。結構すぐ変更が入ると思うので、動かない場合はご容赦ください。
RVC(Retrieval-based-Voice-Conversion)は、音源ファイルをトレーニングしてモデルを作製し、他の音源ファイルに対してそのモデルで推論することで、その音源ファイルのボーカルにモデルのボーカルの特徴を付与させるものです(適当な説明)。つまり、あるCVの楽曲をトレーニングさせまくることで、どんな曲でもそのCVに歌わせることができるというシロモノです。
今回は、「Retrieval-based-Voice-Conversion-WebUI」を用いて、RVCを用いたトレーニング・推論をやってみます。
対象読者
Pythonとか何も知らんけどとりあえずゲーミングPCは持ってるオタク
ただ、ある程度Linuxの知識が無いと厳しいと思います。
自分の環境
OS: Ubuntu Desktop 22.04
CPU: Core i9 11900K
GPU: GeForce RTX 3060
RAM: 32GB
ストレージ: Ubuntuのために128GB確保
必要な環境
OS: Ubuntu Desktop 22.04
CPU: IntelでもAMDでも良いが、そこそこ強いデスクトップCPU
GPU: GeForceに限る
RAM: 16GB以上
ストレージ: Ubuntuのために最低でも60GB
Windowsじゃないんかいと思ったかもしれませんが、自分が試す限りWindowsだとfaissあたりで詰まって動きませんでした。Apple Silicon搭載Macでもやろうとしましたが、そもそもCUDAが多分使えないので論外。
おそらくWindowsでも動くんでしょうけど、多分環境構築で戦う時間より、Windows+Ubuntuのデュアルブート環境を整える時間の方が短いです。デュアルブート環境の使用方法はこの記事では説明しません。また、WSLやOracle VM VirtualBoxといった仮想環境については今回検証していません。
Ubuntu DesktopではなくServerでも基本動作しますが、WebUIで操作する以上ブラウザに簡単にアクセスできた方が何かと便利です。
この記事の後半にあるWebUIの使い方はどの環境でも共通ですので、Windowsで動作したとしても参照可能です。
環境構築
グラフィックドライバとCUDA
ターミナル(端末)を開きます。当然updateやupgradeはしておきましょう。
sudo apt upgrade -y
sudo apt update -y
ミニマムにインストールした場合、誰もが使うツールも入っていないので、入れておきます。以下はこの記事で使用されるパッケージです。
sudo apt install -y ffmpeg git vim curl
ubuntuにCUDA、nvidiaドライバをインストールするメモ を参照に、nvidia-driverとcudaをインストールします。
ミニマムにインストールした場合、そもそもプロプライエタリなグラフィックドライバーは入っていないと思うので、「現状入っているCUDA,nvidia-driverの確認」で何も表示されません。この場合は「現状入っているCUDA nvidiaドライバの削除」をする必要はありません。
nvidia-driverをインストールした後のsudo reboot(再起動)を面倒くさがってスキップすると普通に動きませんでした(ターミナル再起動でもダメ)。
あと、CUDAインストール後の「~/.bashrcの末尾に以下を追加」は、(ターミナルの知識があれば理解いただけると思いますが)ターミナルの再起動が必要です。あと、多分bashrcに追加した後も再起動しないとダメだった気がします。
Pythonとpip
Pythonのバージョンを確認しておきましょう。
python3 -V
おそらくUbuntu 22.04にプリインストールされているPythonは3.10だと思うのでOKですが、何かの手違いで3.11以上のバージョンが出てしまった場合、執筆時点のこのリポジトリの依存関係を解決することはできません。ダウングレードしてください。pyenvなどを使用するか、aptでバージョンを指定してインストールしてください。
pipの確認をします。
pip3
入っていない気がする(「コマンドが見つかりません」等のエラーが出る)ので、
sudo apt install -y python3-pip
をして入れておきましょう。
また、この段階ではpythonやpipがそれぞれpython3、pip3に対応していないので、エイリアスを作っておきます。
vim ~/.bash_aliases
別にemacsでも何でも好きなエディタを使ってください。
(vimの場合、"A"キーを押して挿入モードにした上で)
alias python='python3'
alias pip='pip3'
(vimの場合Escを押して挿入モードから出た上で、"ZZ"で保存して終了した上で)
ターミナルを再起動して、`python -V`の結果が`python3 -V`の結果と同じになるかを確認してください。
RVCと依存関係
ホームディレクトリ(`cd`を実行すると飛びます)で、該当リポジトリをcloneします。
git clone https://github.com/liujing04/Retrieval-based-Voice-Conversion-WebUI.git rvc
cd rvc
あとは概ねRVCのREADMEの通りですが、若干違うので書いておきます。
まずはtorchをインストールします。CUDAのバージョンに依存するとか何とか色々ありますが、なぜか以下でいけてしまいました。
現時点では以下のコマンドではCUDA 11.7に対応するtorchが入るようなのですが、該当記事の通りにcudaを入れると、現時点でCUDA 12.1が入りました。(`nvcc -V`で確認できます)
pip install torch torchvision torchaudio
GitHubのREADMEにはWindowsとRTX 30xxの場合はCUDAに対応するPyTorchを…とか書いてあるので、Ubuntuだからそのまま動くんでしょう。やはりLinuxでやるとこの周りが楽で本当に体験が良い。
ここで、正しくCUDAがインストールされているかを確認します。
python
import torch
torch.cuda.is_available()
と順に実行していき、最後に「True」と出たらOKです。
Ctrl+Zで元のターミナルに戻ることができます。
「False」だった場合、再起動などをした上でターミナルを再度開いて`cd rvc`し、同じ操作(`python`以下)を行ってみてください。それでも「False」の場合、ドライバインストールまたはtorchインストールの時点で何かが間違っています。
そのあと、Poetryを使用するように書いてありますが、面倒なのでpipで入れてしまいます。
pip install -r requirements.txt
事前にトレーニングされた(pretrained)データを持ってきます。Hugging Face spaceにある
hubert_base.pt
./pretrained(pretrainedフォルダの中にあるすべてのファイル)
./uvr5_weights(uvr5_weightsフォルダの中にあるすべてのファイル)
が必要なようです。(ffmpegはすでにインストールしています)
Firefoxなどのブラウザからダウンロードすることもできますが、知識があればシェルスクリプトでwgetなんかをいっぱい書いて一気にダウンロードしても良いでしょう。
実行
GitHubのREADMEには
python infer-web.py
と書いてありますが、/bin/sh環境では.bashrcのエイリアスはそのままでは動作しないため、`python`コマンドがNot Foundになって処理ができません。
ドキュメントには書いてありませんが、pycmdオプションで実行すべきPythonのパスを指定することができるので、
python infer-web.py --pycmd python3
または、`which python3`をして得られるパスを指定して、
python infer-web.py --pycmd /usr/bin/python3
と実行すれば、数秒から1分程度でブラウザが勝手に立ち上がります。
操作
トレーニング・推論(トレーニングされたモデルの特徴を既存の音源のボーカルに適用する)に使用する音源はすべてボーカルが分離している必要があります。
伴奏とボーカルの分離
一般に、demucsなど他のソリューションを用いたり、Audacityなどでオフボーカルの逆位相をぶつけてボーカルを分離したデータ、また(権利関係がクリアできている前提で)市井に転がっている謎の技術を用いた高精度なボーカルデータを使用してトレーニングを行います。
ただ、用意するのが難しい場合はRVC自体のボーカル分離機能を利用することができます。自分が試した限り、demucsなど他のモデルと大差ないレベルで分離することができました。
伴奏とボーカルの分離タブを開きます。「処理するオーディオファイルのフォルダパスを入力してください」では、Linuxの場合(ほとんどの場合)`/home`から始まる絶対パスのwavファイルを指定してください。wav以外だとどうなるのか知りません。
モデルはよくわからないのですが、「HP5-主旋律人声vocals+其他instrumentals」にしました。
これで「変換」して、rvc内のoptフォルダに該当wavファイルが生成されていればOKです。
音源の準備
10秒程度の細切れの音源が必要です。Pythonでボーカルの無音区間を区切りに細切れにした方が高精度にトレーニングできるように思いますが(audio-slicer)、とりあえずffmpegを使って数秒ごとに区切ってしまいましょう。
input.wavに対して、10秒ごとに区切った音源`output_01.wav`, `output_02.wav`……にするためには以下のように実行します。参考
ffmpeg -i input.wav -map 0 -c copy -f segment -segment_time 10 -reset_timestamps 1 output_%03d.wav
トレーニング
まず、画面中央のステップ2bの「カード情報」に自分が使っているビデオカードが表示されているかを確認してください。
終わればステップ1から順に埋めていきます。ステップ1は「実験名を入力してください」だけ好きな名前にすればOKです。
ステップ2aに移ります。「トレーニング用フォルダのパスを入力してください」で、細切れにした音源のみが入ったファイルを`/home`から絶対パスで入力してください。
「データ処理」を押します。ブラウザでも履歴が確認できますが、ターミナルに表示されるログの方が正確です。終了は、ターミナルで「Success」とか「Complete」とかそれらしい表示が出た時です。ブラウザでもログが表示されるテキストボックスの色が変わるようになっています。
「データ処理」が終了したら、ステップ2bの設定は特にいじるところがないのでそのまま「特徴抽出」を押します。
同じように終了(all-feature-doneと表示)したらステップ3に移ります。ハードウェア性能的に問題なければ「ハードディスク容量を節約するため、最新のckptファイルのみを保存するかどうか」を"是"(Yes)にしてそのまま「モデルのトレーニング」をクリックします。設定を変えなければ数分から10分程度で終わると思います。正しくボーカル分離されている場合、初期設定でもほんのり特徴を感じる程度には特徴を抽出することができます。特に「総トレーニング回数」を上げることで、(所要時間はこの値にほぼ比例します)モデルの精度を高めることができます。終了後は、「特徴インデックスのトレーニング」を行います。
ワンクリックトレーニングは、この章で書いたすべての操作をワンクリックで行うものです。2度目以降はこちらを使うと良いでしょう。
モデル推論
トレーニングが完了したら、このモデルを利用して推論を行います。
音源推論では「音源リストを更新」して、先ほどのトレーニング時に設定した"実験名"を入力してください。
「処理対象音声ファイルのパスを入力してください(デフォルトは正しいフォーマットの例です)」には、推論に用いたい音源のwavファイルを同じように絶対パスで記載します。この音源もボーカルのみのものである必要があります。
「特徴量検索データベースのファイルパス」はrvcフォルダ内のlogs/(実験名)内にあるadded_から始まって拡張子がindexのファイルの絶対パスを、「特徴量ファイルのパス」は同じところにある「total_fea.npy」への絶対パスを指定します。
あとは「変換」ボタンを押すと30秒程度で推論された音源が表示されます。
とりあえずこれで音源は作れるはずです。パラメータやトレーニング数などのオプションはもう少し研究が必要です。
この記事が気に入ったらサポートをしてみませんか?