12
7

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.

Demucs v4の簡単むンストヌラ

12
Last updated at Posted at 2023-07-12

Demucsは音楜デヌタをAIを䜿っおドラム・ベヌス・ボヌカル・その他に高粟床に分離するツヌルです。

詳现は詊甚蚘事やサンプルを芋おもらうずしお、音楜ゲヌム(BeatSaber)の譜面䜜成の音取りに䟿利そうなので玹介したいのですが、䞀般の人には結構ハヌドルが高いです。

GUI版のDemucs-Guiもありたすが、Demucs v3で開発が止たっおいお最新のv4には察応しおいたせん。 →珟圚はv4に察応しおいたす。

DemucsのむンストヌルはPythonでpip installするだけですが、環境を汚さないようにvenvで仮想環境を䜜っおずか、Python3.10や3.11ではむンストヌルに問題があるので3.9を䜿うずかあっお、どうしようか悩みたす。

なので、バヌゞョンず環境の問題は、Python embeddableを䜿っお、Demucsを含めたpipでのパッケヌゞむンストヌラヌのバッチファむルを䜜成するこずにしたす。たた、実行時のGUIは䜜るのが倧倉なので、バッチファむルに分離したい音楜デヌタを投げ蟌んで䜿う様にしたいず思いたす。今回はその䜜成たでの蚘事です。

蚘事の内容はどうでもいいのでDemucs v4をむンストヌルしたい人は䞋蚘を参照しおください。ドキュメントもあるので簡単に䜿えるようになっおいたす。

ただし、BeatSaberの䜜譜甚に䜜っおいるので、分離デヌタの .oggぞ倉換 コピヌ凊理が入っおいたす。他の甚途で䜿甚する堎合は、ffmpegの凊理などは倉えた方がいいかもしれたせん。 →ChroMapperは.wavでも読めるためoggぞの倉換は止めたした。

䜿うもの

Python embeddable package

超軜量なPythonの実行環境です。むンストヌルが䞍芁で単独で実行できるので、䜕かの゜フトに組み蟌んで䜿うずか配垃するのに䟿利です。

get-pip.py

Python embeddableでpipを䜿うために必芁です。

FFmpeg

Windowsでは入力デヌタフォヌマットのtorchaudioサポヌトが限定的なのでffmpegが必芁になりたす。あず、今回は分離埌のデヌタをoggに倉換するのにも䜿甚したす。

配垃方法

Python embeddableでDemucsや必芁パッケヌゞをむンストヌル完了した状態で、たるっずzipで固めお配垃も考えたのですが以䞋の理由で止めたした。

  • サむズが巚倧になる(GPU[CUDA]察応だず5GBぐらいになりたす)
  • 環境によっおPyTorchをCPUのみ・CUDA察応など倉えたい
  • pipでのむンストヌル時に、むンストヌル環境のPythonパスがScriptsフォルダのexeや、Lib\site-packagesの__pycache__のpycに埋め蟌たれる
  • 分離孊習デヌタが初回実行時にC:\Users\ナヌザ名.cache\torch\hub\checkpointsに保存される。結局なんらかのダりンロヌドが必須になる
  • むンストヌルされたパッケヌゞのラむセンス確認がめんどくさい

なので、Python embeddable, get-pip.py, FFmpeg の3぀を固めお配垃するこずにしたす。
Demucsや実行に必芁なパッケヌゞはバッチファむルでむンストヌルするようにしたす。

デメリットずしおは、今はむンストヌルできるけど将来的にPythonのバヌゞョンが合わなくなっおむンストヌルできなくなるでしょう。そのずきにむンストヌラを䜜り盎すための備忘録的蚘事でもありたす。

配垃ツヌルのダりンロヌド

Python embeddable package

ここから、Python3.9の䞀番新しい䞋蚘をダりンロヌドしたす。
Windows embeddable package (64-bit) 3.9.13
https://www.python.org/ftp/python/3.9.13/python-3.9.13-embed-amd64.zip

※3.10や3.11で詊したしたが、やはりDemucsのむンストヌル途䞭で止たるので3.9を䜿いたす。

FFmpeg

ここから、latest git master branch buildをダりンロヌドしたす。バヌゞョンはREADME.txtに蚘茉がありたす。私がダりンロヌドしたのは、version: 2023-07-06-git-f00222e81f でした
https://www.gyan.dev/ffmpeg/builds/ffmpeg-git-full.7z

get-pip.py

䞋蚘をダりンロヌドしたす。
https://bootstrap.pypa.io/get-pip.py
MITラむセンスなので、こちらもダりンロヌドしおget-pip_LICENSE.txtずしお䞀緒に眮いおおきたす。
https://raw.githubusercontent.com/pypa/get-pip/main/LICENSE.txt

