代码复现|Demucs Music Source Separation

一、背景介绍

        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.mzph.cn/news/838456.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2、快速搭建Vue框架以及项目工程

本篇文章详细讲解在配置完vue2环境后如何快速搭建一个Vue框架和项目工程。(以智慧农业云平台为例) 2.1 Vue工程创建 2.1.1创建想要存放的Vue文件夹 找到想要存放的文件夹并在目录搜索框中,并用管理员的方式打开。 2.1.2创建Vue工程 2、安装…

prompt工程策略(一:使用 CO-STAR 框架来搭建 prompt 的结构)

原文:我是如何赢得GPT-4提示工程大赛冠军的 原文的原文: How I Won Singapore’s GPT-4 Prompt Engineering Competition 为了让 LLM 给出最优响应,为 prompt 设置有效的结构至关重要。CO-STAR 框架是一种可以方便用于设计 prompt 结构的模板…

2024最新Kali Linux安装教程(非常详细)从零基础入门到精通(附安装包)!

什么是Kali Linux? Kali Linux是一个高级渗透测试和安全审计Linux发行版,其功能非常强大,能够进行信息取证、渗透测试、攻击WPA / WPA2保护的无线网络、离线破解哈希密码、将android、Java、C编写的程序反编译成代码等等,是黑客的…

Invalid bound statement (not found) 六种解决方法

前五种参考博文: Invalid bound statement (not found) 五种解决方法-CSDN博客 第六种: 在启动类上加上MapperScan,指定扫描包

【C++】list原理讲解及其实现

目录 一、认识list底层结构 二、list的构造类函数 三、迭代器 四、数据的访问 五、容量相关的函数 六、关于数据的增删查改操作 七、list和vector的比较 前言 要模拟实现list,必须要熟悉list的底层结构以及其接口的含义,在上一篇我们仔细讲解了list的…

Gradio 案例——将 dicom 文件转为 nii文件

文章目录 Gradio 案例——将 dicom 文件转为 nii文件界面截图依赖安装项目目录结构代码 Gradio 案例——将 dicom 文件转为 nii文件 利用 SimpleITK 库,将 dicom 文件转为 nii文件更完整、丰富的示例项目见 GitHub - AlionSSS/dcm2niix-webui: The web UI for dcm2…

JavaScript精粹(一)- 基础入门

JavaScript(简称为JS)是一种广泛应用于网页开发的脚本语言,具有以下几个主要作用: 网页交互:JavaScript 可以用于创建动态的网页效果,例如响应用户的操作,实现页面内容的动态更新,以…

【Java基础】集合(2) —— List

List 存储的对象是有序的&#xff08;集合中存储对象的顺序和使用add方法添加对象的顺序一致&#xff09;&#xff0c;存储的对象是可重复的。 List的特有的功能: 都是可以操作索引的功能。 增: void add(int index, E element )boolean addAll(int index, Collection<? …

mysql的explain

explain可以用于select&#xff0c;delete&#xff0c;insert&#xff0c;update的statement。 当explain用于statement时&#xff0c;mysql将会给出其优化器&#xff08;optimizer&#xff09;的执行计划。 通过explain字段生成执行计划表。下面来解析这个执行计划表的每一列…

提升用户体验:Xinstall免邀请码功能详解

在移动互联网时代&#xff0c;App的推广和运营显得尤为重要。然而&#xff0c;传统的App推广方式往往需要用户填写繁琐的邀请码&#xff0c;这不仅降低了用户体验&#xff0c;还影响了推广效果。幸运的是&#xff0c;Xinstall作为国内专业的App全渠道统计服务商&#xff0c;推出…

汽车电子都应用哪些频点的贴片晶振

晶振通过与其它元器件的连接使用&#xff0c;产生脉冲起到信号源的作用&#xff0c;所以在电子圈中有一个很形象的比喻: 如果把芯片比如电路的控制大脑&#xff0c;那晶振产生的信号就是给大脑持续供需的血液。平时&#xff0c;在我们使用的手机&#xff0c;蓝牙耳机&#xff0…

没有疯狂内卷的日本智能机市场,小屏与设计仍旧是主流

如果聊起国内的智能机市场&#xff0c;我想大多数人的印象就是疯狂内卷。卷影像、卷屏幕、卷快充、卷性能……客观地说&#xff0c;国内的3C产品还是很有质价比的。不过在没有如此内卷的日本市场&#xff0c;各种小屏手机仍旧是主流。 除了苹果外&#xff0c;日本本土品牌的夏普…

python中内置函数简要介绍

pyton3.11版本中常用的内置函数&#xff0c;不需要导入&#xff0c;可直接使用。这些函数大多数都是比较常用的&#xff0c;很多在之前的文章都有介绍过。 大家也可直接到官网查看学习 https://docs.python.org/zh-cn/3.11/library/functions.html。 内置函数 abs() min() …

高质量新闻数据集OpenNewsArchive:880万篇主流新闻报道,国产大模型开源数据又添猛料

在构建国产大语言模型的道路上&#xff0c;高质量新闻是不可或缺的重要语料之一。这类语料集准确性、逻辑性、时效性于一体&#xff0c;同时包含丰富的事实知识&#xff0c;可以大幅提升模型的文本生成质量、词汇表达能力、事件理解分析能力以及时序内容的适应性和预测能力&…

《Python编程从入门到实践》day29

# 昨日知识点回顾 修改折线图文字和线条粗细 矫正图形 使用内置格式 # 今日知识点学习 15.2.4 使用scatter()绘制散点图并设置样式 import matplotlib.pyplot as plt import matplotlib matplotlib.use(TkAgg)plt.style.use(seaborn-v0_8) # 使用内置格式 fig, ax plt.subpl…

LeetCode494:目标和

题目描述 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 ‘’ 或 ‘-’ &#xff0c;然后串联起所有整数&#xff0c;可以构造一个 表达式 &#xff1a; 例如&#xff0c;nums [2, 1] &#xff0c;可以在 2 之前添加 ‘’ &#xff0c;在 1 之…

力扣刷题 day2

快乐数 202. 快乐数 - 力扣&#xff08;LeetCode&#xff09;   图: java // 快乐数 --> 19 > 1^2 9 ^2 82 > 82 > 8 ^ 2 2 ^ 2 ......public boolean isHappy(int n) {// 使用快慢指针int slow n, fast getSum(n);while (slow ! fast) {slow getSum(slo…

【计算机毕业设计】springboot二手家电管理平台

时代在飞速进步&#xff0c;每个行业都在努力发展现在先进技术&#xff0c;通过这些先进的技术来提高自己的水平和优势&#xff0c;二手家电管理平台当然不能排除在外。二手家电管理平台是在实际应用和 软件工程的开发原理之上&#xff0c;运用java语言以及前台VUE框架&#xf…

基于SSM的婚恋网站的设计与实现(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的婚恋网站的设计与实现&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spri…

std::remove-----std::remove_if

std::remove和std::remove_if 是 C11 标准库中的一个算法函数. std::remove 作用 遍历一遍容器&#xff0c;将容器中所有不是指定元素的元素往前复制。 总之就是一句话&#xff1a; 把不该删除的移动到前面&#xff0c;后面的就是应该删除的。 注意&#xff1a; 1&#…