【2021集创赛】Risc-v杯一等奖:自适应噪声环境的超低功耗语音关键词识别系统

本作品参与极术社区组织的有奖征集|秀出你的集创赛作品风采,免费电子产品等你拿~活动。

团队介绍

参赛单位:东南大学
队伍名称:Hey Siri
指导老师:刘波
参赛队员:钱俊逸、张人元、王梓羽
总决赛奖项:全国一等奖

摘要

语音关键词识别(Keyword Spotting, KWS)技术已普遍应用在以电池为主的供电设备中,对于此类设备低功耗是一个重要考虑的因素。然而,单独的低功耗神经网络因注重功耗的降低,难以适应高噪声环境下的使用,为了能灵活适应不同噪声场景,并尽可能降低系统功耗与面积,本文提出了一种基于蜂鸟E203和神经网络硬件加速器的自适应噪声环境超低功耗语音关键词识别系统。

本文设计的SoC系统处理器基于RISC-V指令集,通过NICE协处理器接口接入所设计的语音识别神经网络加速器,处理器通过自定义指令可控制加速器开关并读取运算数据,数据最后通过E203处理器处理并将识别结果实时显示在OLED屏上,同时可通过语音控制OLED屏上的贪吃蛇小游戏。此外,该系统可针对低信噪比和高信噪比噪声环境切换不同精度的神经网络,实现在噪声持续变化的环境中,根据信噪比大小自动选择合适的工作模式。在语音识别加速器算法上,本文实现了基于SNR预测模块的神经网络。第一,本文引入了SNR预测模块,对环境噪声进行预测。在高信噪比环境下使用超低功耗的近似权重二值化神经网络(Binary Weight Neural Network, BWN),在低信噪比环境下使用带噪声训练的精确BWN神经网络。第二,在高信噪比环境下,为了降低神经网络的复杂度,本文针对神经网络训练提出了逐步量化方案,筛选出适合将网络权重量化到1bit的网络模型,引入近似计算单元以降低功耗,同时针对能量化为BWN的网络模型,采用软硬件协同设计的方法进行算法定制优化,整体算法能实现12个语音关键词的识别,在近麦克风语音环境下准确率为89.1%,在15dB信噪比环境下准确率为86.5%。第三,在低信噪比环境下,为了不降低神经网络的识别率,本文选择带噪声训练的精确BWN神经网络,在0dB信噪比环境下准确率为88%。

本文基于TSMC 22nm ULL工艺,完成了语音识别加速器的综合(Design Compiler, DC)、功耗分析(PrimeTime PX, PTPX)以及后端版图设计工作,版图设计面积为0.6mm2。当工作频率为250kHz,IO驱动电压为1.8V,SRAM电压为0.6V,logic电路电压为0.39V时可以实现对语音关键词的实时判断,HVT工艺下加速器芯片功耗约为6.7μW。

系统功能介绍

在这里插入图片描述
图1 自适应噪声环境的超低功耗语音关键词识别系统功能框图

自适应噪声环境的超低功耗语音关键词识别系统总体功能框图如上图1所示,总体功能框图主要分为E203处理器部分、语音识别加速器部分,以及软硬件分别验证成功后的SoC系统搭建部分,各部分实现的功能如下所述:

E203处理器实现功能:E203处理器主要负责通过在软件与硬件语音识别加速器之间进行控制与数据读写,并通过按键与屏幕显示的方式实现良好的人机交互体验,其主要包括如下三个部分:NICE接口、加速器控制以及OLED显示。

  1. NICE接口:NICE接口部分实现了通过E203处理器对语音识别加速器的控制与数据读写,语音识别加速器通过标准的NICE接口接入E203处理器中,在NICE接口中自定义指令,接收E203发送的从加速器控制部分写入的指令,实现对语音识别加速器的开启和关闭,并持续使用寄存器接收加速器运行结果,接收的运行结果通过NICE接口返回到E203处理器中,并传送到OLED显示部分。

  2. 加速器控制:语音识别加速器控制部分首先在软件实现了NICE自定义指令的函数,通过实现加速器开关函数以及全局变量的控制,实现软件控制加速器的开启和关闭。此外,通过接入外部的按键中断实现按键控制语音识别的开启和关闭。

  3. OLED显示:OLED显示部分通过E203处理器接收NICE接口返回的运行结果,对运行结果进行处理,得到每次的关键词识别结果以及当前所处的噪声场景。处理后得到的结果,通过软件与E203处理器驱动连接的OLED屏幕,并实时显示在屏幕上。

