波形域中的音乐源分离。
项目描述
Demucs音乐源分离
这是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个源模型,增加了吉他
和钢琴
源。快速测试似乎表明吉他
的质量不错,但钢琴
源有大量混音和伪影。
如果您已经在使用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-Net、Spleeter、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
以下页面提供了高级操作系统支持,在发布问题之前,你必须阅读针对您的操作系统的页面。
- 如果您使用的是 Windows: Windows 支持。
- 如果您使用 MAC OS X: Mac OS X 支持。
- 如果您使用 Linux: Linux 支持。
对于机器学习科学家
如果您已经安装了 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。
Web 演示
与 Hugging Face Spaces 集成,使用 Gradio。请参阅演示:
图形界面
@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.wav
、bass.wav
、other.wav
、vocals.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_ft
:htdemucs
的微调版本,分离需要 4 倍的时间,但可能略好一些。与htdemucs
相同的训练集。htdemucs_6s
:htdemucs
的 6 个声源版本,增加了piano
和guitar
作为声源。请注意,piano
声源目前表现不佳。hdemucs_mmi
:Hybrid Demucs v3,在 MusDB + 800 首歌曲上重新训练。mdx
:仅在 MusDB HQ 上训练,是 MDX 挑战赛 A 轨道的获胜模型。mdx_extra
:使用额外训练数据(包括 MusDB 测试集)训练,在 MDX 挑战赛 B 轨道中排名第二。mdx_q
、mdx_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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e45a5a788bae79767c37bbf6e69aae03862ddcca05550fb79b926346a177d713 |
|
MD5 | cad559f2eee23f675ad38b8a583249da |
|
BLAKE2b-256 | 873855f835ebd9f443465087a6954ede19d4a41aebdf5e28567e89b99d6d2f57 |