跳转到主要内容

波形域中的音乐源分离。

项目描述

Demucs音乐源分离

Support Ukraine tests badge linter badge

这是Demucs(v4)的第4次发布,具有基于混合Transformer的源分离功能。对于经典混合Demucs(v3): 转到此提交。如果您遇到问题并希望恢复旧版本的Demucs,请填写问题,然后您可以使用git checkout v3回到v3。您也可以转到Demucs v2

Demucs是一个最先进的音乐源分离模型,目前能够从其他伴奏中分离出鼓、贝斯和人声。Demucs基于由Wave-U-Net启发的U-Net卷积架构。v4版本具有混合Transformer Demucs,这是一种使用Transformer的混合频谱/波形分离模型。它基于混合Demucs(也提供在此存储库中)并使用跨域Transformer编码器替换最内层。这个Transformer在每个域内使用自注意力,并跨域使用交叉注意力。该模型在MUSDB HQ测试集上实现了9.00 dB的SDR。此外,当我们使用稀疏注意力核扩展其感受野并对每个源进行微调时,我们实现了最先进的9.20 dB SDR。

样本可以在我们的样本页面上找到。查看我们的论文获取更多信息。它已在MUSDB HQ数据集+ 800首额外训练数据集上训练。此模型可以分离任何歌曲的鼓、贝斯和人声以及其他音轨。

由于Hybrid Transformer Demucs是新发布的,默认情况下并未激活,您可以通过以下描述的常规命令使用-n htdemucs_ft来激活它。单个、未经微调的模型提供为-n htdemucs,重新训练的基线模型提供为-n hdemucs_mmi。我们论文中描述的稀疏混合Transformer模型没有提供,因为它需要尚未准备发布的自定义CUDA代码。我们还发布了一个实验性的6个源模型,增加了吉他钢琴源。快速测试似乎表明吉他的质量不错,但钢琴源有大量混音和伪影。

Schema representing the structure of Hybrid Transformer Demucs,
    with a dual U-Net structure, one branch for the temporal domain,
    and one branch for the spectral domain. There is a cross-domain Transformer between the Encoders and Decoders.

如果您已经在使用Demucs,请注意以下重要消息

有关更多详细信息,请参阅发行说明

  • 2023年2月22日:增加了对SDX 2023挑战的支持,请参阅专门的文档页面
  • 2022年12月7日:Demucs v4现在可在PyPI上找到。htdemucs模型现在是默认使用的。同时发布一个6个源模型(添加了吉他钢琴,尽管后者目前效果不佳)。
  • 2022年11月16日:添加了新的Hybrid Transformer Demucs v4模型。添加了对torchaudio HDemucs实现的支持。
  • 2022年8月30日:增加了可重复性和消融网格,以及论文的更新版本。
  • 2022年8月17日:发布v3.0.5版本:将分割段长度设置为减少内存。与pyTorch 1.12兼容。
  • 2022年2月24日:发布v3.0.4版本:分割成两个声部(即卡拉OK模式)。以float32或int24格式导出。
  • 2021年12月17日:发布v3.0.3版本:修复了bug(感谢@keunwoochoi),GPU上的内存大幅减少(感谢@famzah)和在CPU上新的多核评估(-j标志)。
  • 2021年11月12日:发布带有混合域分离的Demucs v3。所有源都取得了显著改进。这是赢得索尼MDX挑战的模型。
  • 2021年5月11日:添加了对MusDB-HQ和任意wav集的支持,用于MDX挑战。有关使用Demucs参加挑战的更多信息,请参阅Demucs MDX说明

与其他模型的比较

以下是我们提供的论文中展示的不同指标的摘要。您还可以比较混合Demucs(v3)、KUIELAB-MDX-NetSpleeter、Open-Unmix、Demucs(v1)和Conv-Tasnet在我最喜欢的soundcloud播放列表中的一首歌曲。

准确度比较

整体SDR是每个4个源SDR的平均值,MOS质量是人类听众根据自然度和伪影的缺失给出的1到5的评分(5=无伪影),MOS污染是1到5的评分,5表示其他源为零污染。更多详细信息,请参阅我们的论文

模型 额外数据? 整体SDR MOS质量 MOS污染
Wave-U-Net 波形 3.2 - -
Open-Unmix 频谱图 5.3 - -
D3Net 频谱图 6.0 - -
Conv-Tasnet 波形 5.7 -
Demucs (v2) 波形 6.3 2.37 2.36
ResUNetDecouple+ 频谱图 6.7 - -
KUIELAB-MDX-Net 混合 7.5 2.86 2.55
Band-Spit RNN 频谱图 8.2 - -
Hybrid Demucs (v3) 混合 7.7 2.83 3.04
MMDenseLSTM 频谱图 804首歌曲 6.0 - -
D3Net 频谱图 1.5k首歌曲 6.7 - -
Spleeter 频谱图 25k首歌曲 5.9 - -
Band-Spit RNN 频谱图 1.7k(仅混合) 9.0 - -
HT Demucs f.t. (v4) 混合 800首歌曲 9.0 - -

