基于深度学习的语音活动检测-Pytorch

本文介绍了一种基于深度学习的语音活动检测方法,利用SAM语料库和PyTorch框架,构建了二维卷积神经网络模型,实现了较好的检测效果。

基于深度学习的语音活动检

语音活动检测

    能看到我这篇博客的同志们想必就是冲着用深度学习的方法来实现语音活动检测这一项任务来的。这里就不过多解释有关语音活动检测的概念了,下面简单的说一下概念以及比较有名的一些检测方法,重点还是方法项目实践上。

背景

    语音活动检测指的是在存有噪音信号的情况下,能够正确找出音频说话的开 始与终止位置的一项技术。在日常生活中并不是所有的声音信号都是“干净”的, 通常来说,一段经典语音中的有声部分和无声部分比例约为 4:6。在使用音频 数据时,有近一半的语音信号实际上对人们来说都是无用的,使用语音活动检测 技术,对待使用的语音信号进行预先处理,找出其语音部分的位置,再利用相关 的语音分离手段,提取出“干净”的语音信号供我们后续使用。这样做,不仅能 有效提高信道利用率,同时对语音增强、语音识别、语音编码等技术具有重 要作用。
    起初,由于硬件条件的限制,使得通信信号传输效率很低,一段传输信号中,绝大部分的信号对人们来说是无用的,假设信道传输的信号都是人们想要的,这样的传输效率会提高很多。于是乎,语音活动检测就诞生了,目的就是识别并去除语音信号中非语音那一部分对资源的占用。后来,硬件水平大幅提升,语音信号中非语音部分对信道资源的占用已经几乎可以忽略不及了,但这时候,语音识别,语音增强等等领域的发展使得语音活动检测这一项技术一直没有落伍,反而在不断融合新方法提升效果。

传统检测方法

    传统经典的语音活动检测方法主要包括:
     1、能量阈值法
     2、零交叉率法
     3、最小二乘周期估计法
     4、几何自适应能量阈值法
     5、基于统计模型的方法

目前主流检测方法

    目前语音活动检测最流行的方法就是WebRTC提出的vad方法,该方法在信噪比较高的情况下效果非常好,能够很好的区分出语音和非语音,实时性也非常好但是在信噪比较高的情况下,这种方法效果就大大折扣了,亲身体检,语音中的轻微电流音可能会被误判为语音信号。最近几年流行起来的还有一类方法,就是利用机器学习、深度学习的方法来训练语音活动检测模型,用模型来进行结果预测,这种方法得到的效果很好,而且只要数据集比较好的话,原理上就会解决传统方法在信噪比较低的情况下检测效果不理想的问题,但是这种方法也带来了一个问题 - 实时性可能比较差,不容易做成实时的语音活动检测效果。

项目实践

    最近几年,深度学习非常流行,一般情况下机器学习能做的,深度学习就一定能做,而且最终效果可能也还更好。用深度学习的角度来看,机器学习就相当于浅层神经网络来训练模型,一般的可以看做一两层左右,而深度学习却不一样,他可以有很多层,可根据项目任务的特点来构建适当层数的神经网络,这也就说明,深度学习有着更好的特征提取能力,还有,相对于机器学习来说,深度学习特征提取是全自动的,相当于端到端的那种感觉。(以上都是个人理解,若有错误欢迎指正!)。
    本文使用深度学习的方法来完成语音活动检测任务。主要使用工具及环境如下:
     1、SAM语料库(电影字幕自动对齐语料库)
     2、PyTorch深度学习框架
     3、二维卷积神经网络
     4、Python及相关计算、绘图库等
     5、Kaldi开源语音识别工具
     6、Ubuntu18.04-GPU服务器、Windows10(RTX3060-6G显卡)

获取数据集

    SAM 数据集[8]是南加州大学,信号分析与解释实验室, Krishna Somandepalli 和 Shrikanth Narayanan 两位研究者开源提供的。SAM 数据 集是由 2014 到 2018 年之间 95 部电影中的语音片段组成。SAM 数据集最主要的特点是使用了自动生成字幕的方式,得到了一段对话 的近似还是时间和结束时间的时间戳列表。也正是由于这个特点使得该语料库数据的准确性无法达到非常准确的程度,不过对于实验是够用了。

数据预处理

    由于这里下载的数据是特征数据集,是已经完成数据预处理的语料库。因此不用专门对数据进行预处理了。不过可以说一下对于一般数据来说,我们应该怎么预处理来适应这个模型的训练。
    一、重采样、转格式
      利用FFmpeg工具将音频文件已16kHz的采样率进行采样,采样完成后,以.wav格式来存储。
    二、分窗、加帧、预加重
      以0.64s的时间间隔来进行分帧,这样做是便于后续64×64维度的卷积神经网络的输入。
    三、计算能量谱
    四、获得Mel滤波系数
    五、对Mel滤波系数取对数,得到FBank特征。
以上步骤全部利用kaldi工具来完成。

在这里插入图片描述

构建神经网络

    根据传统的卷积神经网络原理以及 SAM 数据集特点,构建了本文中的网络结构,如下图:

在这里插入图片描述
    主要包括7层卷积,3层最大池化以及1层平均池化,主要使用了relu激活函数以及softmax激活函数,整体如上图所示。利用上述网络来进行模型训练。
     前向传播部分代码:


                
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值