语音识别加速器部分主要实现了通过使用数字硅麦对当前环境声音进行采样,对输入语音信号进行MFCC特征提取以及SNR噪声预测,提取后的特征作为神经网络的输入,在经过SNR噪声预测选择使用不同的网络模块后,输入进对应的神经网络当中,神经网络将输入特征进行运算、处理后,得到最终识别的结果,并通过NICE接口返回E203处理器当中,其主要包括如下三个部分,I2S模块、MFCC模块、神经网络模块以及数据流调度和系统控制部分。

  1. I2S模块:I2S模块主要用于将数字硅麦输入的串行信号缓存并转成并行数据输出到MFCC中,其硬件功能实现主要通过接口设计对输入输出信号定义的接口进行规范设计,并输出对硅麦的控制信号,数据缓存用于将输入的串行数据暂存、转化成并行数据,以及最后将并行数据输出的输出部分。

  2. MFCC模块:MFCC模块主要用于将输入的语音信号进行特征提取,转化成更易于神经网络识别的特征数据,此外,还通过SNR预测模块对输入语音信号的噪声场景进行区分。MFCC算法的实现主要分为预加重、分帧、FFT,梅尔滤波,以及SNR噪声预测算法。硬件功能的实现主要分为接口的设计、MFCC和SNR预测的算法实现,数据测试以及功能实现部分。

  3. 神经网络模块:神经网络模块主要用于将MFCC输出的特征信号通过前馈神经网络进行运算并输出最终的识别精度。在算法层次部分,神经网络模块主要分为卷积层、全连接(FC)层,以及之间的RELU、BN层,算法部分通过MATLAB搭建并训练得出识别精度,验证了模型的可行性,在低噪声场景下,为满足低功耗的需求,采用DOREFA量化二值化与近似计算单元相结合的方式,而在高噪声场景下,为满足抗噪声需求,采用带噪声训练与精确计算相结合的方式。硬件实现部分主要是将前馈神经网络进行电路上的设计与实现,主要分为神经网络算法的实现,包括卷积层、FC层、BN层以及RELU层的电路实现,权重、数据的存储以及数据调度。

  4. 控制模块:系统控制模块与数据调度主要负责控制整体的加速器系统结构以及各个功能模块之间的数据流调度。

E203处理器部分实现的功能主要通过C语言进行软件代码的编写,并在IDE上进行调试,语音识别加速器部分的功能实现主要通过Verilog进行编写,仿真后烧录到FPGA板上进行功能验证。两部分均完成后,通过Nuclei_Studio IDE将软件代码烧录到开发板上进行整体SoC的搭建及功能验证。

系统架构介绍

架构设计

在这里插入图片描述

图2 自适应噪声环境的超低功耗语音关键词识别系统架构设计框图

自适应噪声环境的超低功耗语音关键词识别系统架构设计框图如上图2所示,蜂鸟E203核通过系统存储总线访问FLASH存储,FLASH用于存放烧录进开发板的软件代码,此外,系统存储总线还连接JTAG接口用于外部的软件调试和代码的烧录。E203核还通过私有设备总线访问GPIO,GPIO外接按键中断以及OLED屏幕,以外部的控制输入及显示输出。处理器核还通过NICE协处理器接口访问语音识别加速器,并进行指令的写入与运算结果的读出。

语音加速器主要I2S模块、MFCC架构以及神经网络加速器模块组成,外部的语音输入通过数字硅麦接收,并将串行输入数据输入I2S模块,同时I2S模块输出数字硅麦的片选、声道选择等控制信号。

