DPRNN 学习

DPRNN介绍

双路径循环语音分离神经网络(Dual-Path RNN)由三个处理阶段组成, 编码器、分离和解码器。首先,编码器模块用于将混合波形的短段转换为它们在中间特征空间中的对应表示。然后,该表示用于在每个时间步估计每个源的乘法函数(掩码)。最后利用解码器模块对屏蔽编码器特征进行变换,重构源波形。 DPRNN被广泛的应用在语音分离等任务上,取得了显著的效果。

论文: DUAL-PATH RNN: EFFICIENT LONG SEQUENCE MODELING FOR
TIME-DOMAIN SINGLE-CHANNEL SPEECH SEPARATION

模型架构

模型包括
encoder:编码器,类似fft,提取语音特征。
decoder:解码器,类似ifft,得到语音波形。
separation:类似得到mask,通过mix * 单个语音的mask,得到单个语音的一个语谱图。通过decoder解码器还原出语音波形。

数据集

使用的数据集为: librimix,LibriMix 是一个开源数据集,用于在嘈杂环境中进行源代码分离。
要生成 LibriMix,请参照开源项目:https://github.com/JorisCos/LibriMix

环境要求

  • 硬件(ASCEND)
    • ASCEND处理器
  • 框架
    • MindSpore
  • 通过下面网址可以获得更多信息:
    • MindSpore tutorials
    • MindSpore Python API
  • 依赖
    • 见requirements.txt文件,使用方法如下:
pip install -r requirements.txt

脚本说明

脚本及样例代码

dprnn
├─ requirements.txt                   # requirements
├─ README.md                          # descriptions
├── scripts├─ run_distribute_train.sh          # launch ascend training(8 pcs)├─ run_stranalone_train.sh          # launch ascend training(1 pcs)├─ run_eval.sh                      # launch ascend eval├─ run_infer_310.sh                 # launch infer 310
├─ train.py                           # train script
├─ train_wrapper.py                   # global clip norm Settings
├─ evaluate.py                        # eval
├─ preprocess.py                      # preprocess json
├─ data.py                            # postprocess data
├─ export.py                          # export mindir script
├─ network_define.py                  # define network
├─ model.py                           # dprnn model
├─ loss.py                            # loss function
├─ preprocess_310.py                  # preprocess of 310
└─ postprocess.py                     # postprocess of 310

脚本参数

数据预处理、训练、评估的相关参数在train.py等文件

数据预处理相关参数
in-dir                    预处理前加载原始数据集目录
out-dir                   预处理后的json文件的目录
sample-rate               采样率
train_name                预处理后的训练MindRecord文件的名称
test_name                 预处理后的测试MindRecord文件的名称  
训练和模型相关参数
train_dir                  训练集
valid_dir                  测试集
sample_rate                采样率
segment                    取得音频的长度
cv_maxlen                  最大音频长度
in_channels                输入通道数(过滤器数量/掩蔽网络的输入维度)
out_channels               隐藏状态的特征个数
hidden_channels            RNN层状态中的神经元数量
bn_channels                瓶颈层后的通道数
kernel_size                编码器和解码器内核大小
rnn_type                   使用的RNN类型
norm                       要使用的规范化类型
num_layers                 Dual-Path-Block的数量
K                          重叠窗口大小
num_spks                   说话者数量
lr                         学习率
l2                         权重衰减
momentum                   动量
评估相关参数
model_path                 ckpt文件路径
cal_sdr                    是否计算SDR
data-dir                   测试集路径
batch_size                 测试集batch大小
配置相关参数
device_target                硬件,只支持ASCEND
device_id                    设备号

数据预处理过程

数据预处理

数据预处理运行示例:

python preprocess.py

数据预处理过程需要三分钟时间

训练过程

训练

  • 单卡训练

运行示例:

python train.py
参数:
train_dir                  训练集
valid_dir                  测试集
sample_rate                采样率
segment                    取得音频的长度
cv_maxlen                  最大音频长度
in_channels                输入通道数(过滤器数量/掩蔽网络的输入维度)
out_channels               隐藏状态的特征个数
hidden_channels            RNN层状态中的神经元数量
bn_channels                瓶颈层后的通道数
kernel_size                编码器和解码器内核大小
rnn_type                   使用的RNN类型
norm                       要使用的规范化类型
num_layers                 Dual-Path-Block的数量
K                          重叠窗口大小
num_spks                   说话者数量
lr                         学习率
l2                         权重衰减
momentum                   动量

