找回密码
 立即注册
LiveVideoStack 首页 资讯 查看内容
  • QQ空间
  • 回复
  • 收藏

基于TensorflowLite的人声识别在端上的实现(3)

2018-4-26 17:41

2.4 梅尔倒频谱


基于2.3的梅尔对数谱,采用DCT变换将直流信号分量和正弦信号分量分离,最后得到的结果称为梅尔倒频谱。

其中

由于梅尔倒频谱输出的是向量,还不能用图片显示,需要将其转换成图像矩阵。需要将输出向量的范围 线性变换到图像的范围 



图2.9 绘图颜色标度示意图


2.5 算法处理速度优化


由于算法需要在客户端上实现,因此需要对速度做一定的改进[5]。优化方面如下:


  1. 指令集加速:由于算法有大量的加法和乘法矩阵运算,因此引入arm指令集,做多指令集优化,加速运算。速度可以提高4~8倍[6]

  2. 算法加速:I) 选取人声频段(20Hz~20KHz),并剔除非人声频段减少冗余计算。II) 降低音频采样率,由于人耳对过高的采样率不敏感,因此降低采样率 可以减少不必要的数据计算。III) 合理分窗和切片,防止过度计算。IV) 静音检测,减少不必要的时间片段。

  3. 采样频率加速:如果音频的采样频率过高,选择下采样,处理的频率最高设定为32KHz。

  4. 多线程加速:将音频拆分为多个片段,采用多线程并行处理。并根据机器的能力配置线程数,默认为4个线程。


图2.10 算法工程端选取的参数


3.人声识别模型


3.1模型选择


卷积神经网络(Convolutional Neural Networks-简称CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。


20世纪60年代,Hubel和Wiesel在研究猫脑皮层中用于局部敏感和方向选择的神经元时发现其独特的网络结构可以有效地降低反馈神经网络的复杂性,继而提出了卷积神经网络。现在,CNN已经成为众多科学领域的研究热点之一,特别是在模式分类领域,由于该网络避免了对图像的复杂前期预处理,可以直接输入原始图像,因而得到了更为广泛的应用。 K.Fukushima在1980年提出的新识别机是卷积神经网络的第一个实现网络。随后,更多的科研工作者对该网络进行了改进。其中,具有代表性的研究成果是Alexander和Taylor提出的“改进认知机”,该方法综合了各种改进方法的优点并避免了耗时的误差反向传播。


一般地,CNN的基本结构包括两层,其一为特征提取层,每个神经元的输入与前一层的局部接受域相连,并提取该局部的特征。一旦该局部特征被提取后,它与其它特征间的位置关系也随之确定下来;其二是特征映射层,网络的每个计算层由多个特征映射组成,每个特征映射是一个平面,平面上所有神经元的权值相等。特征映射结构采用影响函数核小的sigmoid, relu等函数作为卷积网络的激活函数,使得特征映射具有位移不变性。此外,由于一个映射面上的神经元共享权值,因而减少了网络自由参数的个数。卷积神经网络中的每一个卷积层都紧跟着一个用来求局部平均与二次提取的计算层,这种特有的两次特征提取结构减小了特征分辨率。


CNN主要用来识别位移、缩放及其他形式扭曲不变性的二维图形。由于CNN的特征检测层通过训练数据进行学习,所以在使用CNN时,避免了显式的特征抽取,而隐式地从训练数据中进行学习;再者由于同一特征映射面上的神经元权值相同,所以网络可以并行学习,这也是卷积网络相对于神经元彼此相连网络的一大优势。卷积神经网络以其局部权值共享的特殊结构在语音识别和图像处理方面有着独特的优越性,其布局更接近于实际的生物神经网络,权值共享降低了网络的复杂性,特别是多维输入向量的图像可以直接输入网络这一特点避免了特征提取和分类过程中数据重建的复杂度。


图3.1 Inception-v3模型


本文选取了精度较高的Inception-v3模型作为人声识别的模型,v3一个最重要的改进是分解,将7x7卷积网络分解成两个一维的卷积(1x7,7x1),3x3也是一样(1x3,3x1),这样的好处,既可以加速计算,使得网络深度进一步增加,增加了网络的非线性,还有值得注意的地方是网络输入从224x224变为了299x299,更加精细设计了35x35/17x17/8x8的模块。


使用TensorFlow Session模块可以实现代码层面的训练和预测功能,具体使用方法详见TensorFlow 官网[7]


图3.2 TensorFlow Session使用示意图


3.2模型样本


有监督的机器学习中,一般需要将样本分成独立的三部分训练集(train set),验证集(validation set)和测试集(test set)。其中训练集用来估计模型,验证集用来确定网络结构或者控制模型复杂程度的参数,而测试集则检验最终选择最优的模型的性能如何。


具体定义如下:


训练集:学习样本数据集,通过匹配一些参数来建立一个分类器。建立一种分类的方式,主要是用来训练模型的。


验证集:对学习出来的模型,调整分类器的参数,如在神经网络中选择隐藏单元数。验证集还用来确定网络结构或者控制模型复杂程度的参数,用来防止模型过拟合现象。


测试集:主要是测试训练好的模型的分辨能力(识别率等)


根据第二章的梅尔倒频谱算法可以得到声音识别的样本文件,将人声频谱作为正样本,动物声音和杂音等非人声作为负样本,交由Inception-v3模型进行训练。


本文采用了TensorFlow作为训练框架,选取人声和非人声各5000个样本作为测试集,1000个样本作为验证集。


3.3 模型训练


样本准备完成后,即可使用Inception-v3模型训练。当训练模型收敛时,即可生成端上可使用的pb模型。模型选取时选择编译armeabi-v7a或者以上版本即可默认打开NEON优化,即打开USE_NEON的宏,能够达到指令集加速的效果。例如CNN网络一半以上的运算都在卷积(conv)运算,使用指令集优化可以至少加速4倍。


图3.3 卷积处理函数


然后经过TensorFlow提供的toco工具生成lite模型,该模型可以直接在客户端上使用TensorFlow Lite框架调用。


图3.4 toco工具调用接口


3.4 模型预测


对声音文件使用梅尔倒频谱算法提取特征,并生成预测图片。之后使用训练产生的lite模型即可预测,预测结果示意图如下:


图3.5 模型预测结果


参考文献:


[1] https://www.tensorflow.org/mobile/tflite

[2] 基于MFCC与IMFCC的说话人识别研究[D]. 刘丽岩. 哈尔滨工程大学 . 2008

[3] 一种基于MFCC和LPCC的文本相关说话人识别方法[J]. 于明,袁玉倩,董浩,王哲. 计算机应用. 2006(04)

[4] Text dependent Speaker Identification in Noisy Enviroment[C]. Kumar Pawan,Jakhanwal Nitika,

Chandra Mahesh. International Conference on Devices and Communications . 2011

[5] https://github.com/weedwind/MFCC

原作者: 仝辉 上叶 来自: 阿里巴巴闲鱼技术互动组
文章点评
相关文章