I2S模块由数据接收、异步FIFO、以及数据预处理三个部分组成。数据接收用于接收外部串行输入信号并进行移位寄存,输出32bit的并行数据,异步FIFO用于将输出32bit并行数据暂存,并同步到读时钟域,当读使能信号到来后,32bit的输出经过数据预处理,最终转化成13bit有效输出输入到MFCC模块当中。

MFCC模块的硬件架构主要由预加重、分帧、FFT、Mel滤波、以及SNR预测模块组成,各个模块架构主要负责实现对应的功能及算法(如基-2FFT、CODIC算法、SNR预测算法),模块之间除直接进行输入输出外,还有相应的存储RAM和输出RAM负责数据的调度。MFCC模块实现对语音输入的特征提取,并输出到神经网络加速器模块当中。

在神经网络加速器模块,首先需要在软件层次进行神经网络结构的确定、以及BWN网络模型参数的训练验证,在硬件架构层次上则要实现对应的前馈神经网络每层运算需要的算法以及整体的控制与数据调度。神经网络硬件架构主要分为网络层控制器、访存控制器、以及存储和计算单元,其中,网络层控制器负责架构整体的控制,当前层的确定以及不同层的切换。访存控制器在接收网络层控制器的控制信号后,负责将当前层所需数据从存储单元调度到计算单元,以及当前层计算完成后将运算完成的输出数据写回存储单元。存储单元主要分为数据存储RAM以及权重存储RAM,分别负责存储每一层所需的输入数据以及相应的权重。计算单元主要负责对应计算算法的实现,PE阵列实现数据与权重的卷积/二值,以及全连接运算,BN_RELU则用于实现对应的激活函数以及归一化函数。

其次,从低功耗角度出发,我们设计了复用的PE子计算,可适配完成卷积(二值)和全连接(二值全连接)计算,重新调整了神经网络加速器模块的数据调度方式,减少了整个电路的面积。

版图设计

对于语音识别加速器模块,我们还完成了后端版图设计,如下图3所示,具体的面积参数如下表1所示。电路综合后的功耗细节图如下图4所示,整体电路的功耗为6.70uW,其中神经网络加速器模块的功耗为3.66uW,MFCC模块功耗为1.07uW,I2S模块和其他模块功耗为0.45uW。图4(b)展示了电路中组合逻辑功耗、寄存器功耗以及SRAM功耗占比,可以看到访存功耗占比为67.6%,寄存器功耗占比为19.3%,组合逻辑功耗占比为13.1%,由此可见本电路实际的计算功耗占比较少,这得益于所采用的权重二值化处理方式,使得电路大量的乘法操作变为加法操作。

表1 版图参数
在这里插入图片描述
在这里插入图片描述

图3 神经网络加速器模块的VLSI实现版图设计
在这里插入图片描述
图4 神经网络加速器模块的 VLSI实现功耗占比

硬件加速器详细设计

高噪声环境——带噪声精确BWN神经网络

在高噪声场景中,语音信号的信噪比往往很低,因此,本系统采用精度较高的精确BWN神经网络,同时在训练集中加载了0dB的白噪声训练,实现噪声场景下的高精度。

低噪声环境——无噪声近似BWN神经网络

在低噪声场景中,输入的语音信号相对来说更为清晰,被系统识别到的难度更低,在电路实现中,满足性能要求前提下功耗是衡量电路设计的重要指标之一,完全可以采用加入近似计算单元的功耗BWN来设计,同时去除数据集中的白噪声,使用clean的数据集训练,最终识别精度并没有下降太多。该方案在不增加网络结构的复杂度,不增加网络深度和神经元个数的情况下,使系统在常开工作时的功耗更低。

由于神经网络具有天然容错性,有许多传统的近似乘法单元曾经被应用在DNN神经网络中,比如截断进位乘法器,共享乘法器,迭代对数乘法器等。虽然BWN网络权重已经量化到了1bit, 但是仍然保有继续优化的空间。在3×3的卷积核里,会有9个16bit的数据进行位运算,之后这9个数据再累加,输出卷积核最后的结果。9个数据的累加最终会得到一个最大为20bit的数据,对于一个20bit的数据来说,在其低位如果有部分信息丢失,其实对整个数据的整体精度影响不大,况且神经网络本身就带有一定的容错性,微小的误差可能并不会对网络的结果带来极大的变动,但是从硬件电路的实现角度来考虑,引入近似计算可较大地降低整个电路的功耗以及面积,十分具有研究价值,正是基于上述考量,来评估在加法运算中引入近似的可行性。