或者可以运行脚本:

bash run_standalone_train.sh [DEVICE_ID] [DATA_DIR]

上述命令将在后台运行,可以通过train.log查看结果
每个epoch将运行12小时左右

  • 分布式训练

分布式训练脚本如下

bash run_distribute_train.sh [DEVICE_NUM] [DISTRIBUTE] [RANK_TABLE_FILE] [DATA_DIR]

评估过程

评估

运行示例:

python eval.py
参数:
model_path                 ckpt文件
data-dir                   测试集路径
batch_size                 测试集batch大小

或者可以运行脚本:

bash run_eval.sh [DEVICE_ID] [CKPT_PATH] [DATA_DIR]

上述命令在后台运行,可以通过eval.log查看结果,测试结果如下

导出mindir模型

导出

python export.py

推理过程

推理

用法
bash scripts/run_infer_310.sh [MINDIR_PATH] [TEST_PATH] [NEED_PREPROCESS]
结果
Average SISNR improvement: 12.77

模型描述

性能

训练性能

在这里插入图片描述

随机情况说明

随机性主要来自下面两点:

  • 参数初始化
  • 轮换数据集

OpenModelZoo主页

OpenModelZoo主页.

文章来源:启智

推荐阅读

  • DeepSpeech理论与实战
  • WaveNet结构与推断
  • 【3D计算机视觉】PU-Net:点云上采样网络(CVPR2018-6)

更多芯擎AI开发板干货请关注芯擎AI开发板专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。

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

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

相关文章

力扣10.19

3192. 使二进制数组全部等于 1 的最少操作次数 II 给你一个二进制数组 nums 。 你可以对数组执行以下操作 任意 次(也可以 0 次): 选择数组中 任意 一个下标 i ,并将从下标 i 开始一直到数组末尾 所有 元素 反转 。 反转 一个元…

HCIP-HarmonyOS Application Developer 习题(十四)

(多选)1、HarmonyOs为应用提供丰富的Al(Artificial Intelligence)能力,支持开箱即用。下列哪些是它拥有的AI能力? A、通用文字识别 B、词性标注 C、实体识别 D、语音播报 答案:ABCD 分析: AI能力简介二维码生成根据开…

Docker 拉取镜像时配置可用镜像源(包含国内可用镜像源)

在/etc/docker/daemon.json中写入如下内容(如果文件不存在请新建该文件): { "registry-mirrors":["https://registry.docker-cn.com"] } 重新加载 json 配置文件: sudo systemctl daemon-reload重启 docker 服务: sud…

(JAVA)贪心算法、加权有向图与求得最短路径的基本论述与实现

1. 贪心算法 1.1 贪心算法的概述: 贪心算法是一种对某些求最优解问题的更简单、更迅速的设计技术。 贪心算法的特点是一步一步地进行,常以当前情况为基础根据某个优化测度作最优选择,而不考虑各种可能的整体情况,省去了为找最优…

Python自动化发票处理:使用Pytesseract和Pandas从图像中提取信息并保存到Excel

1. 引言 在财务部门,处理大量的纸质或扫描版发票是一项既耗时又容易出错的任务。通过使用Python中的pytesseract(一个OCR工具)和pandas库,我们可以自动化这一过程,从而提高工作效率并减少错误。 2. 安装所需库 首先…

Spring基于底层 API 的编程式管理和基于 TransactionTemplate 的编程式事务管理

在 Spring 中,事务管理可以通过编程式方式实现,主要有两种方式:基于底层 API 的编程式管理和基于 TransactionTemplate 的编程式事务管理。以下是两种方式的示例: 1. 基于底层 API 的编程式事务管理 这种方式直接使用 Spring 提…

Python 函数详解

