4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Diff-SVCをWindows10環境(ローカル)で実行

Posted at

Diff-SVCをWindows10環境で実行させるための作業メモ

そもそもDiff-SVCとは

簡単に言うと、機械学習を使って「ある歌声」を「別の声質」に変換させるボイスチェンジャー。
自分の声を学習させ、自分の好きな曲を歌わせてみた、ということもできるかも。

開発者については下記URLを参照↓

作業環境

OS等 バージョン等
Windows Windows 10 Pro 64bit
外付けGPU ケース:Razer Core X Chroma
GPU:RTX 3060Ti 8GB
Python Python 3.8.2
Pycharm PyCharm 2020.1 (Community Edition)
CUDA CUDA Toolkit 11.3
Torch Torch1.12.1

1. 事前準備

1. CUDAのインストール
CUDA Toolkit 11.3を下記URLからダウンロードし、実行する。

指定内容は下図の通り
image.png

2. Pycharmで新規プロジェクトを作成し、Diff-SVCを配置
Pycharmで新規プロジェクト作成後、Terminal上で下記コマンドを実行

git clone https://github.com/prophesier/diff-svc.git

3. Torchのインストール
下記URLから必要なコマンドを取得し、実行する

実行コマンド:

pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113

4. 必要なパッケージをインストール
下記コマンドを実行
(注意:ここでエラー発生)

pip install -r requirements.txt

エラー内容:

note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for webrtcvad

ビルドがうまくいかなかったみたい。

解決方法:
エラーメッセージの中にURLが記載されていたので、そのURL先からインストーラーをダウンロードして実行

インストール時のオプションに指定したものは下図の通り
Visual Studio Installer 2023_04_30 14_54_13.png

インストール完了後、コマンドを再実行
※コマンドを再実行する前に、環境変数を追加したかもしれない

5. フォルダ作成と学習モデルの配置
Diff-SVCを配置した階層と同じ階層に下記フォルダを作成。
(このあたりは、「./training/config.yaml」を見て、必要そうなフォルダを作成した。)
・checkpoints
・checkpoints/0102_xiaoma_pe
・checkpoints/0109_hifigan_bigpopcs_hop128
・checkpoints/hubert
・data
・data/raw

下記URLから必要なモデルをダウンロード。
(とりあえず動かすために最低限必要そうなものだけ)

<ダウンロードしたモデル>
・0102_xiaoma_pe.zip
・0109_hifigan_bigpopcs_hop128.zip

<ダウンロードしたモデル>
・nsf_hifigan_20221211.zip
※解凍後の資材名を「hubert_soft.pt」にリネーム

<フォルダ階層>
赤字が新規に追加したフォルダ 青字が新規に追加したモデル
新規プロジェクト
checkpoints
┃ ┣ 0102_xiaoma_pe
┃ ┃ ┣ model_ckpt_steps_60000.ckpt
┃ ┃ ┗ config.yaml ←使用しているか不明
┃ ┣ 0109_hifigan_bigpopcs_hop128
┃ ┃ ┣ model_ckpt_steps_280000.ckpt
┃ ┃ ┗ config.yaml ←使用しているか不明
┃ ┗ hubert
┃ ┃ ┗ hubert_soft.pt
data
┃ ┣ raw
┃ ┗ (任意。「training/config.yaml」の「raw_data_dir」と一致していれば良し。)
┃   ※ここに前処理で学習させる音声データを格納する
┣ preprocessing、trainingなど、Diff-SVCを配置したときダウンロードした資材
 (省略)
┣ requirements.txt
┗ infer.py

2. 前処理

学習させたい音声データを「data/raw/(任意)」フォルダに格納し、プログラムを実行する。
※実行するコマンドはGitのページを参考に、Pycharmで実行できるようにConfigurationsを作成している。
実行するコマンド:

export PYTHONPATH=.
CUDA_VISIBLE_DEVICES=0 python preprocessing/binarize.py --config training/config.yaml