乘法运算涉及到移位、位运算和累加三个过程,因此能够实现近似的空间更大,对于纯累加的运算过程,能够使用近似的就是在单个加法器了,最常用的加法器近似手段则是LOA,即Low Or Adder,低位或门加法器,用逻辑或门来替换低位的加法器来实现近似,其电路结构如图5所示:
在这里插入图片描述

图5 LOA加法器

面向多信噪比的KWS神经网络设计

在前面已经提出了本系统的两种神经网络,在本节中,将对网络中的主要模块进行可重构复用设计,可以从模块级了解本文的神经网络的具体工作模式。由前文中可知神经网络算法中在面向高信噪比语音环境时,为了降低功耗,使用了LOA近似计算单元。具体结构如图6。
在这里插入图片描述

图6 CNN加速器架构图

如图6所示的是在语音关键词分类模块中,语音数据和权重数据分别存储在SRAM中,当SNR预测模块得到的是低信噪比的噪声环境时,语音数据经过可重构PE_ARRAY阵列模块进行网络计算。当SNR预测模块得到的结果是高信噪比时,语音数据经过可重构PE_ARRAY阵列模块进行网络计算。

如图6所示,硬件中有三片sram,分别存储语音数据,在高信噪比环境下的权重1和在低信噪比环境下的权重2。Memory controller模块用于生成地址和计算时分别调用SRAM中的具体数据。Layer controller是使用状态机控制当前计算网络所处层级。可重构PE_ARRAY阵列模块用于网络计算,共有BN_RELU模块用于每层卷积操作之后对数据进行归一化处理。

软件实现

自定义指令的编写

软件实现最关键的问题是实现RISC-V自定义指令并可以确实控制蜂鸟核里nice接口连接的协处理器,具体的语音识别加速器的设计在上一节已被充分介绍,蜂鸟E203的开源核给我们拓展协处理器预留了nice接口,并且学习资料丰富,根据预留的拓展接口以及相应的通信协议,我们成功把语音识别加速器挂载到核上面,具体不再赘述。

自适应噪声切换

在实现噪声模块功能这方面,我们团队提出了两种方案,分别是根据SNR预测在硬件上设计电路的硬件方案以及在软件上设置阈值来检测环境的软件方案。

硬件方案的具体思路是在运算时,累加一段时间区间内的语音信号能量,噪声信号实际上就是能量的高低,噪声越高信号中也就含有越多的能量,硬件方案正是基于这个思路来检测环境噪声强度。

而软件方案则是借助我们系统内蜂鸟E203处理器,利用处理器的灵活控制的特点,外接声音检测模块,并设置一个噪声阈值,当模块检测到外部环境中的噪声超过这个阈值时,给处理器发送一个低信号,而在处理器中则记录低信号出现的次数,一段时间内,如果出现低信号的次数超过了处理器中设置的高噪声的阈值,那么可以认为当前环境噪声较高,需要切换工作模式。

系统实物图

在这里插入图片描述

致谢

在此表示衷心的感谢芯来科技设立的RISV-MCU 社区,社区中丰富的学习资料帮助我们团队快速上手了蜂鸟E203的初步使用,清晰的文件分类让我们查阅学习非常方便,跟社区中其他参赛队伍交流也使得我们受益良多。

同时特别感谢社区中的胡灿等其他老师,我们团队在设计这个系统的过程中,遇到了许多问题,胡灿老师平易近人,很耐心地解答问题,让我们学到了很多,帮助我们最终完成了整个系统。

感谢芯来科技的创始人胡振波先生,胡先生为了RISC-V在国内的推广殚精竭虑,特别编写了基于RISC-V的开源蜂鸟核E203,十分令人倾佩,我们团队购买了先生编写的《嵌入式开发快速入门》和《教你设计CPU》两本书,学习书中的内容让我们团队在应用蜂鸟核时更加得心应手。