要求

您至少需要Python 3.8。有关仅分离的要求,请参阅requirements_minimal.txt,如果您想训练新模型,请参阅environment-[cpu|cuda].yml(或requirements.txt)。

对于Windows用户

每次看到 python3,都替换为 python.exe。你应该始终在 Anaconda 控制台中运行命令。

对于音乐家

如果你只想使用 Demucs 分离音轨,可以使用以下命令安装:

python3 -m pip install -U demucs

对于最新版本,可以使用以下命令直接从这个仓库安装:

python3 -m pip install -U git+https://github.com/facebookresearch/demucs#egg=demucs

以下页面提供了高级操作系统支持,在发布问题之前,你必须阅读针对您的操作系统的页面

对于机器学习科学家

如果您已经安装了 anaconda,可以从此存储库的根目录运行

conda env update -f environment-cpu.yml  # if you don't have GPUs
conda env update -f environment-cuda.yml # if you have GPUs
conda activate demucs
pip install -e .

这将创建一个包含所有依赖项的 demucs 环境。

您还需要安装 soundstretch/soundtouch:在 Mac OSX 中,您可以使用 brew install sound-touch,在 Ubuntu 中使用 sudo apt-get install soundstretch。这用于音高/节奏增强。

在 Docker 中运行

感谢 @xserrat,现在有一个用于使用 Demucs 的 Docker 镜像定义。这可以确保所有库都正确安装,而不会干扰主机操作系统。有关更多信息,请参阅他的存储库 Docker Facebook Demucs

在 Colab 中运行

我制作了一个 Colab,可以轻松使用 Demucs 分离音轨。请注意,由于 Colab 传输速度较慢,对于大型媒体文件来说有点慢,但它将允许您不安装任何东西就使用 Demucs。

Demucs 在 Google Colab 上

Web 演示

Hugging Face Spaces 集成,使用 Gradio。请参阅演示:Hugging Face Spaces

图形界面

@CarlGao4 发布了 Demucs 的 GUI:CarlGao4/Demucs-Gui。Windows 和 macOS 的下载可在此处获取 此处。使用 FossHub 镜像 可以加速您的下载。

@Anjok07 在 UVR (Ultimate Vocal Remover) 中提供了一个支持 Demucs 的自包含 GUI。

其他提供商

Audiostrip 在其网站 https://audiostrip.co.uk/ 上提供免费的 Demucs 在线分离。

MVSep 也提供免费在线分离,选择 Demucs3 模型 B 以获得最佳质量。

Neutone 提供了一个实时 Demucs 模型,该模型可在其免费的 VST/AU 插件中使用,可应用于您最喜欢的 DAW。

分离音轨

要尝试 Demucs,只需从任何文件夹运行(只要您正确安装了它)

demucs PATH_TO_AUDIO_FILE_1 [PATH_TO_AUDIO_FILE_2 ...]   # for Demucs
# If you used `pip install --user` you might need to replace demucs with python3 -m demucs
python3 -m demucs --mp3 --mp3-bitrate BITRATE PATH_TO_AUDIO_FILE_1  # output files saved as MP3
        # use --mp3-preset to change encoder preset, 2 for best quality, 7 for fastest
# If your filename contain spaces don't forget to quote it !!!
demucs "my music/my favorite track.mp3"
# You can select different models with `-n` mdx_q is the quantized model, smaller but maybe a bit less accurate.
demucs -n mdx_q myfile.mp3
# If you only want to separate vocals out of an audio, use `--two-stems=vocals` (You can also set to drums or bass)
demucs --two-stems=vocals myfile.mp3

如果您有 GPU,但内存不足,请使用 --segment SEGMENT 减少每个分割的长度。 SEGMENT 应更改为一个整数。建议不小于 10(数字越大,所需的内存越多,但质量可能提高)。创建环境变量 PYTORCH_NO_CUDA_MEMORY_CACHING=1 也很有帮助。如果这仍然不能解决问题,请在命令行中添加 -d cpu。有关 GPU 加速的内存要求的更多详细信息,请参阅以下部分。

分离的音轨存储在 separated/MODEL_NAME/TRACK_NAME 文件夹中。在那里您将找到四个采样率为 44.1 kHz 的立体声 wav 文件:drums.wavbass.wavother.wavvocals.wav(如果您使用了 --mp3 选项,则为 .mp3)。

