语音分离--学习笔记(2)

  1. 根据说话人(麦克风)的数目,通常将语音分离任务分为单通道(Singlechannel)语音分离和麦克风阵列(Multi-channel)的语音分离。
  2. 对于时频域的语音分离需要将时域的语音信号进行短时傅里叶变换(STFT),将时域信号转换为时频域信号。需要进行 STFT的原因:
    1. 对于时频域的信号特征更容易提取,更容易去做一些语音特征提取的操作,例如 MFCC等。
    2. 对于经过 STFT 的时频域信号很容易的通过逆傅里叶变换(iSTFT)恢复为时域信号。
    3. 频域本质是把信号分解到每个子带空间上,每个空间里面性质稳定,你可以理解为频率恒定。
    4. 因此,一开始大家在做语音分离任务是都是在时频域上进行的。而对于时域的语音分离只需要做的就是搭建一个 encoder-decoder 的端到端的模型即可
  3. 说话者无关即模型可以应用都所有说话人的语音分离
  4. 对于语音分离任务,数据集一般使用的是华尔街日报数据集(Wall Street  Journal dataset, WSJ0)。
    1. 目前对于数据集的混合以及划分数据集的方法均采用 Deep Clustering 的 matlab 脚本混合(https://www.merl.com/demos/deepclustering/create-speaker-mixtures.zip)。
    2. 该数据集分为三个文件夹,si_tr_s,si_dt_05 和 si_et_05。
    3. 训练数据集使用 si_tr_s 中获取
    4. 验证集和测试集均在 si_dt_05 和 si_et_05 中获取。
    5. 在 Deep Clustering 方法之后所有的语音分离任务都是在开放演讲者集合(open speaker set)中训练,因此不会训练验证集和测试集的数据。
  5. 纯语音分离任务的相关工作 :
    1. 深度聚类(更多可以看笔记(1))
    2. 帧级别和句子级别的标签不变训练(PIT&uPIT) 
    3. 估计单一声音的频谱图,是通过 mask 点乘混合频谱
      图:使用深度学习模型估计一组掩码(mask),使用 softmax 操作可以轻松满足此约束。
    4. 深度吸引子网络则是通过学习聚类中心来对不同的 speaker 生成不同的 mask。这样就可以得到一种可学习的聚类中心
    5. TasNet:
      1. 在时域上对音频进行分离,克服了短时傅里叶变换将时域信号转换为频域信号的精度问题。
      2. 使用编码器-解码器框架:
        1. 在时域中直接对信号建模,并对非负编码器输出执行语音分离。这种方法省去了频率分解步骤,并将分离问题减少到估计编码器输出上的语音掩模,然后由解码器对其进行合成。TasNet 优于当前最新的因果和非因果语音(因果分离就是不考虑信号的将来特征,例如 RNN,LSTM,GRU。而非因果分离则是考虑信号的将来特征,例如,BILSTM,BIGRU,TCN)分离算法,降低了语音分离的计算成本,并显着降低了输出所需的最小延迟。
        2. 省去了 time-domain 转frequency-domain 步骤,并将分离问题减少到 decoder 合成音频。该方法其实就是用卷积来替换 stft 方法,因为 stft 其实也是卷积操作。因果操作的性能不如非因果操作的的性能,这个是因为非因果操作可以考虑到将来的特征信息。    
      3. 训练阶段的目标函数是使尺度不变的信噪比(SI-SNR)最大化,该信噪比通常被用作替代标准信噪比的信源分离评估指标。从这篇文章开始所有的时域方法的损失函数均为该评价指标。
    6. Conv-TasNet:与 TasNet 的区别就是将分离网络有循环神经网络(RNN,LSTM,GRU)变为时间卷积网络 TCN。这样可用通过 GPU 的并行加速大大缩减训练和测试时间。此外通过实验证明, Conv-TasNet 在因果实现和非因果实现中均大大提高了以前的 LSTM-TasNet 的分离精度。
    7. Dual-Path-RNN:
      1. 该方法在深层模型中优化 RNN 使其可以对极长的语音序列建模。DPRNN 将较长的音频输入分成较小的块,并迭代应用块内和块间操作,其中输入长度(chunk size)可以与每个操作中原始音频长度的平方根成比例。
      2. 该方法的双路径的 pipeline 是首先将语音切分,然后组合成 3D 的特征快,学习块内特征和块间特征来分离语音。块内 RNN 首先独立处理本地块(将长语音序列分为 chunk number),然后块间 RNN 聚合来自所有块的信息做 utterancelevel 的处理。
  6. 视听模型的语音分离任务:
    1. 由于其视觉信息的输入,将不会出现纯语音分离任务的的难题(标签置换问题:即分离之后给结果分配说话人身份标签混乱和困难的问题)。这是由于输入的视觉信息是存在标签的,与输出的标签数目是相同的。此外,视觉的特征信息用于将音频“聚焦”到场景中所需的说话者上,并改善语音分离质量。
    2. 输入:视频部分给定一个包含多个演讲者的视频片段,我们使用现成的面部检测器 mtcnn 在每个帧中查找面部 75 张。再使用 FaceNet 将人脸图像提取为一个 Face embedding。
    3. 使用 CNN 的方法得到的结果往往要比使用 RNN,LSTM,GRU 的方法要更精确,原因:
      1. CNN 方法首先可以大大的缩小训练和测试时间,可以更好的利用 GPU。
      2. 由于 TCN 方法和 ResNet 方法的发展,CNN 网络也可以朝向更深层次发展
      3. 通过 Dilated Conv 操作可以使 CNN 也能获得序列的上下文语义,使 CNN 模型更能适合 RNN 网络的操作。
      4. 因此 ConvTasNet 可以得到更好的结果。所以在设计 AV-model 的时候,语音部分参考了 Conv-Tasnet 的 Encoder 和 Separation 结构,而在视觉部分参考了端到端的 AudioVisual 语音识别的视觉信息部分。
  7. 语音分离流程图:

更多模型细节可参考:语音分离的总结 (cslikai.cn)  

#--------------------3.31 补充----------------------------------------------------------------------------------------------

关于“create-speaker-mixtures怎么生成数据集”:

  1. 如果熟悉使用matlab的朋友,可以选择参考这个仓库(create_future/LSTM_PIT_Speech_Separation (gitee.com)),应该运行“ create-speaker-mixtures-V1”或“create-speaker-mixtures-V2”下的文件皆可(作者说两个版本没有差别),但由于我对matlab不熟悉,所以没有实践检验,但根据star数,应该可行
  2. 如果1不成立或者没成功,可以参考一个python脚本实现的仓库(语音分离speech separation数据准备,开源_speech seperation_RoadmanG的博客-CSDN博客,从这个博客进入仓库),亲测可用,立马上手的那种
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: zynq-linux移植学习笔记应包含以下内容: 1. 对zynq架构和硬件资源的理解,包括PS和PL部分的特点。 2. 如何使用Xilinx SDK来编译和配置u-boot和Linux内核。 3. 如何在硬件平台上运行和调试Linux系统。 4. 怎样在Linux系统中配置和使用各种硬件资源,如DMA、Ethernet、Flash等。 5. 如何在Linux系统中移植和运行应用程序,并与硬件资源进行交互。 6. 如何进行系统优化和资源管理,以提高系统性能和稳定性。 ### 回答2: Zynq是一款Xilinx公司开发的一种嵌入式系统芯片,其使用了双核Cortex-A9处理器和可编程逻辑器件(FPGA)的组合。移植Linux到Zynq芯片中,可以使其具备无限的扩展能力,极大地拓展了其应用领域,因此掌握Zynq-Linux移植技术是非常重要的。 Zynq-Linux移植分为四个主要步骤: 第一,准备工作 在移植前,需要确认硬件平台是否支持Linux运行,并且需要对硬件进行配置,最好使用Zynq开发板的官方配置; 第二,内核移植 内核移植是整个移植过程中最关键的一步。需要根据硬件平台的特性对内核进行选择和配置。可以从内核源代码库中获取内核代码,然后进行交叉编译。移植内核的过程中需要注意内核配置参数的设置,同时也要确保内核模块和驱动程序的编写。 第三,文件系统移植 在移植Linux的过程中,文件系统也是非常重要的。可以使用开发板官方Linux镜像,也可以自己编译镜像。移植文件系统还涉及到root文件系统的配置、挂载方式、网络配置和各种服务的配置等问题。 第四,驱动移植 驱动程序是连接硬件和软件的关键部分,需编写相应的驱动程序来实现对硬件的控制。移植驱动程序的过程中需要关注各种硬件接口和设备驱动API的使用,确保驱动程序与硬件配合良好。 总结来说,Zynq-Linux移植技术的掌握需要具备较强的Linux基础知识、驱动开发经验和交叉编译工具链的使用能力。同时,还需要有耐心和细心,对每个步骤进行仔细的分析和处理。 在学习中,需要结合实际开发项目,多进行实践操作才能更好地掌握Zynq-Linux移植技术,为后续项目的开发和应用提供更好的支持。 ### 回答3: Zynq-7000系列是一种由Xilinx开发的SoC(系统级芯片),它将双ARM Cortex-A9处理器和可编程逻辑(FPGA)集成在一起。这使得开发人员可以使用硬件加速加速器来加速运行在Linux上的各种应用。然而,实现这个目标需要进行移植。 在开始Zynq Linux移植学习笔记之前,需要一些基本的知识。首先,需要了解Linux内核的基本工作原理和Linux驱动程序的编写技术。然后,需要了解FPGA和SoC体系结构。 在开始移植之前,需要为SoC开发板选择正确的Linux发行版。这通常需要考虑处理器体系结构,内存大小和设备驱动程序的可用性。另外,还需要考虑是否需要自定义内核或驱动程序以满足应用程序的需求。 接下来,需要编写设备树文件(DT)来描述SoC架构。设备树文件是一种描述硬件配置信息的特殊语言。它会告诉内核有哪些设备可用以及如何访问这些设备。 接下来,需要配置Linux内核以支持Zynq-7000处理器。这可能包括启用适当的内核配置选项,编写设备驱动程序以及配置启动过程。 最后,需要启动Zynq板并验证Linux系统稳定运行。这些步骤包括在启动过程中将设备树文件加载到内存中,以及启动用户空间应用程序。 总之,移植Zynq Linux是一项复杂的任务,需要广泛的专业知识和技术。但是,它可以为开发人员提供强大的硬件加速支持,使他们能够加速处理一系列计算密集型应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值