見出し画像

MVSEP MDX23モデルで音声を分離する手順(Windows)

Last update 08-27-2023
※表記揺れについての補足:「GPUメモリ」はWindowsの表記で、「占有GPUメモリ(GPUのVRAM)」+「共有GPUメモリ(PCのメインRAMに割当)」と解釈してください。「占有GPUメモリ」が優先的に使用され、溢れた分は「共有GPUメモリ」を使用します。




▼ 本記事について

概要

 音声(主に楽曲)をヴォーカル、ベース、ドラム、その他に分離するためのDemucsを、下記の記事にて紹介したところです。

 本記事では、さらに高性能なモデル(特にヴォーカルとカラオケの分離に優れる模様)を使って、Windows PC上で分離を行う手順を説明します。こちらはDemucsの標準モデル(Hybrid Demucs v4)と比べて、多くのVRAMと時間を消費します(「消費リソースについて」を参照)。

経緯

 Demucsのモデルについて調べていたところ、プレプリントの論文(Benchmarks and leaderboards for sound demixing tasks 
https://arxiv.org/abs/2305.07489)を発見しました。こちらに「MDX23 (ZFTurbo) contest model」の事が書いてあり、さらに調べたところGitHubで公開されていました。

動作環境(推定)

 本記事ではGPU動作を前提とします。VRAM 12GBのGeforce RTX 3060では動作しました。8GBでも動作すると思います。CUDA Toolkitも必要です。なお、CPU動作も可能ですが非常に遅いです。

公式リポジトリ

MVSEP-MDX23-music-separation-model
https://github.com/ZFTurbo/MVSEP-MDX23-music-separation-model



▼ インストール

 今回は、Windowsで動作するパッケージが別途用意されているため、こちらを使用します。リポジトリ(ソース)を利用したい場合は手順が異なります。

インストールの手順

 公式リポジトリ(上記リンク先)の右側にある「Windows standalone bundle」を見つけて、進んでください。次にアーカイブファイル(現在は「MVSep-MDX23_v1.0.1.zip」)をダウンロードして、適当なディレクトリ上に解凍してください。

Windows用のパッケージをダウンロードする



▼ 起動

バッチファイルの実行

 解凍した中に「run.bat」があるので、ダブルクリックで実行してください。初回は環境構築のため、しばらく時間がかかります。同梱のMinicondaを使用しているため、Pythonは不要です。

run.batを実行する

 準備ができるとGUIが表示されます。以降はこちらを操作します。

MVSEPのGUI



▼ 設定

 設定は保存されない(起動のたびに初期状態)ので、起動後すぐに確認が必要です。GUIの右下にある歯車をクリックしてください。

MVSEPの設定

VRAM 24GBの場合

 デフォルトの設定で問題ありません。「Use large GPU?」のチェックを外した場合よりも高速な動作が期待できます。

VRAM 12~16GBの場合

 必ず「Use large GPU?」のチェックを外してください。チェック無しで5分半かかった処理が、チェック有りでは1時間かかりました(12GBのGeforce RTX 3060使用時)。

VRAM 8GBの場合

 「Use large GPU?」のチェックを外した上で、「Chunk size」を半分の「500000」にしてください。おおむね8GB未満で実行されます。一時的に10GB程度まで上がります(共有GPUメモリも消費する)が、短い間だけなので影響は少ないと思います。たぶん…。

VRAM 8GB未満の場合

 後述の「VRAMが少ない環境の場合」を参照してください。

その他の設定

 基本的にはそのままで構いません。なお、「Chunk size」を小さくすればするほど、VRAMの消費量が下がります。これは音声を時分割してチャンク毎に処理する際の、1つあたりのサイズです(単位は不明)。



▼ 分離の実行

 操作は難しくありません。一応説明します。

ファイルの選択と出力先の設定

 入力ファイルは「Input audio files」をクリックして選択するか、その下にある領域にドラッグ&ドロップしてください。複数ファイルの指定ができます。なお、対応しているファイル形式は未確認です。wav以外もいけるかもしれません。

入力ファイルが設定された状態

 ファイルを選択するたびに追加されてしまい、消せない事に気づくかもしれません。ファイル名のパスが表示された領域をクリックしてCtrl+Aを押すか、マウスカーソルで文字列を選択すると反転します(上図)。この状態でファイルをドラッグ&ドロップすると、選択した部分に上書きされます(小技)。

 出力フォルダを変更したい場合は、「Output folder」をクリックして設定してください。

分離の実行

 設定が終わったら「Start separation」をクリックして実行してください。下部にプログレスバーが出現して、完了すると100%になります。

分離の実行中

 指定のディレクトリに分離された音声ファイルが保存されていますので、確認してください。ヴォーカル、ベース、ドラム、それからインストゥルメンタル(カラオケ)が2種類あります。2つの違いは、説明が無いのでよく分かりません。

入力したtest.wavと分離後のファイル

終了

 変換後、終了するまでGPUのメモリを一部キープしたままになっています。必要が無ければGUIを閉じて(「X」をクリックする)、終了してください。



▼ 音声を変換する

32bitから16bitにコンバート

 分離後の音声の量子化ビット数が32bitになっていることに気づきました。そのままでも構いませんが、念のため、日常で多く使用される16bit(44.1kHz、2chなのでCDと同じ音質)に変換する手順を説明します。

 SoundEngine Free(https://soundengine.jp/, https://forest.watch.impress.co.jp/library/software/soundengine/)を起動して、変換したいファイルをドラッグ&ドロップで読み込ませてください。

 「ビット」が「32」になっていますので、ドロップダウンメニューで「16」を選択してください。

16bitに変換する(1)

 フォーマット変換のウインドウが表示されますので、品質を「高い」または「非常に高い」に変更して「OK」をクリックしてください。品質を上げてもそれほど時間はかかりません。古くから存在するツールなので、このような設定項目があるものと思われます。

16bitに変換する(2)

 最後に、「保存(上書き)」または「別名保存」で保存してください。



▼ 消費リソースについて

 GeForce RTX 3060(VRAM 12GB)で変換したときの状況について紹介します。VRAMの消費量はかなりの増減があり、大量に使用しているタイミングでキャプチャしました。

 筆者の環境では2番目の設定(「Use large GPU?」のチェックを外す)を使用して、5分の曲を分離するのに5分半かかりました。参考まで、冒頭で紹介したDemucsではVRAMの消費が2~3GB程度、時間は10秒程度です。

デフォルトの設定(24GB向け)

 GPUメモリの消費量(占有と共有の合計)が22GBを超えました。「Use large GPU?」のチェックはVRAM 24GB以上に限定した方が良いと思われます。

デフォルトはVRAMをかなり消費する

largeのチェックを外す(12GB向け)

 デフォルトから「Use large GPU?」のチェックを外した状態です。12GBを超えることはありませんでした。

largeのチェックを外すと12GBにおさまった

Chunk sizeを半減する(8GB向け)

 デフォルトから「Use large GPU?」のチェックを外し、さらに「Chunk size」を半分の「500000」に設定した状態です。10GB近くまで上昇する(共有GPUメモリも使用する)こともありますが、その時間は短く、おおむね8GB未満でした。おそらくこの設定で大丈夫です。

Chunk sizeを減らすとVRAM消費量も減る

VRAMが少ない環境の場合

 必ず「Use large GPU?」のチェックを外してください。「Use single ONNX?」へのチェックもVRAMの消費を抑えますが、若干の品質低下があるとのことです。あとは、VRAMの消費量と実行時間を見ながら「Chunk size」を減らしていくしかありません。

 CPUを使用する設定「Use CPU instead of GPU?」は最後の砦です。Ryzen 5 3600では、10秒の音声を分離するのに5~6分かかりました。なお、メモリはそれほど消費しないようです。



▼ メモ

アンインストールの手順

 もし、必要なファイルがあれば移動してください。その後、実行を終了(ウインドウを閉じる)した状態で解凍したファイルやディレクトリを全て削除してください。ダウンロードしたパッケージやモデルも一緒に削除されます。



▼ その他

 私が書いた他の記事は、メニューよりたどってください。

 noteのアカウントはメインの@Mayu_Hiraizumiに紐付けていますが、記事に関することはサブアカウントの@riddi0908までお願いします。

この記事が気に入ったらサポートをしてみませんか?