今、ローカルで最強のボーカル分離モデルってなに?
はじめに
どうも、うんわです。
前回はReflow-VAE-SVCの使い方について解説しましたが、今回はボーカル分離モデルは今何がよいのか、どうやって使うかについて簡単に解説したいと思います。
それで...何が良いの?
ローカルで使えるものとしてはBS-Roformer、Mel-Band Roformerが性能が良いです。
Synthリーダーボードによれば上位はほぼBS-Roformer、Mel-Band Roformerが占めています。
ただし、(MVSep.com)と書かれているものは重みが公開されておらず、MVSEPでのみ使用できます。
1位のmel_band_roformer_ep_125_sdr_11.2069(Mel-Band Roformer Bas Curtiz Edition)についても同様です。
また、同モデルでも複数の重みが公開されており、現在オープンに公開されている中で性能が高いのはBS-Roformer LargeV1(私がViperx 1297を元にdepthを4層増やして微調整したもの)と
Kim's Mel-Band Roformerです。
重み・コンフィグ
BS-Roformer LargeV1
Kim's Mel-Band Roformer (weight) (config)
これらのモデルは非常に性能が高く、ボーカル分離用途のみならず話し声からキーボードのタイプ音などのノイズを取り除くようなノイズ除去用途にも使用できます。
モデルを使うには?
Ultimate Vocal RemoverのBeta版 UVR_Patch_4_14_24_18_7_BETA_full_Roformer.exe (Windowsのみ)
Music-Source-Separation-Training
などで使用できます。
UVRで使用する場合は UVRのインストールフォルダ/models/MDX-Net-Models/ にckptファイルを入れ、models/MDX-Net-Models/model_data/mdx_c_configs/ にコンフィグファイルを入れます。
初回分離時には重みに対応するコンフィグファイルを選択する必要があります。リストから選択し、Roformerチェックボックスにチェックを入れます。
設定が完了したら使用できます。ただし注意点があり、Beta版UVRではRoformerモデルを使用する場合のセグメントサイズとオーバーラップがバグっており、セグメントサイズはコンフィグ内inference:のdim_tが使用され、オーバーラップについては2が最も遅くなる設定になります。
これらは分離品質に直結します。セグメントサイズはモデルに一度に読み込む音声長であり、短すぎても長すぎても分離品質が悪くなります。dim_tの最適値は1101(11秒)です。メモリ消費量が多すぎる場合は801(8秒)でも良いと思います。
オーバーラップについては基本2で使用し、遅すぎる場合は4や8に設定します。dim_tが1101の場合は11を、801の場合は8を超えないように設定してください。
Music-Source-Separation-Trainingはモデルの学習用ですが推論にも使用できます。
使用する場合は依存関係をインストールした後に、inference.pyと同じ場所に重みとコンフィグを入れ、inputフォルダに分離したい音楽ファイルを入れ、以下のようなコマンドを実行します。(使用するモデルに合わせて変更する必要あり)
Kim's Mel-Band Roformerでの例
python inference.py --model_type mel_band_roformer --config_path config_vocals_mel_band_roformer_kim.yaml --start_check_point MelBandRoformer.ckpt --input_folder input/ --store_dir results/ --extract_instrumental
処理が終わるとresultsフォルダに分離結果が出力されます。UVRとは違ってセグメントサイズはchunk_sizeで、オーバーラップも小さいほど早くなります。chunk_sizeの最適値は485100です。メモリ消費量が多すぎる場合は352800、もしくはそれ以下に設定します。
python-audio-separatorについては使用したことがないので説明を省きます。readmeを参照してください。
Discussion