飞桨paddlespeech语音唤醒推理C实现

这篇具有很好参考价值的文章主要介绍了飞桨paddlespeech语音唤醒推理C实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上篇(飞桨paddlespeech 语音唤醒初探)初探了paddlespeech下的语音唤醒方案,通过调试也搞清楚了里面的细节。因为是python 下的,不能直接部署,要想在嵌入式上部署需要有C下的推理实现,于是我就在C下把这个方案的部署实现了。需要说明的是目前完成的是浮点实现,真正部署时要用的是定点实现,后面要做的是从浮点到定点的转换。浮点实现也做了两个版本。一是跟python下的实现完全一致的版本,做这个版本的目的是方便与python版本的结果比较,确保每个模块的实现完全正确。二是将模型中的卷积层和对应的batchNormal(BN)层合并为一个卷积层的版本,将卷积层和对应的BN层合并为一个卷积层一是可以减少参数的个数,二是可以减少运算量(BN里有求方差等运算)。做定点化时也是要基于这个版本来做的。下面就讲讲我是怎么做C下的实现的。

 文章来源地址https://www.toymoban.com/news/detail-417160.html

语音唤醒的推理过程如下图所示:

飞桨paddlespeech语音唤醒推理C实现

从上图可以看出主要分两步,一是做特征提取,二是做模型推理。将提取出来的特征值作为模型的输入,推理后得到模型的输出,从而给出是否是关键词的结果。

 

1,  特征提取

特征提取的步骤如下图所示:

飞桨paddlespeech语音唤醒推理C实现

做这一步时主要基于两份开源的代码: FFT 和 MFCC。Fbank是MFCC的一部分,因此需要对代码进行裁剪。做时从分帧开始到得到特征值,每一步处理都要跟python下的保持完全一致,如分帧时用的是什么窗,用的是能量谱还是对数谱等。调试时基于一个具体的WAV文件来调。每一步执行后python下有一个输出,在C下也有一个输出,要确保这两个输出在误差允许范围内保持一致,否则就是C的实现有问题。经过调试后特征提取部分就完成了,python下的结果和C下的结果保持小数点后面前四位相同,误差还是非常小的。

 

2,  模型推理

模型推理可以分为如下几个步骤:在Python下获取模型参数并保存进文件给C实现用,跟python完全一致的浮点实现,将卷积层和对应的BN层合并为一个卷积层的浮点实现。

2.1 模型参数获取

在paddlespeech下先用API获取每层的参数,代码大致如下:

飞桨paddlespeech语音唤醒推理C实现

然后将每层的参数按事先规定的格式保存在一个文件里,供C实现去解析参数。我用的参数保存格式如下:

飞桨paddlespeech语音唤醒推理C实现

即参数一层一层的放。在每一层里,先是层名,然后是weight参数的个数和bias参数的个数,最后是weight和bias具体的参数值。在C中就根据这个规则去解析从而得到每一层的参数。

2.2 跟python推理完全一致的浮点实现

模型的框图如下:

飞桨paddlespeech语音唤醒推理C实现

主要有PreProcess/DTCNStack等模块。先实现模型用到的神经网络里的基本单元,有depthwise_conv1d/pointwise_conv1d/relu/batch_normal/sigmoid等。再将这些基本单元组成pre_process模块来调试。依旧是用调试特征提取时的方法来调,确保每一步的输出跟python下的在误差允许范围内保持一致。PreProcess模块调好后再来调DTCNStack等模块,最终形成一个完整的推理实现。下图给出了我调试时用的wav的最终每帧的在python下和C下的后验概率(有多个值,限于长度,这里只截取了部分),可以看出python下和C下的结果是保持一致的。

飞桨paddlespeech语音唤醒推理C实现

2.3将卷积层和对应的BN层合并为一个卷积层的浮点实现

为了减少参数个数和运算量,可以将将卷积层和对应的BN层合并为一个卷积层。具体原理如下:

飞桨paddlespeech语音唤醒推理C实现

对于C实现来说,只要把banch_normal()函数去掉就可以了。但是在保存参数时卷积层的参数要根据上面的公式做个换算,同时把BN层的去掉。下图是做最后linear以及后验概率运算时有没有BN层的结果(有多个值,限于长度,这里只截取了部分)。

飞桨paddlespeech语音唤醒推理C实现

从上两图看出将卷积层和BN层合并为一层对最终结果的影响是非常小的,但是省掉了2.5K的参数以及原先BN层要做的运算量。

 

