代码复现|Demucs Music Source Separation

devtools/2024/10/18 16:56:01/

一、背景介绍

        Demucs是一个开源的音源分离项目。

        Demucs在算法层面前后经历了三次大版本的进化,最原始的V1版本是:编解码+LSTM。具体算法原理图如下所示。该版本在时域进行音源分离。关于阅读笔记请点击这篇文章。

V1版本原理图

       V2版本是同时使用时域和频域信息进行音源分离。关于阅读笔记请点击这篇文章。

V2版本原理图

        V3版本是在V2版本上使用Transformer进一步提升性能。关于阅读笔记请看这篇文章。

V3版本原理图

二 、准备工作

2.1 安装软件环境

        关于驱动、和pytorch的安装可以看这篇文章Pytorch GPU版本安装-CSDN博客

        关于pip 安装的包可以参看我安装的版本。

Package                   Version
------------------------- -----------
aiohttp                   3.9.5      
aiosignal                 1.3.1      
alembic                   1.13.1     
antlr4-python3-runtime    4.8        
appdirs                   1.4.4      
async-timeout             4.0.3      
attrs                     23.2.0     
audioread                 3.0.1      
autopage                  0.5.2      
Brotli                    1.0.9      
certifi                   2024.2.2   
cffi                      1.16.0     
charset-normalizer        2.0.4      
click                     8.1.7      
cliff                     4.6.0      
cloudpickle               3.0.0      
cmaes                     0.10.0     
cmd2                      2.4.3
colorama                  0.4.6
colorlog                  6.8.2
Cython                    3.0.10
decorator                 5.1.1
diffq                     0.2.4
docker-pycreds            0.4.0
dora_search               0.1.12
einops                    0.8.0
ffmpeg-python             0.2.0
filelock                  3.14.0
frozenlist                1.4.1
fsspec                    2024.3.1
future                    1.0.0
gitdb                     4.0.11
GitPython                 3.1.43
greenlet                  3.0.3
huggingface-hub           0.23.0
hydra-colorlog            1.1.0
hydra-core                1.1.0
hydra-optuna-sweeper      1.2.0
idna                      3.4
importlib_metadata        7.1.0
joblib                    1.4.2
jsonschema                4.21.1
jsonschema-specifications 2023.12.1
julius                    0.2.7
lameenc                   1.7.0
lazy_loader               0.4
librosa                   0.10.2
lightning-utilities       0.11.2
llvmlite                  0.42.0
Mako                      1.3.3
markdown-it-py            3.0.0
MarkupSafe                2.1.5
mdurl                     0.1.2
mkl-fft                   1.3.8
mkl-random                1.2.4
mkl-service               2.4.0
msgpack                   1.0.8
multidict                 6.0.5
musdb                     0.4.2
museval                   0.4.1
mypy                      1.10.0
mypy-extensions           1.0.0
numba                     0.59.1
numpy                     1.26.4
omegaconf                 2.1.2
openunmix                 1.3.0
optuna                    2.10.1
packaging                 24.0
pandas                    2.2.2
pbr                       6.0.0
pillow                    10.2.0
pip                       23.3.1
platformdirs              4.2.1
pooch                     1.8.1
prettytable               3.10.0
protobuf                  4.25.3
psutil                    5.9.8
pyaml                     24.4.0
pycparser                 2.22
Pygments                  2.17.2
pyperclip                 1.8.2
pyreadline3               3.4.1
pyrootutils               1.0.4
PySocks                   1.7.1
python-dateutil           2.9.0.post0
python-dotenv             1.0.1
pytorch-lightning         1.9.0
pytz                      2024.1
PyYAML                    6.0.1
referencing               0.35.0
requests                  2.31.0
retrying                  1.3.4
rich                      13.7.1
rpds-py                   0.18.0
safetensors               0.4.3
scikit-learn              1.4.2
scipy                     1.13.0
sentry-sdk                2.0.1
setproctitle              1.3.3
setuptools                68.2.2
simplejson                3.19.2
six                       1.16.0
smmap                     5.0.1
soundfile                 0.12.1
soxr                      0.3.7
SQLAlchemy                2.0.29
stempeg                   0.2.3
stevedore                 5.2.0
submitit                  1.5.1
threadpoolctl             3.5.0
timm                      0.9.16
tomli                     2.0.1
torch                     1.12.1
torchaudio                0.12.1
torchmetrics              1.3.2
torchvision               0.13.1
tqdm                      4.66.2
treetable                 0.2.5
typing_extensions         4.9.0
tzdata                    2024.1
urllib3                   2.1.0
wandb                     0.16.6
wcwidth                   0.2.13
wheel                     0.41.2
win-inet-pton             1.1.0
yarl                      1.9.4
zipp                      3.18.1

2.2 下载数据集

        关于数据集可以看我之前的一篇文章音源分离|数据集|MUSDB18-HQ-CSDN博客

三、 复现过程

        复现过程主要分享遇到的问题及其解决方式。

