【音频分离】demucs V3的环境搭建及训练(window)

文章目录

  • 一、环境搭建
    • (1)新建虚拟环境,并进入
    • (2)安装pyTorch
    • (3)进入代码文件夹,批量安装包
    • (4)安装其他需要的包
  • 二、数据集准备
    • (1)下载数据集
    • (2)修改配置参数
    • (3)创建微调数据集
    • (4)解压outputs.tar.gz
    • 三、训练
      • (1)默认,cpu
      • (2)默认,gpu
      • (3)修改参数,gpu
    • 四、推理
      • (1)模型导出
      • (2)模型评估
      • (3)推理
  • 报错
    • (1)soundfile.LibsndfileError: Error opening 'C:\\Users\\Lenovo\\AppData\\Local\\Temp\\tmps0ogpyqy.wav': System error.
    • (2)FileNotFoundError: [WinError 2] 系统找不到指定的文件。
    • (3)TypeError: beat_track() takes 0 positional arguments but 1 positional argument (and 2 keyword-only arguments) were given
    • (4)TypeError: chroma_cqt() takes 0 positional arguments but 1 positional argument (and 1 keyword-only argument) were given
    • (5)numpy.core._exceptions._ArrayMemoryError: Unable to allocate 1.11 GiB for an array with shape (54134, 1377) and data type complex128
    • (6)UserWarning:The version_base parameter is not specified.
    • (7)FileNotFoundError: Caught FileNotFoundError in DataLoader worker process 0.
    • (8)torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 562.00 MiB (GPU 0; 15.99 GiB total capacity; 14.06 GiB already allocated; 0 bytes free; 14.72 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
    • (9)WARNING:__main__:Model 81de367c has less epoch than expected (8 / 360)
  • 写在最后

代码下载

这是一个音频提取、分离的项目

一、环境搭建

(1)新建虚拟环境,并进入

conda create -n demucs python=3.8
activate demucs

在这里插入图片描述
在这里插入图片描述

(2)安装pyTorch

到pyTorch官网选择对应配置
在这里插入图片描述

这个是我的配置

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

在这里插入图片描述

(3)进入代码文件夹,批量安装包

在这里插入图片描述

d:
cd  D:\data\cqZhang\demucs-3
pip install -r requirements.txt

在这里插入图片描述

(4)安装其他需要的包

pip install librosa

二、数据集准备

(1)下载数据集

使用Musdb HQ 数据集
获取路径有:
https://zenodo.org/record/3338373
https://www.kaggle.com/datasets/ayu055/musdb18hq

数据集可以放在“\checkpoint\defossez\datasets\musdbhq”路径下,
这与代码原来的位置应该是一致的

(2)修改配置参数

  1. The dset.musdb key inside conf/config.yaml.
  2. The variable MUSDB_PATH inside tools/automix.py.

在这里插入图片描述
在这里插入图片描述

我本来使用的是相对路径,但是他貌似找不到,后来改成绝对路径
其他的路径也一样,如果找不到,就要改成绝对路径

(3)创建微调数据集

原来的命令是export NUMBA_NUM_THREADS=1; python3 -m tools.automix,但它是linux上的命令,
将其改为set NUMBA_NUM_THREADS=1 && python -m tools.automix

运行结束会在项目目录下产生tmp文件夹,里面有新的数据集

修改 conf/config.yaml.中的 dset.musdb
修改 conf/dset/auto_mus.yaml 中的 dset.wavOUTPATH

(4)解压outputs.tar.gz

tar xvf outputs.tar.gz

在这里插入图片描述

三、训练

训练有三种命令
我只尝试了第二种

(1)默认,cpu

dora info -f 81de367c

this will show the hyper-parameter used by a specific XP.
Be careful some overrides might present twice, and the right most one will give you the right value for it.
这将显示特定XP使用的超参数。
请注意,有些覆盖可能会出现两次,最正确的一次将为您提供正确的值。

(2)默认,gpu

dora run -d -f 81de367c

在这里插入图片描述
注意:如果修改了数据集,要在目录下删除metadata文件夹,否则会出错。

run an XP with the hyper-parameters from XP 81de367c.
-d is for distributed, it will use all available GPUs.
使用XP 81de367c中的超参数运行XP。
-d是分布式的,它将使用所有可用的GPU。

(3)修改参数,gpu

dora run -d -f 81de367c hdemucs.channels=32

start from the config of XP 81de367c but change some hyper-params.
This will give you a new XP with a new signature (here 3fe9c332).
从XP 81de367c的配置开始,但更改了一些超参数。
这将为您提供一个带有新签名的新XP(此处为3fe9c332)。

四、推理

(1)模型导出

python -m tools.export 81de367c

在这里插入图片描述

(2)模型评估

python -m tools.test_pretrained --repo ./release_models -n 81de367c

在这里插入图片描述

(3)推理

python -m demucs --repo ./release_models -n 81de367c --mp3 D:\data\cqZhang\001.mp3

在这里插入图片描述

保存位置./separated
在这里插入图片描述

报错

(1)soundfile.LibsndfileError: Error opening ‘C:\Users\Lenovo\AppData\Local\Temp\tmps0ogpyqy.wav’: System error.

在这里插入图片描述

在linux上运行会创建一个临时文件,且程序退出后该临时文件会自动删除,
但是在windows上运行时,不能打开创建的临时文件,

Whether the name can be used to open the file a second time, while the named temporary file is still open, varies across platforms (it can be so used on Unix; it cannot on Windows NT or later).
在命名的临时文件仍然打开的情况下,该名称是否可以用于第二次打开文件,因平台而异(它可以在Unix上使用;不能在Windows NT或更高版本上使用)。

处理:
方法1. 更改临时文件保存方式(不保存到系统的临时文件夹里)
方法2. 增加参数:delete=False,手动删除

我采用方法2
在这里插入图片描述

执行后会报其他错误,这是另一个问题了

在这里插入图片描述

(2)FileNotFoundError: [WinError 2] 系统找不到指定的文件。

在这里插入图片描述

出现这个错误,原因大概有三种:
1、先查看路径是否正确
2、再查看该文件是否存在
3、如果还没解决问题,最后很可能就是该命令在dos环境内无法使用

处理:
根据实际情况,我判断是第三种问题
到这里下载一个程序,
在这里插入图片描述
解压后放在项目目录下
在这里插入图片描述
已经成功执行了
在这里插入图片描述

(3)TypeError: beat_track() takes 0 positional arguments but 1 positional argument (and 2 keyword-only arguments) were given

在这里插入图片描述

说是参数个数不匹配的问题,其实并不是

处理:

# 将下列代码
tempo, events = beat_track(drums.numpy(), units='time', sr=SR)# 改为
tempo, events = beat_track(y=drums.numpy(), units='time', sr=SR)

在这里插入图片描述

(4)TypeError: chroma_cqt() takes 0 positional arguments but 1 positional argument (and 1 keyword-only argument) were given

在这里插入图片描述

这个问题与上面那个问题一样
说是参数个数不匹配的问题,其实并不是

处理:

# 将下列代码
kr = torch.from_numpy(chroma_cqt(bass.numpy(), sr=SR))# 改为
kr = torch.from_numpy(chroma_cqt(y = bass.numpy(), sr=SR))

在这里插入图片描述

(5)numpy.core._exceptions._ArrayMemoryError: Unable to allocate 1.11 GiB for an array with shape (54134, 1377) and data type complex128

内存不足
这个我没有去思考如何减少内存的使用
也许减小数据集有效
我的处理方式是:换一台大内存的机器
它的内存需求不超过40g

(6)UserWarning:The version_base parameter is not specified.

在这里插入图片描述

这是一个版本警告,其实无关紧要
完整的警告如下:
D:\app\anaconda\envs\demucs\lib\site-packages\dora\hydra.py:279: UserWarning:
The version_base parameter is not specified.
Please specify a compatability version level, or None.
Will assume defaults for version 1.1
with initialize_config_dir(str(self.full_config_path), job_name=self._job_name,

处理:
加上参数version_base='1.1'
在这里插入图片描述

(7)FileNotFoundError: Caught FileNotFoundError in DataLoader worker process 0.

在这里插入图片描述
处理:
首先我在demucs/repitchsp.run()中加入参数shell=True
在这里插入图片描述
再次运行dora run -d -f 81de367c,报错信息出现变化
在这里插入图片描述
我运行命令soundstretch C:\\Users\\Lenovo\\AppData\\Local\\Temp\\tmps9ifi1_z.wav C:\\Users\\Lenovo\\AppData\\Local\\Temp\\tmp44v82njg.wav -pitch=2 -tempo=-3.226039,执行成功
在这里插入图片描述
说明文件其实是存在的,但是不知道为啥不能执行成功

第二处应该是编码格式的问题,我将raise RuntimeError(f"Could not change bpm because {error.stderr.decode('utf-8')}")修改为raise RuntimeError(f"Could not change bpm because {error.stderr.decode('gbk')}")解决

在这里插入图片描述
在这里插入图片描述
这可能就是报错的主要原因了
将soundstretch放到下面目录
在这里插入图片描述
运行出现一下结果,应该是没问题了。(内存不足修改batch_size)
在这里插入图片描述

(8)torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 562.00 MiB (GPU 0; 15.99 GiB total capacity; 14.06 GiB already allocated; 0 bytes free; 14.72 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

在这里插入图片描述
处理:
修改conf/config.yaml里的batch_size
默认64,但是我只有16G的显存,设置成4,目前恰好运行,不知道能不能运行到结束。
在这里插入图片描述
##(9)FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。
在这里插入图片描述
处理:
方法1:修改重命名方式,改成强制覆盖
在这里插入图片描述
方法2:在重命名前删除已有文件
方法3:修改命名方式,比如加上日期时间

(9)WARNING:main:Model 81de367c has less epoch than expected (8 / 360)

在这里插入图片描述
模型没有训练够就想导出。

处理:
只是一个警告,不理会也没关系。
介意的话,把这里改小即可。
在这里插入图片描述

写在最后

写一半的时候有其他的事,停了大半个月
现在又有事了,匆匆忙忙把推理部分写上
后面有机会再补充
有机会尝试自己构造数据集训练

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/22565.shtml

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

相关文章

数据采集的方法有哪些?

近年来,国家和各大企业都在部署大数据战略。“大数据”这个词也越来越频繁地出现在我们的生活中。当我们在进行网上冲浪时,页面总会跳出我们想要搜索的相关产品或关联事物。大数据,似乎总是能够“算”出我们“心中所想”。那么,大…

sqlserver 判断字符串是否为数字

在 SQL Server 中,可以使用以下方法判断一个字符串是否为数字: 使用 ISNUMERIC() 函数:这个函数可以判断一个字符串是否可以转换为数字。例如: SELECT 123 AS NumberStr, 123.45 AS DecimalStr, abc AS NonNumericStr WHERE ISN…

基于ssm民宿管理系统

使用Springboot部署的,基于ssm架构的民宿管理系统。集订单预定与博客功能为一体。 简介 享宿,即民宿出租预定平台主要为需要房屋租住的用户提供高效便捷、轻松贴心的移动式房源查找及租住平台。结合博客分享功能意在丰富房源的同时带动订单销售&#xff…

SpringBoot第23讲:SpringBoot集成MySQL - 基于JPA的封装

SpringBoot第23讲:SpringBoot集成MySQL - 基于JPA的封装 在实际开发中,最为常见的是基于数据库的CRUD封装等,比如SpringBoot集成MySQL数据库,常用的方式有JPA和MyBatis; 本文是SpringBoot第23讲,主要介绍基…

JVM基础篇-直接内存

JVM基础篇-直接内存 什么是直接内存? 直接内存( 堆外内存 ) 指的是 Java 应用程序通过直接方式从操作系统中申请的内存,这块内存不属于jvm 传统方式读取文件 首先会从用户态切换到内核态,调用操作系统函数从磁盘读取文件,读取一部分到操作系统缓冲区…

openGauss学习笔记-29 openGauss 高级数据管理-UNION子句

文章目录 openGauss学习笔记-29 openGauss 高级数据管理-UNION子句29.1 语法格式29.2 示例29.2.1 UNION29.2.2 UNION ALL openGauss学习笔记-29 openGauss 高级数据管理-UNION子句 UNION计算多个SELECT语句返回行集合的并集。UNION内部的SELECT语句必须拥有相同数量的列&#…

【微信小程序】父组件修改子组件数据或调用子组件方法

一、使用场景 页面中用到了自定义组件形成父子组件关系,在父组件某个特定时期想要操作子组件中的数据或方法,比如离开页面的时候清空子组件的数据。 二、方法 父组件可以通过this.selectComponent方法获取子组件实例对象,这样就可以直接访…

新一代开源流数据湖平台Apache Paimon入门实操-上

文章目录 概述定义核心功能适用场景架构原理总体架构统一存储基本概念文件布局 部署环境准备环境部署 实战Catalog文件系统Hive Catalog 创建表创建Catalog管理表查询创建表(CTAS)创建外部表创建临时表 修改表修改表修改列修改水印 概述 定义 Apache Pa…

【Spring】Spring之配置类解析源码解析

代码入口: // 创建一个Spring容器 AnnotationConfigApplicationContext applicationContext new AnnotationConfigApplicationContext(AppConfig.class);核心代码: // AnnotatedBeanDefinitionReader#register // componentClasses为传入的AppConfig.…

【MFC】02.文件类与常用基础控件-笔记

基本概念 MFC Microsoft Fundation class 微软基础类库 框架 基于Win32 SDK进行的封装 属性:缓解库关闭 属性->C/C/代码生成/运行库/MTD 属性->常规->MFC的使用:在静态库中使用MFC,默认是使用的共享DLL,运行时库 SD…

Ubuntu Find命令详解

一、Find命令简介 Ubuntu的Find命令是一种常用的终端指令,用于在文件系统中查找符合条件的文件和目录。该命令的语法格式如下: find [PATH] [OPTION] [EXPRESSION]其中,PATH表示待查找的目录,OPTION为选项参数,EXPRES…

【JavaSE】初步认识类和对象

【本节目标】 1. 掌握类的定义方式以及对象的实例化 2. 掌握类中的成员变量和成员方法的使用 3. 掌握对象的整个初始化过程 目录 1. 面向对象的初步认知 2. 类定义和使用 3. 类的实例化 4. this引用 1. 面向对象的初步认知 1.1 什么是面向对象 Java是一门纯面向对象的语…

Excel如何把两列互换

第一步:选择一列 打开excel,选中一列后将鼠标放在列后,让箭头变成十字方向。 第二步:选择Shift键 按住键盘上的Shift键,将列往后移动变成图示样。 第三步:选择互换 完成上述操作后,松开鼠标两…

Vue页面分享QQ\QQ空间\微博\微信

1、封装js代码:share.js文件 // share.js // url - 需要分享的页面地址(当前页面地址) // title - 分享的标题(文章标题)// QQ空间 export function toQQzone(url, title) {url encodeURIComponent(url)title encod…

层叠上下文

一、层叠上下文 在CSS2.1规范中,每个盒模型的位置是三维的,分别是平面画布上的x轴,y轴以及表示层叠的z轴,层叠上下文即元素在某个层级上z轴方向的排列关系。假定用户正面向(浏览器)视窗或网页,…

面试热题(打家窃舍)

一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响小偷偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负…

JSON动态生成表格

<!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><script>var fromjava"{\"total\":3,\"students\":[{\"name\":\"张三\",\&q…

机器学习基础08-模型选择02-分类算法矩阵(基于Pima 数据集)

算法评估矩阵&#xff08;Algorithm Evaluation Metrics&#xff09;用于评估机器学习算法在特定任务上的性能。不同的任务可能会使用不同的评估矩阵&#xff0c;因为每个任务的优劣衡量标准都不同。 分类算法矩阵 分类问题或许是最常见的机器学习问题&#xff0c;并且有多种评…

java通过http网络url下载文件

Testpublic void test3() throws ParseException {String fileUrl "http://*****/123.pdf";String savePath "C:\\Users\\HHH\\Desktop\\文件\\123.pdf";try {URL url new URL(fileUrl);InputStream inputStream url.openStream();Path outputPath Pa…

Android Studio 报错:Failed to create Jar file xxxxx.jar

通过分析&#xff0c;新下载的项目没有project/gradle目录&#xff0c;故通过其他项目复制到当前项目&#xff0c;就解决了该问题。 同时也出现了新的问题 Unable to start the daemon process.The project uses Gradle 4.1 which is incompatible with Java 11 or newer.原因…