到了这里,关于飞桨paddlespeech语音唤醒推理C实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【飞桨PaddleSpeech语音技术课程】— 语音识别-Deepspeech2

    (以下内容搬运自飞桨PaddleSpeech语音技术课程,点击链接可直接运行源码) Demo实现:https://github.com/PaddlePaddle/PaddleSpeech/blob/develop/demos/automatic_video_subtitiles/ 语音识别(Automatic Speech Recognition, ASR) 是一项从一段音频中提取出语言文字内容的任务。 (出处:DLHLP 李宏毅 语音识别课程

    2024年02月08日
    浏览(28)
  • 百度飞桨PaddleSpeech的简单使用

    PaddleSpeech 是基于飞桨 PaddlePaddle 的语音方向的开源模型库,用于语音和音频中的各种关键任务的开发,包含大量基于深度学习前沿和有影响力的模型,一些典型的应用示例如下:语音识别、语音翻译 (英译中)、语音合成、标点恢复等。 我只用到了语音识别(语音转文字)、语

    2024年02月03日
    浏览(38)
  • Python使用PaddleSpeech实现语音识别(ASR)、语音合成(TTS)

    目录 安装 语音识别 补全标点 语音合成 参考 PaddleSpeech是百度飞桨开发的语音工具 注意,PaddleSpeech不支持过高版本的Python,因为在高版本的Python中,飞桨不再提供paddle.fluid API。这里面我用的是Python3.7 需要通过3个pip命令安装PaddleSpeech: 在使用的时候,urllib3库可能会报错,因

    2024年04月25日
    浏览(27)
  • snowboy 自定义唤醒词 实现语音唤醒【语音助手】

    本系列主要目标初步完成一款智能音箱的基础功能,包括语音唤醒、语音识别(语音转文字)、处理用户请求(比如查天气等,主要通过rasa自己定义意图实现)、语音合成(文字转语音)功能。 语音识别、语音合成采用离线方式实现。 操作系统:Ubuntu 22.04.3 LTS CPU:Intel® Core™

    2024年02月14日
    浏览(40)
  • Windows系统实现唤醒+合成+命令词智能语音交互

    1、之前写过离线能力调用,今天来个终极版,实现智能交互或者结合大模型的智能交互示例,下面进入正题。上B站效果离线唤醒+离线合成+离线命令词实现智能交互_哔哩哔哩_bilibili 2、到讯飞开放平台下载唤醒+合成+命令词的离线组合包,找到msc_64.dll复制三份出来,一定要注

    2024年02月16日
    浏览(34)
  • Ubuntu20.04 使用Python实现全过程离线语音识别(包含语音唤醒,语音转文字,指令识别,文字转语音)

      因为手头有一个项目,该项目需要在香橙派上实现语音控制,并且带有语音唤醒功能。简单来说,就是通过唤醒词唤醒香橙派,然后说出相关指令,香橙派去执行指令。   但是,在弄香橙派的时候,自带的麦克风不好使了,单独进行麦克风测试的时候是好使的,但是程

    2024年02月05日
    浏览(37)
  • 语音识别系列︱paddlespeech的开源语音识别模型测试(三)

    参考: 语音识别系列︱用python进行音频解析(一) 语音识别系列︱paddlehub的开源语音识别模型测试(二) 上一篇paddlehub是一些预训练模型,paddlespeech也有,所以本篇就是更新paddlespeech里面的模型。 参考:PaddleSpeech 一键预测,快速上手Speech开发任务 PaddleSpeech 是 all-in-one 的语

    2024年02月05日
    浏览(38)
  • 批量生成,本地推理,人工智能声音克隆框架PaddleSpeech本地批量克隆实践(Python3.10)

    云端炼丹固然是极好的,但不能否认的是,成本要比本地高得多,同时考虑到深度学习的训练相对于推理来说成本也更高,这主要是因为它需要大量的数据、计算资源和时间等资源,并且对超参数的调整也要求较高,更适合在云端进行。 在推理阶段,模型的权重和参数不再调

    2024年02月09日
    浏览(37)
  • 人工智能-语音识别技术paddlespeech的搭建和使用

    PaddleSpeech是百度飞桨(PaddlePaddle)开源深度学习平台的其中一个项目,它基于飞桨的语音方向模型库,用于语音和音频中的各种关键任务的开发,包含大量基于深度学习前沿和有影响力的模型。PaddleSpeech支持语音识别、语音翻译(英译中)、语音合成、标点恢复等应用示例。

    2024年02月02日
    浏览(40)
  • 百度飞桨PP-YOLOE ONNX 在LabVIEW中的部署推理(含源码)

    目录 前言 一、什么是PP-YOLO 二、环境搭建 1、部署本项目时所用环境 2、LabVIEW工具包下载及安装 三、模型的获取与转化 1、安装paddle 2、安装依赖的库 3、安装pycocotools 4、导出onnx模型 (1)导出推理模型 (2) 安装paddle2onnx (3) 转换成onnx格式 四、在LabVIEW实现PP-YOLOE的部署推

    2024年02月16日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包