引言 函数是编程中非常重要的概念,它允许我们将代码组织成可重用的块。Python 提供了灵活且强大的函数功能,包括创建和调用函数、形式参数与实际参数、位置参数、关键字参数、默认参数值、可变参数、返回值、变量作用域以及匿名函数(lambda&…

Linux 配置 ssh —— ubuntu

Linux 配置 ssh —— ubuntu 设置 ip 这里我们选择使用系统 DHCP 自动分配的 IP,有些教程推荐使用自定义 IP,但是这样我们就没法上网,所有这里采用自定义 IP 即可 安装并启动 ssh 首先需要安装 ssh: sudo apt-get install op…

【深度学习中的注意力机制6】11种主流注意力机制112个创新研究paper+代码——加性注意力(Additive Attention)

【深度学习中的注意力机制6】11种主流注意力机制112个创新研究paper代码——加性注意力(Additive Attention) 【深度学习中的注意力机制6】11种主流注意力机制112个创新研究paper代码——加性注意力(Additive Attention) 文章目录…

修复Oracle MySQL Server 安全漏洞(CVE-2023-0464)

@[TOC](修复Oracle MySQL Server 安全漏洞(CVE-2023-0464)) 对于MySQL的漏洞问题,建议通过防火墙来限制远程访问本地3306端口的方式来处理。如果必须要升级,那么涉及到的具体兼容性问题,新版本安装后会导致的业务异常。 所以,建议采用增加防火墙策略的方式,不建议对mysql进…

计算PSNR, SSIM, VAMF工具

计算PSNR, SSIM, VAMF GitHub - fifonik/FFMetrics: Visualizes Video Quality Metrics (PSNR, SSIM & VMAF) calculated by ffmpeg.exe 绘制码率图 GitHub - fifonik/FFBitrateViewer: Visualizes video bitrate received by ffprobe.exe 视频对比 https://github.com/…

什么是全局污染?怎么避免全局污染?

全局污染(Global Pollution)是指在编程过程中,过度使用全局变量或对象导致命名冲突、代码可维护性下降及潜在错误增加的问题。在 JavaScript 等动态语言中,尤其需要关注全局污染的风险。 全局污染的影响 1. 命名冲突 3. 意外修改…

【C#】调用本机AI大模型流式返回

【python】AI Navigator的使用及搭建本机大模型_anaconda ai navigator-CSDN博客 【Python】AI Navigator对话流式输出_python ai流式返回-CSDN博客 前两章节我们讲解了使用AI Navigator软件搭建本机大模型,并使用python对大模型api进行调用,使其流式返…

Python Flask 框架下的 API 接口开发与封装示例

API(Application Programming Interface)接口的开发和封装是构建软件系统的重要环节。以下是关于 API 接口开发和封装的详细步骤: 一、需求分析 在开发 API 接口之前,首先需要明确接口的功能需求。这包括确定接口要提供哪些数据…

“智能科研写作:结合AI与ChatGPT提升SCI论文和基金申请质量“

基于AI辅助下的高效高质量SCI论文撰写及投稿实践 科学研究的核心在于将复杂的思想和实验成果通过严谨的写作有效地传递给学术界和工业界。对于研究生、青年学者及科研人员,如何高效撰写和发表SCI论文,成为提升学术水平和科研成果的重要环节。系统掌握从…

ProteinMPNN中DecLayer类介绍

PositionWiseFeedForward 类的代码 class PositionWiseFeedForward(nn.Module):def __init__(self, num_hidden, num_ff):super(PositionWiseFeedForward, self).__init__()self.W_in = nn.Linear(num_hidden, num_ff, bias=True)self.W_out = nn.Linear(num_ff, num_hidden, …

SAP_FICO模块-资产减值功能对折旧和残值的影响

一、业务背景 由于财务同事没注意,用总账给资产多做了一笔凭证,导致该资产金额虚增,每个月的折旧金额也虚增;现在财务的需求是怎么操作可以进行资产减值,并且减少每个月计提的折旧; 二、实现方式 通过事务码…

linux CentOs7 安装 FastDFS

CentOs7 安装 FastDFS 1. 安装依赖 yum install gcc libevent libevent-devel -y#进入src目录 cd /usr/local/src2. 安装 libfastcommon 库 libfastcommon 库是 FastDFS 文件系统运行需要的公共 C 语言函数库 # 下载 wget https://github.com/happyfish100/libfastcommon/a…

使用梧桐数据库进行销售趋势分析和预测

在当今竞争激烈的商业环境中,企业需要深入了解销售数据,以便做出明智的决策。销售趋势分析和预测是帮助企业把握市场动态、优化库存管理、制定营销策略的重要工具。本文将介绍如何使用SQL来创建销售数据库的表结构,插入示例数据,并…

6.2024.10.22

2024.10.22 2024.10.22 2024.10.22 今天没怎么学习嵌入式的,找时间补上今天学习的空缺。