在项目设计之初,我们团队也遇到很多问题,能解决这些问题,得益于队友之间的信任和鼓励,也得益于大赛组委会给大家提供了这样的优秀平台。希望集创赛可以越办越好!

作品内容来源于Hey Siri,转载请标明出处。欢迎大家参加极术社区组织的有奖征集|秀出你的集创赛作品风采,免费电子产品等你拿~活动,10月1日截止~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/112869.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数字孪生技术:金融业合规与自动化的未来

在当今数字化时代,金融行业正积极探索数字孪生技术,以实现更高效的运营和更好的客户体验。数字孪生是一种将实体世界的对象、过程和系统数字化为虚拟模型的技术,金融机构正在充分利用它带来的众多优势。 1. 风险管理与模拟 数字孪生模型可用…

docker部署minio并使用springboot连接

需求:工作中,在微信小程序播放时,返回文件流并不能有效的使用,前端需要一个可以访问的地址,springboot默认是有资源拦截器的,但是不适合生产环境的使用 可以提供使用的有例如fastdfs或者minio,这…

Flutter 05 组件状态、生命周期、数据传递(共享)、Key

一、Android界面渲染流程UI树与FlutterUI树的设计思路对比 二、Widget组件生命周期详解 1、Widget组件生命周期 和其他的视图框架比如android的Activity一样,flutter中的视图Widget也存在生命周期,生命周期的回调函数体现在了State上面。组件State的生命…

QT实现在线流媒体播放平台

文章目录 QT实现在线流媒体播放平台简介开发视频ffmpeg下载SimpleVideoPlayer.hSimpleVideoPlayer.cpp 开发音频添加功能打开文件夹播放暂停播放上下一首选择倍速 效果展示项目下载 QT实现在线流媒体播放平台 简介 Qt是一种流行的C开发框架,它提供了用于构建图形用…

FPGA_Signal TapII 逻辑分析仪 在线信号波形抓取

FPGA_Signal TapII 逻辑分析仪 在线信号波形抓取 由于一些工程的仿真文件不易产生,所以我们可以利用 quartus 软件自带的 SignalTap 工具对波形进行抓取 对各个信号进行分析处理,让电子器件与FPGA进行正常通讯工作,也验证所绘制的波形图是否一…

Scala库用HTTP爬虫IP代码示例

根据提供的引用内容,sttp.client3和sttp.model库是用于HTTP请求和响应处理的Scala库,可以与各种Scala堆栈集成,提供同步和异步,过程和功能接口。这些库可以用于爬虫程序中,用于发送HTTP请求和处理响应。需要注意的是&a…

JavaScript从入门到精通系列第二十七篇:详解JavaScript中的包装类

大神引荐:作者有幸结识技术大神孙哥为好友获益匪浅,现在把孙哥视频分享给大家 孙哥链接:孙哥个人主页 作者简介:一个颜值99分,只比孙哥差一点的程序员 本专栏简介:话不多说,让我们一起干翻JavaS…

vue自定义组件:中线分割拖动盘