実行時の構成は下記の通り

項目名 設定値 コメント
Name binarize
Script path …\preprocessing\binarize.py 実行したいPythonファイルの絶対パス
Parameters --config training/config.yaml 実行するコマンドのオプション指定の箇所を設定
Enviroment variables PYTHONUNBUFFERED=1;CUDA_VISIBLE_DEVICES=0 実行するコマンドの環境変数設定を追加
Working directory 新規プロジェクトのパス

実行時に「RuntimeError: CUDA out of memory.」が発生したので、バッチサイズを少なくして再実行。
※他にもいじったかもしれないが、メモがなかった
<修正箇所>
資材名:preprocessing/data_gen_utils.py
対象行:203
修正内容:1024→512

うまく実行できていれば、「training/config.yaml」の「binary_data_dir」に設定したフォルダパスにファイルが作成されているはず。

3. モデル学習

※実行するコマンドはGitのページを参考に、Pycharmで実行できるようにConfigurationsを作成している。
実行するコマンド:

CUDA_VISIBLE_DEVICES=0 python run.py --config training/config.yaml --exp_name [your project name] --reset

実行時の構成は下記の通り

項目名 設定値 コメント
Name run
Script path run.py 実行したいPythonファイルの絶対パス
Parameters --config training/config.yaml --exp_name (プロジェクト名) --reset 実行するコマンドのオプション指定の箇所を設定
Enviroment variables PYTHONUNBUFFERED=1;CUDA_VISIBLE_DEVICES=0;PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:128 実行するコマンドの環境変数設定を追加
PYTORCH_CUDA_ALLOC_CONFは「RuntimeError: CUDA out of memory.」が発生した時、試行錯誤している中で追加したかもしれない
Working directory 新規プロジェクトのパス

実行時に「RuntimeError: CUDA out of memory.」が発生。
開発者のGitページによると、下記設定値から動的に算出しているらしい。
max_frames: 42000
max_input_tokens: 6000
max_sentences: 88
max_tokens: 128000

上の「max_sentences:」を「5」に修正して実行。
※この値にしたらとりあえず「RuntimeError」は発生せずに動き続けた。

「RuntimeError」とは異なるエラーが発生
エラー内容:
OSError: [WinError 1455] ページング ファイルが小さすぎるため、この操作を完了できません。

解決方法:
下記ページを参考にした

エラーを解決し、再実行。
そして完了するまで待つ・・・・・・

・・・・・・

・・・・・・終わらない

ので、「checkpoint/(プロジェクト名)」に学習モデルが出力されているのが確認出来たら、
この処理を手動で止めて、変換処理を行ってみる。

4. 変換処理

「infer.py」の中身を少し書き換える。
修正箇所:

行数 修正前 修正後
76 project_name = "yilanqiu" project_name = "(プロジェクト名)"
77 model_ckpt_steps_246000.ckpt (「3. モデル学習」で作成されているモデルのファイル名)
81 file_names = ["青花瓷.wav"] file_names = ["変換したい音声データ"]

これまでの手順と同様に、実行の構成を作成してプログラムを実行

項目名 設定値 コメント
Name infer
Script path infer.py 実行したいPythonファイルの絶対パス
Parameters なし
Enviroment variables CUDA_VISIBLE_DEVICES=0
Working directory 新規プロジェクトのパス

うまく実行できていたら、「result」フォルダ配下に音声変換後のファイルが作成されている。

5. 感想

変換後の音声データについては、「まあ、変わってるね」くらいの印象。学習させるデータ、学習回数、configの設定値等、色々変えればもっと劇的に変わるかもしれない。
今回は、この「Diff-SVC」をWindows10(ローカル)環境で動かせたので良しとしよう。
あとは、この開発者の方が出している論文を読んだり、プログラムの中を追ったりして理解を深めていこう。

4
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?