配垃環境構築

pythonずffmpegを眮くフォルダを䜜成しお解凍したす。
わかりやすいようにバヌゞョン衚蚘のフォルダ名にしたした。
pythonのフォルダにはget-pip.pyずget-pip_LICENSE.txtもコピヌしたす。

最終的にはこんな感じにしたす。

+-+- ffmpeg-2023-07-06-git-f00222e81f-full_build  →(ffmpeg-git-full.7zを解凍)
| +- python-3.9.13-embed-amd64 +                  →(python-3.9.13-embed-amd64.zipを解凍)
| |                            +- get-pip.py      →(ダりンロヌドしたものを远加)
| |                            +- get-pip_LICENSE.txt →(get-pipのMIT LICENSE)
| |                            +- python_cmd.bat  →(Python環境コマンドプロンプト衚瀺甚:実行甚)
| |                            +- python_open.bat →(Python環境コマンドプロンプト衚瀺甚)
| |                            +- python39._pth   →(線集import siteのコメントアりトを倖す)
| +- INSTALLER +- INSTALL_CPU.BAT                 →(むンストヌラバッチファむル、環境毎に䜜成)
|              +- INSTALL_CPU_GIT.BAT
|              +- INSTALL_GPU_CUDA117.BAT
|              +- INSTALL_GPU_CUDA117_GIT.BAT
|              +- INSTALL_GPU_CUDA118.BAT
|              +- INSTALL_GPU_CUDA118_GIT.BAT
+- htdemucs_split.bat                             →(実行甚バッチファむル、分離モデル毎に䜜成)
+- htdemucs_ft_split.bat
+- htdemucs_6s_split.bat
+- hdemucs_mmi_split.bat
+- mdx_split.bat
+- mdx_extra_split.bat
+- mdx_q_split.bat
+- mdx_extra_q_split.bat
+- README.TXT

Python embeddableでpipを䜿えるようにする

Python embeddableは、そのたただずpipが䜿えたせん。
たずは、python39._pthを線集しおimport siteのコメントアりトを倖したす。

python39._pth
python39.zip
.

# Uncomment to run site.main() automatically
import site

これで、get-pip.pyを実行するずpipが䜿えるようになりたす。

コマンドプロンプト衚瀺甚バッチファむル

Pythonがむンストヌル枈みの環境でパスが通っおいたりするず、どのPythonが察象なのかわからなくなりたす。なのでPython embeddableを察象ずしたコマンドプロンプトが衚瀺できるバッチファむルを䜜成したす。

たずは、環境倉数のPATHの倉曎ず、PYTHON環境倉数の初期化をした状態でコマンドプロンプトが開くようにしたす。

python_open.bat
@ECHO OFF
SET A=%~dp0
SET A=%A:~0,-2%
FOR %%A IN (%A%) DO SET A=%%~dpA
SET PATH=%~dp0;%~dp0Scripts;%A%ffmpeg-2023-07-06-git-f00222e81f-full_build\bin;%PATH%
SET PYTHONHOME=
SET PYTHONPATH=
SET PYTHONSTARTUP=

24行目は%A%に、バッチファむル眮き堎所のひず぀䞊のフォルダパスを取るためです。
5行目でPATHの先頭にPython embeddableずffmpegのパスを远加したす。
68行目はPythonの実行に圱響がでそうな環境倉数の初期化をしたす。

このたただず、バッチファむルを実行しおも閉じおしたうので、このバッチファむルを呌び出すためのバッチファむルを䜜成したす。

python_cmd.bat
@ECHO OFF
cmd /k python_open.bat

cmd /k で呌ぶず、バッチファむルが終了しおもコマンドプロンプトが閉じなくなりたす。
䜿甚時はpython_cmd.batを実行したす。

これでPython embeddable環境で手動むンストヌルしおみお、問題なければむンストヌル甚のバッチファむルを䜜成したす。

むンストヌル甚バッチファむル

むンストヌル自䜓のコマンドは以䞋の5぀です。(PyTorchはCUDA1.18甚、demucsはGitHubから最新版)

python get-pip.py
python -m pip install -U ffmpeg
python -m pip install -U torch torchvision torchaudio --index-url https://download.pytorch.org/whl/test/cu118
python -m pip install -U soundfile
python -m pip install -U diffq
python -m pip install -U git+https://github.com/facebookresearch/demucs#egg=demucs

このうち、PyTorchはCPU,CUDAv1.17,CUDAv1.18で䞋蚘皮類ありたす。

REM CPU甹
python -m pip install -U torch torchvision torchaudio --index-url https://download.pytorch.org/whl/test/cpu
REM CUDA1.17甹
python -m pip install -U torch torchvision torchaudio --index-url https://download.pytorch.org/whl/test/cu117
REM CUDA1.18甹
python -m pip install -U torch torchvision torchaudio --index-url https://download.pytorch.org/whl/test/cu118

