MMVCというAIを使ったリアルタイムボイスチェンジャーなるものを見つけた。自分の声を収録して、それを別人の声に変換するとは、映画「ミッションインポッシブル3」で見たようなシーン(厳密には少し違うが)が実際に実行可能になるなんて、とても面白そうだったので試してみたくなった。
環境
公式ではgoogle colaboratoryを使っていて、そのまま何も変更することなく動かすことが出来る。しかし、自前のPCで実行したくなった。Windows WSL2環境で実行するのは結構面倒なのでおすすめはしません。
Windows 11
WLS2
Ubuntu 20.04
Python 3.8.10
cuda-toolkit-11-6 is already the newest version (11.6.2-1).
libnccl-dev is already the newest version (2.12.10-1+cuda11.6).
libcudnn8 is already the newest version (8.4.0.27-1+cuda11.6).
VSCODE 1.66.2
MMVCのライセンス情報
MMVCv1.2.0.2
Copyright (c) 2021 Isle.Tennos
Released under the MIT license
https://opensource.org/licenses/mit-license.php
git:https://github.com/isletennos/MMVC_Trainer
community(discord):https://discord.gg/PgspuDSTEc
MMVC_Trainerのインストール
公式からレポジトリをダウンロードして、VSCODEの作業フォルダに解凍する。
MMVC_Trainerの実行
自身の音声ファイルの準備
公式のページに書かれている通り、自分の音声を収録していく。(100文読み上げるのは結構大変だった)
インストールと環境設定
以下の通りインストールする。CUDAのインストールについてはこちらを参照のこと。
sudo apt install cmake
sudo apt install espeak
pip install --upgrade torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113
pip install pyopenjtalk
現時点での最新版をインストールしている。
cmake is already the newest version (3.16.3-1ubuntu1).
espeak is already the newest version (1.48.04+dfsg-8build1).
torch in ./.local/lib/python3.8/site-packages (1.11.0+cu113)
torchvision in ./.local/lib/python3.8/site-packages (0.12.0+cu113)
torchaudio in ./.local/lib/python3.8/site-packages (0.11.0+cu113)
pyopenjtalk in ./.local/lib/python3.8/site-packages (0.2.0)
Create_Configfile.ipynbの実行
Create_Configfile.ipynbを実行して、環境ファイルを作成する。Googleドライブ、インストール部分の実行は不要。フォルダの指定はローカルの環境に合わせる。
Train_MMVC.ipynbの実行
モデルをトレーニングしていく。自前の環境には以下のものがインストールされている。本来は公式から指定されているバージョンをインストールするべき。下記のように違うバージョンを使う場合は自己責任で。
Cython in ./.local/lib/python3.8/site-packages (0.29.28)
librosa in ./.local/lib/python3.8/site-packages (0.9.1)
matplotlib in ./.local/lib/python3.8/site-packages (3.5.2)
numpy in ./.local/lib/python3.8/site-packages (1.21.6)
phonemizer in ./.local/lib/python3.8/site-packages (3.1.1)
scipy in ./.local/lib/python3.8/site-packages (1.8.0)
tensorboard in ./.local/lib/python3.8/site-packages (2.8.0)
Unidecode in ./.local/lib/python3.8/site-packages (1.3.4)
retry in ./.local/lib/python3.8/site-packages (0.9.2)
tqdm in ./.local/lib/python3.8/site-packages (4.64.0)
./monotonic_align/setup.pyを下記の通り実行して、core.cpython-38-x86_64-linux-gnu.soをビルドする。
python3 setup.py build_ext --inplace
train_ms.pyを以下の通り、修正する。
import warnings
warnings.simplefilter('ignore', FutureWarning)
warnings.simplefilter('ignore', UserWarning)
train_ms.py:50行目
os.environ['MASTER_PORT'] = '8000'
train_config_zundamon.jsonを以下の通り修正する。自前のPCではOut of Memoryになってしまったため、batch_sizeを5に変更した。
"batch_size": 5,
後はTrain_MMVC.ipynbファイルの指示通り実行していく。Googleドライブ、インストール部分の実行は不要。フォルダの指定はローカルの環境に合わせる。実行に成功すれば下記のようにモデルのトレーニングが進んでいく。
Epoch 436: 90%|████████████████████████████▋ | 70/78 [00:51<00:05, 1.49it/s]
すべて実行し終わるにはかなり時間がかかると思うので、自分は適当なところで中断して、トレーニング途中のモデルを使用してVC処理を動かすことにした。
学習したモデルの検証
MMVC_Interface.ipynbファイルの指示通り実行して自分の音声が変換されることを確認する。学習が足りないとうまく変換されないかもしれないが、自分が実行したことろではそれなりに満足のいく結果だったので、次のリアルタイム変換に進むことにした。
※VSCODEだとIPython.display.Audioは使えないので、wavファイルをして書き出すように変更しておく。
ipd.display(ipd.Audio(audio1, rate=hps.data.sampling_rate))
write('converted.wav', hps.data.sampling_rate, audio1)
MMVC_Clientのインストール
公式からレポジトリをダウンロードして、VSCODEの作業フォルダに解凍する。
※2022/05/11追記 WSL2環境からマイクを使用することがまだ出来なくて未検証。出来るようになり次第追記予定。
※2023/04/01追記 MMVC_client v0.3.1.0が出て、簡単にクライアントを使用できるようになった。こちらでも解説している。
pulseaudioのインストールと実行
Windows側
default config filesフォルダにあるdefault.paファイルをコピーして、以下行を変更する。
load-module module-waveout sink_name=output source_name=input record=0
load-module module-native-protocol-tcp auth-ip-acl=127.0.01;10.0.0.0/8;172.16.0.0/12;192.168.0.0/16
E:\pulse\pulseaudio.exe -F E:\pulse\default.pa --exit-idle-time=600
初回起動時、外部からのアクセスを許可するか問われるので、「パブリックネットワーク」にチェックを入れてアクセスを許可する。
Ubuntu側
sudo apt install portaudio19-dev
pip install pyaudio
pip install noisereduce
echo 'export PULSE_SERVER=tcp:$(grep nameserver /etc/resolv.conf | awk '\''{print $2}'\'')' >> ~/.profile
source ~/.profile
output_audio_device_list.pyの実行
rec_environmental_noise.pyの実行
mmvc_client_GPU.pyの実行
- ext_modules = cythonize("d:/code/monotonic_align/core.pyx"),
+ ext_modules = cythonize("core.pyx"),
同じようにwsl2で実行してみて、monotonic_alignでエラーが出て悩んでいました。
おかげさまでtrainが動き始めました。
感謝です。