版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于TinyML的声音识别检测技术的实现案例分析目录TOC\o"1-3"\h\u25122基于TinyML的声音识别检测技术的实现案例分析 159621.1实验环境 1144471.2数据集 1235751.2.1摔倒数据集 2166461.2.2噪音数据集 2130381.3数据预处理 325081.3.1特征提取 449641.4卷积神经网络模型 5205311.4.1模型结构介绍 5165001.4.2模型中的参数 885341.4.3模型训练结果 9145091.5模型转换 961181.5.1转换为TensorFlowLite模型 9207181.5.2转换为C文件 10实验环境本文的算法通过python3.7、TensorFlow2.4实现,IDE为PyCharm。所使用的计算机配置如表3.1所示。表3.1计算机配置配置电脑MacBookPro(15-inch,2018)操作系统macOSBigSur11.3.1CPU英特尔酷睿i7-8750H@2.20GHz内存16GDDR42400MHz显卡AMDRadeonPro555X+IntelUHDGraphics630数据集本文所使用的数据集共有1212条音频数据,其中摔倒数据集包含309条数据,噪音数据集包含903条数据,摔倒数据与噪音数据大约为1:3。摔倒数据的标签为“fall”,噪音数据的标签为“noise”,具体信息如表3.2所示。表3.2数据集表序号类型标签数据量1摔倒fall3092非摔倒noise903合计1212本文选用数据集的80%作为训练集,20%作为验证集,因为数据数量少的原因,不单独使用测试集,最后的测试随机选择数据集的30%作为测试集进行测试。摔倒数据集据我了解,国内并没有人做过基于声音的摔倒检测这方面的研究,网上也没有开源的关于摔倒声音的数据集,因此我们大量的工作都放在了收集摔倒声音的数据上。最初通过网络收集了约700条摔倒音效,但是大多数都不是真实的摔倒声音,因此我们从网上收集的数据中筛选出我们认为是真实的摔倒声音,并且使用手机和智能手表等设备录取真实的摔倒声音。我们的摔倒数据集共采集了309条摔倒声音,其中300条真实的摔倒声音,9条从网络上找到的认为是摔倒的声音。真实的摔倒声音是由5位志愿者提供的,其中2名男性,3名女性,摔倒时将智能手机拿在手上模拟手环位置来录取声音数据,具体信息如表3.3所示。表3.3摔倒数据集表序号性别年龄身高(cm)体重(kg)录制条数设备1男2317354246iphone12promax2男23177556iphoneX男231775529applewatchseries43女221553914iphone114女22163523iphone8plus5女24165472iphone116网络未知未知未知9未知合计309噪音数据集噪音数据集中共有903条数据,其中包含城市环境声音、敲击拍打声和语音指令等声音,其中敲击拍打声中有131条为实录,包含拍打桌面、拍打门、拍打木材、拍打篮球等声音;58条敲击拍打声为网络收集;56条语音指令来自谷歌开源的语音指令数据集,其中包含yes、no、down、go、left、right、stop和up等指令;658条城市声音数据来自UrbanSound8K数据集来模拟生活中可能遇到的噪音。本文所使用噪音数据集信息如表3.4所示。表3.4噪音数据集表序号数据类型数据量来源1城市环境音658UrbanSound8K数据集2敲击拍打声131实录3敲击拍打声58网络4语音指令56谷歌的语音指令数据集合计903UrbanSound8K数据集ADDINEN.CITE<EndNote><Cite><Author>Salamon</Author><Year>2014</Year><RecNum>33</RecNum><DisplayText><styleface="superscript">[18]</style></DisplayText><record><rec-number>33</rec-number><foreign-keys><keyapp="EN"db-id="zatzs25ahpev9redzw85pvsf9xzverevttsv"timestamp="1621065437">33</key></foreign-keys><ref-typename="Book">6</ref-type><contributors><authors><author>Salamon,Justin</author><author>Jacoby,Christopher</author><author>Bello,JuanPablo</author><author>Acm,</author></authors></contributors><titles><title>ADatasetandTaxonomyforUrbanSoundResearch</title><secondary-title>Proceedingsofthe2014AcmConferenceonMultimedia</secondary-title></titles><pages>1041-1044</pages><dates><year>2014</year></dates><isbn>978-1-4503-3063-3</isbn><accession-num>WOS:000482104200186</accession-num><urls><related-urls><url><GotoISI>://WOS:000482104200186</url></related-urls></urls><electronic-resource-num>10.1145/2647868.2655045</electronic-resource-num></record></Cite></EndNote>[18]是目前主流的城市环境声音的开源数据集,一共有8732条数据,其中包含街道音乐声、儿童玩耍声、枪声、狗叫声、空调声、引擎空转声、手提钻、汽车鸣笛声、警笛声和钻孔声共10个分类,所有文件的采样频率均为44.1kHz。本文采用城市环境声音来模拟平时可能遇到的环境音当噪音数据。数据预处理本文后续处理中音频文件要求为wav格式,音频的采样频率要求为16kHz,量化位数要求为16bit,因此对于收集到的数据集,首先使用ffmpeg工具对音频进行重采样和量化将其格式化为16kHz的采样频率和16bit的量化位数,同时将其转换为wav格式的音频文件。ffmpeg可以对音频和视频文件进行重采样和量化,并且设置文件格式,并且是一个开源的软件ADDINEN.CITE<EndNote><Cite><RecNum>34</RecNum><DisplayText><styleface="superscript">[19]</style></DisplayText><record><rec-number>34</rec-number><foreign-keys><keyapp="EN"db-id="zatzs25ahpev9redzw85pvsf9xzverevttsv"timestamp="1621069854">34</key></foreign-keys><ref-typename="WebPage">12</ref-type><contributors></contributors><titles><title>百度百科:ffmpeg</title></titles><dates></dates><publisher>百度</publisher><urls><related-urls><url>/item/ffmpeg/2665727?fr=aladdin#reference-[1]-856526-wrap</url></related-urls></urls><custom2>2021-05-15</custom2></record></Cite></EndNote>[19]。将音频文件重采样和量化之后,使用tensorflow.audio库所提供的decode_wav方法将wav音频文件解码成float类型的张量(tensor),该方法会将音频振幅取值区间从-32768到32767的区间归一化成-1.0到1.0的区间,并且如果音频长度大于1秒则只会截取其中的16kHz即1秒长度的音频。图3.1展示了其中4个音频文件解码后的波形图,其中上方两个是摔倒的音频,下面两个是噪音的音频。波形图的横坐标是时间,单位是毫秒,纵坐标是归一化之后的振幅。图3.1波形图特征提取本文所使用的特征提取使用2.3.3中所提到的梅尔语谱,经过上述解码操作后,生成的音频长度全部都小于等于1秒(16kHz),为了进行短时傅里叶变换(STFT),首先要确保所有的音频长度都为16kHz,因此要对长度小于16kHz的张量进行零填充,即对长度小于16kHz的张量添上0使其长度达到16kHz。然后使用tensorflow.signal所提供的stft方法,该方法默认使用Hann窗口对零填充后的张量进行短时傅里叶变换操作,其中主要参数解释如下:frame_length:480(帧长=帧大小×采样频率,即本文采用的帧大小为30ms);frame_step:320(帧步长=滑动尺寸×采样频率,即本文采用的滑动尺寸为20ms);fft_length:即为NFFT,FFT的点数,默认为大于帧长的最小的2的幂,本文为512;经过短时傅里叶变换后再对结果取绝对值就产生了语谱图,因为傅里叶变换会为每个频率产生复数,但我们关心的是总能量,因此我们将两个分量的平方求和,再开平方来获得每个频率桶的幅度,这样所获得的频率信息就为NFFT的二分之一。因此本文所获得语谱图(spectrogram)的大小为49×256。再将所获的的语谱图乘上梅尔标度(melscale),本文所设置的滤波器组为40,最后获得对应的梅尔语谱,本文最后获得的梅尔语谱的大小为49×40。图3.2展示了摔倒声音的语谱图和梅尔语谱,左图为语谱图,右图为梅尔语谱。语谱图的横坐标为时间,纵坐标为频率,坐标点值表示声音能量大小,使用颜色表示该点的能量值大小,颜色越深代表该点声音能量越强。图3.2语谱图与梅尔语谱卷积神经网络模型模型结构介绍卷积神经网络在图像方面具有较好的训练效果,因此本文采用卷积神经网络模型来训练。本文的神经网络模型总共有9层(具体结构如表3.5所示),各层如下:Resizing:将输入的图像大小缩小为32×32Normalization:将输入图像的每一个像素通过期望和方差进行归一化处理Conv2D:卷积层,对图像进行卷积操作MaxPooling2D:池化层,对图像进行最大池化操作Conv2D:卷积层,对图像进行卷积操作MaxPooling2D:池化层,对图像进行最大池化操作Flatten:将2维的输入数据展平成1维,从卷积层到全连接层的过度Dense:全连接层,同时在该层有一个Dropout防止过拟合Dense:输出层,激活函数选用Sigmoid函数进行输出表3.5卷积神经网络结构表53层数层超参数输出形状input无(49,40,1)1Resizing(32,32)(32,32,1)2Normalization无(32,32,1)3Conv2D激活函数:ReLU卷积核个数:128卷积核大小:3×3(30,30,128)4MaxPooling2D过滤器大小:2×2(15,15,128)5Conv2D激活函数:ReLU卷积核个数:256卷积核大小:3×3(13,13,256)6MaxPooling2D过滤器大小:2×2(6,13,256)7Flatten无(9216)8Dense激活函数:ReLU神经元个数:128(128)Dropout0.5(128)9Dense激活函数:Sigmoid神经元个数:1(1)其中Resizing层和归一化(Normalization)层并不参加训练,Resizing层的主要作用是缩小图片的大小,以减少参数的个数来加快训练速度,表3.6展示了是否有Resizing层对训练结果的影响:表3.6Resizing层对训练结果的影响是否有Resizing层训练时间(s)正确率是14.2296.96%否28.4897.33%以上实验数据是对20次训练结果取平均值所得,实验结果表明采用Resizing层的训练时间大约为不采用Resizing层训练时间的一半,且最后的正确率只降低了约0.3%,因此可以得出结论:Resizing层可以在几乎不降低正确率的情况下很大程度地加快训练的速度。归一化(Normalization)层将输入图像的每一个像素通过期望和方差进行归一化处理,其主要作用是方便梯度下降法更快地找到最小值,使梯度下降的过程更加平缓,收敛速度更快。举一个简单的例子,设自变量为x1和x2,因变量为y,θ1 y=θ1x图3.3展示了未归一化和归一化的梯度下降过程,因为未归一化的x1和x图3.3梯度下降过程表3.7归一化对训练结果的影响是否归一化训练时间(s)正确率是14.2296.96%否16.3396.21%以上实验数据是对20次训练结果取平均值所得,实验结果表明使用归一化处理后训练速度和正确率都比未归一化处理有所提升。Dropout是正则化(Regularization)方法的一种,其主要作用是预防过拟合,一般在全连接层使用,卷积层因为参数相对较少的原因并不使用。使用Dropout会随机让该层的几个神经元失活不参加训练,其参数表示随机失活神经元的比例,越高表示失活的比例越高,参数大小的一般设置为0.5,随后根据过拟合程度进行相应的增加或减少。本文所使用的优化器是Adam优化算法,常见的优化器有动量(momentum)、RMSProp和Adam等,一般默认使用Adam优化算法。本文还采用了Earlystopping方法,Earlystopping也是正则化方法的一种,用于预防过拟合,设置其参数patience为2,当训练结果连续2个epoch没有提升就会提取停止训练以防过拟合的发生。模型中的参数通过tensorflow.keras.models提供的summary方法可以查看模型中的一些参数情况,图3.4展示了模型的summary。图中的参数是指模型中的变量,即权重(weight)和偏差(bias),正则化中的3个参数并不参加训练。卷积层参数数量计算公式如下: param=(f×f×c+1)×n 其中f为卷积核的大小,c为输入数据的通道数,1为偏差的个数一般为一个,n为卷积核的个数。全连接层参数数量计算公式如下: param=(x+1)×n 其中x为输入数据的个数,1为偏差的个数,n为神经元的个数。图3.4模型的summary最后本文使用的epoch大小为10,batch的大小为32。epoch是指使用训练集的全部数据对模型进行一次完整的训练;batch是指使用训练集的一小部分样本对模型权重进行一次反向传播的参数更新。因此本文每个epoch会对权重更新31次。模型训练结果最终模型测试集的准确率大约为98%,损失函数大约为0.05,图3.5展示了训练过程中准确率的变化曲线,其中蓝色曲线是训练集的准确率变化,橙色曲线是验证集的准确率变化;图3.6展示了训练过程中损失函数的变化曲线,其中蓝色曲线是训练集的损失函数的变化,橙色曲线是验证集的损失函数的变化。图3.5模型训练过程的准确度图3.6模型训练过程的损失函数模型转换转换为TensorFlowLite模型为了能让模型部署到微型控制器中,可以使用TensorFlowLite,TensorFlowLite包括两个主要组件ADDINEN.CITE<EndNote><Cite><RecNum>28</RecNum><DisplayText><styleface="superscript">[14]</style></DisplayText><record><rec-number>28</rec-number><foreign-keys><keyapp="EN"db-id="zatzs25ahpev9redzw85pvsf9xzverevttsv"timestamp="1620920240">28</key></foreign-keys><ref-typename="WebPage">12</ref-type><contributors></contributors><titles><title>TensorFLowLite:MLformobileandIoT</title></titles><dates></dates><publisher>TensorFlow</publisher><urls><related-urls><url>/lite</url></related-urls></urls><custom2>2021-05-13</custom2></record></Cite></EndNote>[14]:TensorFlowLite解释器,它可以在微控制器、手机和嵌入式设备等低功耗设备上运行经过TensorFlowLite转换器优化的模型。TensorFlowLite转换器,它可以引入优化器以在提高模型性能同时减小二进制文件的大小,并且可以加将TensorFlow模型转换为方便TensorFlowLite解释器使用的格式ADDINEN.CITE<EndNote><Cite><Author>王梓儒</Author><Year>2020</Year><RecNum>39</RecNum><DisplayText><styleface="superscript">[20]</style></DisplayText><record><rec-number>39</rec-number><foreign-keys><keyapp="EN"db-id="zatzs25ahpev9redzw85pvsf9xzverevttsv"timestamp="1621479975">39</key></foreign-keys><ref-typename="Thesis">32</ref-type><contributors><authors><author>王梓儒</author></authors><tertiary-authors><author>王奇志,</author></tertiary-authors></contributors><titles><title>深度目标检测模型的边缘计算方案研究</title></titles><keywords><keyword>神经网络</keyword><keyword>网络量化</keyword><keyword>轻量化网络设计</keyword><keyword>边缘设备</keyword></keywords><dates><year>2020</year></dat
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第十五课 驱散忌妒的阴云教学设计初中心理健康北师大版河南专版七年级全一册-北师大版河南专版
- 国家教学设计初中音乐人音版七年级下册-人音版
- 2026春季山东济宁市鱼台邮政校园招聘备考题库附答案详解(基础题)
- 2026广东警官学院招聘事业单位人员5人备考题库有答案详解
- 2026重庆市南岸区海棠溪街道办事处公益性岗位招聘14人备考题库含答案详解(综合题)
- 2026广西南宁隆安县城管大队招聘城管协管员1人备考题库带答案详解(培优)
- 2026贵州铜仁市第一批市本级城镇公益性岗位招聘26人备考题库含答案详解(夺分金卷)
- 2026天津港保税区临港社区卫生服务中心派遣制人员招聘5人备考题库附答案详解
- 2026湖南长沙市雨花区育新第三小学春季实习教师招聘备考题库附答案详解(巩固)
- 2026国家统计局兵团第十四师调查队招聘1人备考题库(新疆)带答案详解
- 2026年宣传部遴选公务员笔试试题含答案(宣传文化岗)
- 毕业设计(论文)-两辊式轧钢机设计
- 2026春小学苏少版(2024)二年级下册美术每课教案(第一、二单元)
- 2026年社工考试《初级社会工作综合能力》真题及答案
- 四年级下册语文,第1单元和第2单元的小测试的卷子
- 中建集团海外市场开拓战略规划
- 财政部人社部就业补助资金管理办法2026版解读
- 2026四川成都天府新区投资集团有限公司招聘产业投资岗等岗位47人考试参考题库及答案解析
- Songmont山下有松品牌手册
- 2026年吉林水利电力职业学院单招职业技能考试题库附答案详解(精练)
- 吸塑厂生产安全管理制度
评论
0/150
提交评论