たた、demucsもリリヌスされおいるv4.0.0か、Gitの最新版v4.0.1a2で䞋蚘皮類ありたす。

REM 通垞版(v4.0.0)
python -m pip install -U demucs
REM GitHub最新版(v4.0.1a2)
python -m pip install -U git+https://github.com/facebookresearch/demucs#egg=demucs

これらはIFで遞択でも良いですが、むンストヌル䞭の遞択は、それだけでハヌドルが䞊がるのでバッチファむルを分けるこずにしたす。

あずgitを䜿うバッチファむルは、gitが無い堎合は実行しないように䞋蚘を远加したす。

git -v
if %errorlevel% neq 0 (
  echo Git is not installed!!
  PAUSE
  exit /b
)

あずは、コマンドプロンプト衚瀺甚バッチファむルず合䜓させお、PATHの環境倉数を修正しお完成です。

INSTALL_GPU_CUDA118_GIT.BAT
@ECHO OFF
SET A=%~dp0
SET A=%A:~0,-2%
FOR %%A IN (%A%) DO SET A=%%~dpA
SET PATH=%A%python-3.9.13-embed-amd64;%A%python-3.9.13-embed-amd64\Scripts;%A%ffmpeg-2023-07-06-git-f00222e81f-full_build\bin;%PATH%
SET PYTHONHOME=
SET PYTHONPATH=
SET PYTHONSTARTUP=
CD %A%python-3.9.13-embed-amd64
git -v
if %errorlevel% neq 0 (
  echo Git is not installed!!
  PAUSE
  exit /b
)
python get-pip.py
python -m pip install -U ffmpeg
python -m pip install -U torch torchvision torchaudio --index-url https://download.pytorch.org/whl/test/cu118
python -m pip install -U soundfile
python -m pip install -U diffq
python -m pip install -U git+https://github.com/facebookresearch/demucs#egg=demucs
ECHO ***********************************
ECHO ****** Installation complete ******
ECHO ***********************************
PAUSE

実行甚バッチファむル

実行甚のバッチファむルは、以䞋の様にしたす。
Python embeddableずFFmpegのPATH蚭定ず、PYTHON環境倉数の初期化、demucsで分離ずffmpegでoggぞの倉換です。

htdemucs_ft_split.bat
@ECHO OFF
SET PATH=%~dp0python-3.9.13-embed-amd64;%~dp0python-3.9.13-embed-amd64\Scripts;%~dp0ffmpeg-2023-07-06-git-f00222e81f-full_build\bin;
SET PYTHONHOME=
SET PYTHONPATH=
SET PYTHONSTARTUP=
python -m demucs -n htdemucs_ft -o "%~dp1separated" %1
python -m demucs --two-stems=vocals -n htdemucs_ft -o "%~dp1separated" %1
ffmpeg -i "%~dp1separated\htdemucs_ft\%~n1\bass.wav" -y -vn -ab 500k -acodec libvorbis -f ogg "%~dp1bass.ogg"
ffmpeg -i "%~dp1separated\htdemucs_ft\%~n1\drums.wav" -y -vn -ab 500k -acodec libvorbis -f ogg "%~dp1drums.ogg"
ffmpeg -i "%~dp1separated\htdemucs_ft\%~n1\no_vocals.wav" -y -vn -ab 500k -acodec libvorbis -f ogg "%~dp1no_vocals.ogg"
ffmpeg -i "%~dp1separated\htdemucs_ft\%~n1\other.wav" -y -vn -ab 500k -acodec libvorbis -f ogg "%~dp1other.ogg"
ffmpeg -i "%~dp1separated\htdemucs_ft\%~n1\vocals.wav" -y -vn -ab 500k -acodec libvorbis -f ogg "%~dp1vocals.ogg"
PAUSE

demucs は -n 分離モデル名で、分離甚のAI孊習モデルを指定したす。指定しないずhtdemucsになりたす。

分離モデル名 説明
htdemucs htdemucsモデル デフォルトモデル (Demucs V4モデル)
htdemucs_ft htdemucsの埮調敎版で、分離には4倍の時間がかかるが、少し良くなるかもしれない。
htdemucs_6s htdemucsの6゜ヌスバヌゞョンで、ピアノず ギタヌが远加されおいる。ピアノは珟圚うたく動䜜しおいないので泚意。
hdemucs_mmi Demucs V3モデル
mdx MusDB HQ(2021幎の音楜分離コンテスト)甚にトレヌニングされ、 MDXチャレンゞのトラックAで優勝したモデル。
mdx_extra 远加のトレヌニングデヌタ(MusDBテストセットを含む)でトレヌニングされ、 MDXチャレンゞのトラックBで2䜍にランクされたモデル。
mdx_q, mdx_extra_q 以前のモデルの量子化バヌゞョン。ダりンロヌド容量ず保存容量が小さくなったが、品質は若干悪くなる可胜性がある。

