代码复现|Demucs Music Source Separation

一、背景介绍

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

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

V1版本原理图

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

V2版本原理图

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

V3版本原理图

二 、准备工作

2.1 安装软件环境

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

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

bash 复制代码
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代码

bash 复制代码
python -m demucs.train

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

bash 复制代码
python -m tools.export 97d170e1

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

bash 复制代码
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博客

相关推荐
码界奇点6 小时前
Python从0到100一站式学习路线图与实战指南
开发语言·python·学习·青少年编程·贴图
智者知已应修善业6 小时前
【求中位数】2024-1-23
c语言·c++·经验分享·笔记·算法
地平线开发者7 小时前
PTQ 量化数值范围与优化
算法·自动驾驶
sali-tec7 小时前
C# 基于halcon的视觉工作流-章68 深度学习-对象检测
开发语言·算法·计算机视觉·重构·c#
测试人社区-小明7 小时前
智能弹性伸缩算法在测试环境中的实践与验证
人工智能·测试工具·算法·机器学习·金融·机器人·量子计算
Laravel技术社区7 小时前
pytesseract 中英文 识别图片文字
python
罗西的思考8 小时前
【Agent】MemOS 源码笔记---(5)---记忆分类
人工智能·深度学习·算法
生骨大头菜8 小时前
使用python实现相似图片搜索功能,并接入springcloud
开发语言·python·spring cloud·微服务
绝不收费—免费看不了了联系我8 小时前
Fastapi的单进程响应问题 和 解决方法
开发语言·后端·python·fastapi
人邮异步社区8 小时前
PRML为何是机器学习的经典书籍中的经典?
人工智能·机器学习