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,一经查实,立即删除!

相关文章

HCIP-HarmonyOS Application Developer 习题(十四)

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

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

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

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

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

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

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

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

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

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

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

qt EventFilter用途详解

一、概述 EventFilter是QObject类的一个事件过滤器,当使用installEventFilter方法为某个对象安装事件过滤器时,该对象的eventFilter函数就会被调用。通过重写eventFilter方法,开发者可以在事件处理过程中进行拦截和处理,实现对事…

go 语言 Gin Web 框架的实现原理探究

Gin 是一个用 Go (Golang) 编写的 Web 框架,性能极优,具有快速、支持中间件、crash处理、json验证、路由组、错误管理、内存渲染、可扩展性等特点。 官网地址:https://gin-gonic.com/ 源码地址:https://github.com/gin-gonic/gi…

Shell重定向输入输出

我的后端学习大纲 我的Linux学习大纲 重定向介绍 标准输入介绍 从键盘读取用户输入的数据,然后再把数据拿到Shell程序中使用; 标准输出介绍 Shell程序产生的数据,这些数据一般都是呈现到显示器上供用户浏览查看; 默认输入输出文件 每个…

前OpenAI首席技术官为新AI初创公司筹资;我国发布首个应用临床眼科大模型 “伏羲慧眼”|AI日报

文章推荐 2024人工智能报告.zip |一文迅速了解今年的AI界都发生了什么? 今日热点 据报道,前OpenAI首席技术官Mira Murati正在为一家新的AI初创公司筹集资金 据路透社报道,上个月宣布离职的OpenAI首席技术官Mira Murati正在为一…

栈和队列(一)

栈和队列的定义和特点 栈和队列是一种特殊的线性表,只能在表的端点进行操作 栈的定义和特点 这就是栈的结构,是一个特殊的线性表,只能在栈顶(或者说是表尾)进行操作。其中top为栈顶,base为栈底 栈s的存储…

华为:高级ACL 特定ip访问特定ip命令

网络拓扑图: 网络环境: 全网互通即可 1.创建一个名为test的高级ACL acl name test advance 2.添加规则 ##拒绝所有ip访问 rule 10 deny ip source any destination 192.168.1.10 0.0.0.0 只允许特定ip访问特定ip rule 5 permit ip source 192.168.2.10…

【Vulnhub靶场】Kioptrix Level 5

目标 本地IP:192.168.118.128 目标IP:192.168.118.0/24 信息收集 nmap探测存活主机,扫全端口,扫服务 首先探测到目标ip为:192.168.118.136 nmap -sP 192.168.118.0/24nmap -p- 192.168.118.136nmap -sV -A 192.168.…

BurpSuite渗透工具的简单使用

BurpSuite渗透工具 用Burp Suite修改请求 step1: 安装Burp Suite。官网链接:Burp Suite官网 step2: 设置代理 step3: 如果要拦截https请求,还需要在客户端安装证书 step4: 拦截到请求可以在Proxy ->…

【嵌入式实时操作系统开发】智能家居入门4(FreeRTOS、MQTT服务器、MQTT协议、STM32、微信小程序)

前面已经发了智能家居入门的1、2、3了,在实际开发中一般都会使用到实时操作系统,这里就以FreeRTOS为例子,使用标准库。记录由裸机转到实时操作系统所遇到的问题以及总体流程。相较于裸机,系统实时性强了很多,小程序下发…

opencv环境配置-适配b站阿童木的opencv教程

首先,opencv作为一个库文件,目的是为了让更多人不需要学习底层像素操作就能上手视觉技术,所以他适配很多环境,目前电脑端我知道的就可以适配C语言 C Python MCU端就是openmv跟他最类似,还有个k210 canmv 阿童木教的…

Unity 山水树木

本章节内容 1. Unity对3D游戏物体的简单操作; 2. 构建山水树木的场景 1. Unity 简易操作 1.1 新建3D游戏场景 1. 打开Unity Hub,点击 New Project (新建项目)按键,选择第二项 3D(Built-In Render Pipeline)&#xf…

Linux之实战命令41:lshw应用实例(七十五)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【…

虚拟滚动是怎么做性能优化的?

前言 一个简单的情景模拟(千万别被带入): A: 假设现在有 10 万条数据,你作为前端该怎么优化这种大数据的列表? B: 针对大数据列表一般不会依次性加载,会采用上拉加载、分页加载等…

如何用数据字典提升数据质量和决策效率?

在前面的文章中我们谈到过数据字典的概念,本文将继续探讨如何用数据字典提升数据质量和决策效率。 一、数据字典 数据字典:一种对数据的定义和描述的集合,它包含了数据的名称、类型、长度、取值范围、业务含义、数据来源等详细信息。 数据字…