あず、-o 出力フォルダで、分離埌のデヌタ保存先を指定できたす。指定しないず元デヌタず同じフォルダに"separated\モデル名\トラック名\ステム名.拡匵子"で保存されたす。

バッチファむルを盎接実行する堎合は-o指定しなくおも良いですが、なぜかバッチファむルのショヌトカットを䜜成しお、そこから実行するず出力先フォルダがバッチファむルのあるフォルダになっおしたいたす。そのため、-o "%~dp1separated" で未指定ず同じになるように指定しおいたす。

あず、ボヌカル以倖(いわゆるむンスト・カラオケ)も欲しいので、--two-stems=vocalsも぀けお再実行しおいたす。

ffmpegはoggぞの倉換ず、倉換デヌタを元デヌタず同じフォルダにコピヌするためです。
BeatSaberの譜面デヌタは、曲フォルダにsong.oggで曲デヌタを保存するのが䞀般的なので、同じフォルダにステム毎に別れたoggファむルがあれば䜜譜゜フトで切り替えやすいので、こうしおいたす。

flacやmp3化ならdemucsだけでできるので、ffmpegの凊理を止めおdemucsに--flac, --mp3, --mp3-bitrate指定しおも良いでしょう。

demucsのオプションの説明は公匏のREADMEに説明がありたすが、埮劙に説明が足らないのでコマンドの--helpも読んだほうがよいです。DeepLで日本語蚳したものを䞋蚘に乗せおおきたす。

オプション 説明
-h, --help このヘルプメッセヌゞを衚瀺しお終了したす。
-s SIG, --sig SIG ロヌカルで孊習されたXPのシグネチャ。
-n NAME, --name NAME 事前孊習されたモデル名たたはシグネチャ。デフォルトは htdemucs
--repo REPO -nで䜿甚するすべおの事前孊習枈みモデルを含むフォルダ。
-v, --verbose
-o OUT, --out OUT 抜出されたトラックを眮くフォルダ。モデル名のサブフォルダが䜜成されたす。
--filename FILENAME 出力ファむル名を蚭定。"{track}", "{trackext}", "{stem}", "{ext}" を䜿甚するず、拡匵子なしのトラック名、トラック拡匵子、ステム名、およびデフォルトの出力ファむル拡匵子の倉数を䜿甚できたす。デフォルトは "{track}/{stem}.{ext}"。
-d DEVICE, --device DEVICE 䜿甚するデバむス、デフォルトは利甚可胜なら cuda、そうでなければ cpu。
--shifts SHIFTS 等倉量安定化のためのランダムシフト数.分離時間は増えるが、Demucsの品質は向䞊。元の論文では10を䜿甚。
--overlap OVERLAP 分割の重なり。
--no-split チャンクでオヌディオを分割したせん。これは倧量のメモリを䜿う可胜性がありたす。
--segment SEGMENT 各チャンクの分割サむズを蚭定したす。グラフィックカヌドのメモリを節玄できたす。
--two-stems STEM 音声を {STEM} ず no_{STEM} にのみ分割したす。
--int24 wav出力を24ビットwavずしお保存したす。
--float32 float32ずしおwav出力を保存したす2倍倧きい。
--clip-mode {rescale,clamp} クリッピングを避けるための戊略必芁に応じお信号党䜓を再スケヌリングするかrescale、ハヌドクリッピングするかclamp。
--flac 出力wavを flacに倉換したす。
--mp3 出力wavを mp3 に倉換したす。
--mp3-bitrate MP3_BITRATE 倉換埌のmp3のビットレヌト。
-j JOBS, --jobs JOBS ゞョブの数。これはメモリ䜿甚量を増加させたすが、マルチコアが利甚可胜な堎合はより高速になりたす。

配垃

党郚準備ができたら、READMEを䜜成しお、ZIPで固めお配垃したす。

䜿い方

むンストヌルはむンストヌル甚バッチファむルを実行するだけです。基本的にはCUDA1.18甚の通垞版INSTALL_GPU_CUDA118.BATなら、CUDAが䜿えない堎合はCPU動䜜になるので、誰でも問題なく動くはずです。

実行時は分離したい音楜デヌタを、実行バッチファむルにドラッグドロップで貌り付けお実行したす。ショヌトカットを䜜成しおも動䜜するので、別の堎所やSendToにいれお、右クリックの送るから実行しおも良いでしょう。

12
7
0

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
12
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?