在GitHub上可以找到类似的组件,比如4年前发布的vue2版本的 Vue Split Pane, 但是我还是自己写了一个类似的: 组件效果: 特点: 不是照抄别人的。同时支持vue2、vue3(组件内部使用选项式API风格&#xff09…

不一样的网络协议-------KCP协议

1、kcp 的协议特点 1.1、RTO 不翻倍 RTO(Retransmission TimeOut),重传超时时间。tcp x 2,kcp x 1.5,提高传输速度 1.2、选择重传 TCP丢包时会全部重传从该包开始以后的数据,而KCP选择性重传,只重传真正丢失的数据包…

同为科技(TOWE)自动断电倒计时定时桌面PDU插排

在每个家庭中,插排插座都是必不可少的电源设备。随着各种电器的普及应用和生活节奏的加快,人们对插排也有着多样化的需求,比如在插排中加入定时开关、自动断电、断电记忆、倒计时等等功能,让原本不支持智能家居的用电器秒变智能。…

DL4J无法下载MNIST数据集解决 Server returned HTTP response code: 403 for URL解决方法

报错情况 报错如下: 16:45:41.463 [main] INFO org.nd4j.nativeblas.Nd4jBlas - Number of threads used for OpenMP BLAS: 6 16:45:41.497 [main] INFO org.nd4j.linalg.api.ops.executioner.DefaultOpExecutioner - Backend used: [CPU]; OS: [Windows 10] 16:4…

Android 驱动学习调试

1 Android 驱动代码编译 参考https://www.sharetechnote.com/html/Linux_DeviceDriver_Programing.html#Device_Driver_HelloWorld编译ko文件调试驱动代码&#xff0c;将ko文件push到手机上验证 相关C文件testdriver.c #include <linux/init.h> #include <linux/mod…

云安全—kubelet攻击面

0x00 前言 虽然说总结的是kubelet的攻击面&#xff0c;但是在总结攻击面之前还是需要去了解kubelet的基本原理&#xff0c;虽然说我们浅尝即止&#xff0c;但是还是要以能给别人讲出来为基本原则。 其他文章: 云安全—K8s APi Server 6443 攻击面云安全—K8S API Server 未授…

08-Docker-网络管理

Docker 在网络管理这块提供了多种的网络选择方式&#xff0c;他们分别是桥接网络、主机网络、覆盖网络、MACLAN 网络、无桥接网络、自定义网络。 1-无桥接网络&#xff08;None Network&#xff09; 当使用无桥接网络时&#xff0c;容器不会分配 IP 地址&#xff0c;也不会连…

SpringCloud 微服务全栈体系(十)

第十章 RabbitMQ 一、初识 MQ 1. 同步和异步通讯 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。 异步通讯&#xff1a;就像发邮件&#xff0c;不需要马上回复。 两种方式各有优劣&#xff0c;打电话可以立即得…

Sci Immunol丨Tim-3 适配器蛋白 Bat3 是耐受性树突状细胞

今天和大家分享一篇发表于2022年3月的文章&#xff0c;题目为“Tim-3 adapter protein Bat3 acts as an endogenous regulator of tolerogenic dendritic cell function”&#xff0c;发表在《Sci Immunol》杂志上。文章主要研究了Tim-3和其适配蛋白Bat3在调节免疫应答中的作用…

以八数码问题为例实现A*算法的求解(未完结)

八数码&#xff1a; 在一个 33 的网格中&#xff0c;1∼8 这 8 个数字和一个 x 恰好不重不漏地分布在这 33 的网格中。 例如&#xff1a; 1 2 3 x 4 6 7 5 8在游戏过程中&#xff0c;可以把 x 与其上、下、左、右四个方向之一的数字交换&#xff08;如果存在&#xff09;。…

ssh远程登录服务

目录 1.1版本协商阶段 1.2密钥和算法协商阶段 1.3认证阶段(两种认证方法): 2.1.安装ssh 2.2.配置文件分析: 3.1配置ssh监听端口号 3.2拒绝以root身份登录服务器 3.3虚拟机之间实现免密登录 3.4xshell免密登录 SSH (Secure Shell Protocol,安全壳程序协议)由IETF的网络…

厦门万宾科技智能井盖监测仪器的作用如何?

越来越多的人们希望改善生活&#xff0c;走出农村走出大山&#xff0c;前往城市之中居住。由此城市的人口和车辆在不断增加&#xff0c;与之而来的是城市的交通压力越来越大&#xff0c;时常会出现道路安全隐患&#xff0c;这给城市未来发展和智慧城市建设都带来一定的难题&…

电脑开机显示器不亮?正确操作分享(4个方法)!

“我的电脑最近不知道为什么&#xff0c;每次开机后显示器都不亮&#xff0c;重启也没反应&#xff0c;有什么方法可以解决该问题吗&#xff1f;快帮帮我&#xff01;” 随着电脑在我们日常生活和工作中的广泛应用&#xff0c;出现问题时需要及时解决。在众多的电脑问题中&…
最新文章