3.1 DataLoader读取数据使用多进程出现问题

        参考这篇文章代码复现|DataLoader类num_workers参数引发的进程问题-CSDN博客

3.2 subprocess.run()导致报错“FileNotFoundError: [WinError 2] 系统找不到指定的文件

        参考这篇文章代码复现|subprocess.run()导致报错“FileNotFoundError: [WinError 2] 系统找不到指定的文件“-CSDN博客

3.3 编解码问题UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb2 in position 15: invalid start byte

        报错截图如下,根据报错提示信息定位到源码部分第91行。解决方法,把解码换成gbk

报错截图

报错源码

修改后的代码

3.4 命令找不到问题RuntimeError: Could not change bpm because 'soundstretch' 不是内部或外部命令,也不是可运行的程序或批处理文件。

        

报错截图

定位到报错位置

        出错原因:88行使用了soundstretch指令但是本地没有相应的EXE文件。

        解决方法:下载soundstretch.exe文件,然后放到C:\Windows\System32目录下。

3.5 关于显存不够问题concurrent.futures.process.BrokenProcessPool: A child process terminated abruptly, the process pool is not usable anymore

        我的PC只是8G大小为了让程序跑起来,修改配置文件将batch_size从64改成1,group_size也设置成1。

四、推理

        在训练过程中,因为整个工程是包管理的形式,一开始为了方便排除bug(跑通train.py)我将所有的包导入方式从from .xx import xx 改成 from xx import xx,如下图所示。

       排除完train.py相关的bug后,还原__init__.py,还原之前的包导入方式。使用下面命令运行train.py代码

python -m demucs.train

        等待训练结束后,再使用下面命令导出训练好的模型。注意97d170e1需要实际情况换成自己生成的。

python -m tools.export 97d170e1

          最后使用导出的模型进行推理。

python -m demucs --repo ./release_models -n 97d170e1 --mp3 D:\Basic_Audio\demucs-main\demucs-main\release_models
\mixture.wav

        成了,成了,我看谁还说咱只会看文献。本次从文献阅读,选择要复现的工程,复现初见成效(只是跑通代码)总耗时14个工作日。

五、参考

       非常感谢这位大佬的文章,加快了我的复现进程。【音频分离】demucs V3的环境搭建及训练(window)-CSDN博客


http://www.ppmy.cn/devtools/42007.html

相关文章

Java中的数组、Set、List、Map类型的互相转换总结

序言 数组、Set、List、Map是Java语言非常常用的几种数据类型,他们之间存在着千丝万缕的联系。关于底层的数据结构我这里就不再多说啦,直接从应用出发,总结他们之间的转换方法,并给出推荐方法。 大家可以点赞收藏等到需要的时候…

NIUKE Python:Python入门(上)

01 输入输出 NP1 Hello World! 将字符串 Hello World! 存储到变量str中,再使用print语句将其打印出来 strHello World! print(str) NP2 多行输出 将字符串 Hello World! 存储到变量str1中,再将字符串 Hello Nowcoder! 存储到变量str2中,再…

ABAP 第四代增强

文章目录 ABAP 第四代增强增强点创建增强点增强点的实施 增强部分(ENHANCEMENT-SECTION)创建增强部分(ENHANCEMENT-SECTION)运行结果 增强部分的实施 隐式增强选项显示/隐藏 隐式增强选项隐式增强的实施运行结果 STATIC类型的增强…

非对称加密算法在区块链中的应用

随着数字技术的迅猛发展,区块链技术因其独特的去中心化、不可篡改、透明公开等特性,逐渐成为各行各业关注的焦点。在区块链技术的众多组成部分中,非对称加密算法无疑是其中最为基础和关键的一环。本文旨在探讨非对称加密算法在区块链中的应用…

(保姆级教程傻瓜式操作)树莓派--基于opencv实现人脸识别

前言 因为当时没有边实验边记录,所以这篇文章可能存在疏漏。不过很多地方我推荐了我参考过的博客或者视频,希望尽可能地解答您的疑惑,如果您仍有不懂的地方,欢迎评论,如果我知道答案,我会很乐意为您解答。 …

android apk没有源码如何修改程序

如果您拥有一个APK文件但没有源代码,您可以尝试以下几种方法来进行修改: 反编译APK:使用工具如apktool对APK文件进行反编译,这将为您提供源代码和资源文件。 动态调试:使用调试工具连接设备或模拟器,并动态…

【CV】opencv调用DIS/LK等计算光流,前一帧和当前帧写反了有什么影响?

当在计算光流时,将前一帧和当前帧输入反了,会导致一系列问题。 在计算光流时,通常是将前一帧作为模板,根据当前帧计算光流。因为光流是描述相邻帧之间像素移动的一种方法,它通过比较两帧之间的像素强度或特征点的移动…

完成所有任务的最少时间 - (LeetCode)

前言 今天也是很无精打采的一天,早上看到这道题,都有点懵逼,开始也不懂如何入手,既然自己搞不定,就顺便测试了一下AI吧,测试了通义千问和文心一言,把题目拿去那里问,可以把解题思路…