所有由 torchaudio 支持的音频格式都可以处理(例如:wav、mp3、flac、Linux/Mac OS X 等操作系统上的ogg/vorbis)。在 Windows 上,torchaudio 的支持有限,所以我们依赖于 ffmpeg,它应该支持几乎所有格式。如果需要,音频将实时重采样。输出将是一个编码为 int16 的波形文件。您可以使用 --float32 保存为 float32 wav 文件,或使用 --int24 保存为 24 位整数 wav 文件。您也可以通过传递 --mp3 保存为 mp3,并使用 --mp3-bitrate 设置比特率(默认为 320kbps)。

输出可能需要裁剪,特别是由于某些分离伪影。Demucs 将自动调整每个输出声部的缩放,以避免裁剪。但这可能会破坏声部之间的相对音量。如果您更喜欢硬裁剪,请传递 --clip-mode clamp。您还可以在将输入混合物馈送到 Demucs 之前尝试降低输入混合物的音量。

可以使用 -n 标志选择其他预训练模型。预训练模型列表如下

  • htdemucs:Hybrid Transformer Demucs 的第一个版本。在 MusDB + 800 首歌曲上训练。默认模型。
  • htdemucs_fthtdemucs 的微调版本,分离需要 4 倍的时间,但可能略好一些。与 htdemucs 相同的训练集。
  • htdemucs_6shtdemucs 的 6 个声源版本,增加了 pianoguitar 作为声源。请注意,piano 声源目前表现不佳。
  • hdemucs_mmi:Hybrid Demucs v3,在 MusDB + 800 首歌曲上重新训练。
  • mdx:仅在 MusDB HQ 上训练,是 MDX 挑战赛 A 轨道的获胜模型。
  • mdx_extra:使用额外训练数据(包括 MusDB 测试集)训练,在 MDX 挑战赛 B 轨道中排名第二。
  • mdx_qmdx_extra_q:前述模型的量化版本。下载和存储空间较小,但质量可能略差。
  • SIG:其中 SIG模型库 中的单个模型。

--two-stems=vocals 选项允许将人声与其他部分分离(例如卡拉 OK 模式)。vocals 可以更改为所选模型中的任何声源。这将完全分离混合文件后进行混合,因此这不会更快或使用更少的内存。

--shifts=SHIFTS 在输入上执行多次随机平移预测(即所谓的 平移技巧),并将它们平均。这使得预测慢 SHIFTS 倍。除非您有 GPU,否则不要使用它。

--overlap 选项控制预测窗口之间的重叠量。默认为 0.25(即 25%),这可能是合适的。它可以减少到 0.1 以提高一点速度。

-j 标志允许指定并行作业的数量(例如:demucs -j 2 myfile.mp3)。这将乘以相同的 RAM 使用量,因此请小心!

GPU 加速的内存要求

如果您想使用 GPU 加速,您的 GPU 至少需要 3GB 的 RAM 才能运行 demucs。但是,如果您使用默认参数,则需要大约 7GB 的 RAM。添加 --segment SEGMENT 来更改每个分割的大小。如果您只有 3GB 内存,请将 SEGMENT 设置为 8(尽管如果此参数太小,质量可能会更差)。创建环境变量 PYTORCH_NO_CUDA_MEMORY_CACHING=1 可以帮助拥有甚至更小内存(例如 2GB)的用户(我分离了一个 4 分钟的轨道,但只使用了 1.5GB),但这会使分离速度变慢。

如果您GPU上的内存不足,只需在命令行中添加-d cpu即可使用CPU。使用Demucs,处理时间应大致等于曲目持续时间的1.5倍。

从另一个Python程序调用

主函数提供了一个简单的API作为opt参数。您只需将解析后的命令行作为此参数传递

# Assume that your command is `demucs --mp3 --two-stems vocals -n mdx_extra "track with space.mp3"`
# The following codes are same as the command above:
import demucs.separate
demucs.separate.main(["--mp3", "--two-stems", "vocals", "-n", "mdx_extra", "track with space.mp3"])

# Or like this
import demucs.separate
import shlex
demucs.separate.main(shlex.split('--mp3 --two-stems vocals -n mdx_extra "track with space.mp3"'))

训练Demucs

如果您想训练(混合)Demucs,请按照训练文档进行。

MDX挑战重现

为了重现Track A和Track B提交的结果,请检出MDX混合Demucs提交存储库

如何引用

@inproceedings{rouard2022hybrid,
  title={Hybrid Transformers for Music Source Separation},
  author={Rouard, Simon and Massa, Francisco and D{\'e}fossez, Alexandre},
  booktitle={ICASSP 23},
  year={2023}
}

@inproceedings{defossez2021hybrid,
  title={Hybrid Spectrogram and Waveform Source Separation},
  author={D{\'e}fossez, Alexandre},
  booktitle={Proceedings of the ISMIR 2021 Workshop on Music Source Separation},
  year={2021}
}

许可

Demucs按照LICENSE文件中的MIT许可证发布。

项目详情


下载文件

下载适用于您的平台文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

demucs-4.0.1.tar.gz (1.2 MB 查看哈希值)

上传时间

由...