自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

谈谈音频开发

专注于音频软件开发的方方面面

  • 博客(78)
  • 收藏
  • 关注

原创 三个小白是如何在三个月内搭一个基于kaldi的嵌入式在线语音识别系统的

前面的博客里说过最近几个月我从传统语音(语音通信)切到了智能语音(语音识别)。刚开始是学语音识别领域的基础知识,学了后把自己学到的写了PPT给组内同学做了presentation(语音识别传统方法(GMM+HMM+NGRAM)概述)。一段时间后老板就布置了具体任务:在我们公司自己的ARM芯片上基于kaldi搭建一个在线语音识别系统,三个人花三个月左右的时间完成。由于我们都是语音识别领域的小白,要求可以低些,就用传统的GMM-HMM来实现。说实话接到这个任务我们心里是有点没底的,不知道能不能按时完成,毕竟我们

2019-09-08 21:58:23 2622 1

原创 谈谈我开发过的几套语音通信解决方案

要想快速运行,data和code最好都放在内部memory,但是内部memory的空间又特别小,DTCM和PTCM都只有几十K Word(DSP上的基本单位是Word,一个Word是两个字节),memory不仅不能随意用,在写代码时时时刻刻都要注意省内存,还要优化(经常遇到的是开发新feature,memory不够了,先优化memory,然后再开发,memory都是一点一点抠出来的),最后优化也抠不出memory了,怎么办呢?既有在ARM上开发的,又有在DSP上开发的,总之各有特色。

2018-07-08 22:45:45 7980 1

原创 安卓智能手机芯片上audio的bringup

对于智能手机来说,audio的基本功能如下:codec播放音乐,codec APP录音,codec电话,蓝牙播放音乐,蓝牙电话,codec VoIP电话,蓝牙 VoIP电话。上行时蓝牙耳机采集音频数据通过蓝牙空口发给蓝牙芯片,蓝牙芯片通过PCM bus 和ADMA把音频数据送给ADSP,ADSP处理后送给AP。做bringup时有个相对的先后顺序,比如调IPC通常是最先做的,因为它不仅是核间通信,ADSP上的log以及dump音频数据等debug手段也要靠它,可以说是基础设施了,它好了才可以调其他功能。

2025-04-23 08:08:27 890

原创 Audio DSP boot 过程

中断有中断向量表,表里放的是每个中断的中断服务程序(ISR)。下面是几种场景下的入口地址,主要包括boot时的入口地址(图中定义为0x10,即boot时ADSP从地址0x10处开始运行,然后调函数_boot)、产生异常(exception)时的入口地址(图中定义为0x60,即产生异常时ADSP从地址0x60处开始运行,然后调函数_critical_handler),发生中断时的入口地址(图中定义为0x70,即发生中断时ADSP从地址0x70处开始运行,然后调函数_common_handler)。

2025-04-08 08:36:11 835

原创 Audio DSP 链接脚本文件解析

PROVIDE(__DDR_CODE_CACHED_START = ABSOLUTE(.))就表示定义个一个全局变量__DDR_CODE_CACHED_START,用它来指定要cached的code的起始地址,这个起始地址是用定位符获取的。蓝框7和蓝框8都是放data,只不过一个放的是常量等,一个放的是未初始化的。Elf文件是可执行链接文件,是执行链接的产物(编译后的产物是*.o),elf文件可以在CEVA的IDE集成开发环境上运行,但是不能在芯片上运行。再来看图4,它是关于ROM的。

2025-03-26 08:00:00 1121

原创 智能手表音乐播放功耗的优化

音乐播放用到的memory包括AP上的DDR(ASIC设计时就要求ADSP能访问AP的DDR),ADSP上的ITCM和DTCM,以及audio子系统上的SRAM。4,当播放蓝牙音乐时,即使用了前面的一二三点,AP也不能长时间的睡下去,因为BT Host模块在AP上,它要周期性的接收从ADSP发过来的SBC码流,做A2DP等处理后再通过IPC送给BT Controller。3,增大AP每次发给ADSP的音乐流的大小。经过以上的几点优化后,不管是用扬声器播放音乐,还是播放蓝牙音乐,功耗都会有明显的下降。

2025-03-12 08:00:00 919

原创 芯片上音频相关的验证

一般ASIC内部会有专门的验证工程师做一轮验证,也会让软件工程时做一轮验证(做芯片验证是芯片公司里软件工程师的主要工作之一,出一款新芯片就要做一次芯片验证),均OK后才会去流片。所以在平台上跑之前要做好各种充分的准备,跑一次像一次,得到想要的结果,不然会很浪费时间的。音频中会用到各种memory,包括片内的(ITCM, DTCM)以及片外的(DDR, SRAM, ROM等)。如果收到,相应的bit为1,这时再去检查有没有进中断服务程序,如果进了,说明ADSP给AP的IPC是好的。

2024-10-28 07:56:43 1434 1

原创 在audio DSP中如何做软件固化

从ROM的只读特性知道放进ROM的code就不能改动了,因此放进ROM的code是经过充分验证的不会再改的代码,在音频领域主要是一些非常成熟的算法的代码,比如MP3解码算法的代码就适合放进ROM里。即以前MP3解码的code和其他的code是放在一起的,以前MP3解码的data和其他的data是放在一起的,现在要把它们拿出来放在一个独立的区域。ROM里的函数调用函数memcpy()时,函数地址还是做ROM时的,可是后面随着软件的开发,memcpy()在RAM上的地址变了。上面六步就是把软件模块固化的过程。

2024-07-09 08:42:07 818

原创 蓝牙HFP协议推荐的语音丢包补偿算法浮点实现的定点化

不仅找到了,而且还是算平方根的倒数的(Word32 Isqrt(Word32 L_x),输入是一个32位的值,输出是Q0.31的值),这样除法就变成了乘法。在定点化的过程中,每一步定点化时都要比较定点的结果和浮点的结果,确保误差在很小的范围内,通常不超过1。代码中可以看出x2,y2均是32位的,相乘后很可能超出32位,而Isqrt()的输入是32位的,不能直接使用,需要做些变形,变成 m *从图上可以看出,在做丢包补偿时,定点的和浮点的实现部分PCM值有误差,但误差都是在1范围内,这是可以接受的。

2024-03-21 12:29:06 1397 1

原创 飞桨paddlespeech语音唤醒推理C INT8 定点实现

激活值的分布范围一般都比较广, 这种情况下如果直接使用最大值非饱和量化, 就会把离散点噪声给放大从而影响模型的精度,最好是找到合适的阈值|T|,将|T|/127作为量化scale,把识别率等指标的降幅控制在一个较小的范围内,这就是饱和量化。这个方法用的是饱和量化。发现它不是一个纯定点的实现,即里面有部分是float的,当时觉得里面最关键的权重和激活值都是定点运算了,部分浮点运算可以接受, 我也先做一个非纯定点的实现,把参数个数较少的bias用浮点表示。在函数里根据激活值的量化scale只做激活值的量化。

2024-01-31 11:28:19 1353

原创 智能手表上的音频(五):录音

从图看出,音频帧也分两部分:帧头和帧内容。帧头占一个字节(8个bit),各个比特的含义已在图中表示出来,其中P表示0,FT占4个比特,从二进制的0000到0111,共8个值,对应AMR-NB的8种码率。从上图看出,录音的音频数据是从ADSP-CP的sharememory里取的(ADSP-CP的sharememory放着上下行的音频数据)。从上图看出,每隔固定时长从驱动获得48k的PCM数据,如要保存成WAV格式就重采样成16k,如要保存成AMR格式,不仅重采样成8K, 而且好要做AMR-NB编码得到码流。

2023-12-18 07:51:29 1251

原创 智能手表上的音频(四):语音通话

从上图可以看出上行要经过audio driver / resampler / VE(AEC/ANS/AGC) / encoder / IMS等模块,下行要经过IMS / decoder / VE(ANS/AGC) / resampler / mixer / audio driver等模块。7) ADSP给AP发DISABLE_ADSP_STREAM_ACK,告诉停止ADSP上的语音流是否OK。9) CP给AP发DISABLE_CP_STREAM_ACK,告诉停止CP上的语音流是否OK。

2023-11-30 07:36:29 2082 2

原创 智能手表上的音频(三):音频文件播放

ADSP没有音频数据时又会通过DATA_REQ向AP要音频数据,AP收到后会向ADSP发送音频数据,当SBC码流的字节数达到A2DP_DATA_REQ请求的个数时又会给AP发A2DP_DATA_REQ_ACK。4) AP收到ADSP发来的DATA_REQ后就会给ADSP回DATA_REQ_ACK,带上音频数据(AP把音频数据放在双方都能访问的share memory里,实际上在命令里带上的是这块音频数据在share memory里的起始地址, ADSP收到命令后从这个起始地址处拿音频数据)。

2023-11-08 08:30:00 958

原创 智能手表上的音频(二):驱动

BT下的驱动相对内置codec下的,ADMA等做些值的修改,主要调ASSP。调驱动时首先调的就是AP与ADSP之间的IPC,确保AP和ADSP之间通信正常,ADSP的log输出正常,能正常dump音频数据,在IPC好的基础上再去调其他的。在一个loop里,ADSP先从上图中的Play buffer里取CP放进去的要播放的语音数据,然后从ADSP audio buffer里取采集到的语音数据,采集到的语音数据经处理(比如重采样)后送到上图中的Record Buffer里,最后给CP发一个IPC中断。

2023-10-18 08:30:00 842

原创 智能手表上的音频(一):架构

SRC是各种采样率(8k / 16k / 44.1 k /48k等)的转换,以前写过专门的文章,具体见以下文章(不同的是少了一些外设(在手表这种产品形态下就不需要有线耳机和听筒等了),同时把外置codec芯片换成了内置codec,即把codec芯片集成到SOC里面了。有专门的codec芯片厂商,他们把codec芯片的功能做的比较丰富。)介绍了安卓智能手机上的音频。相对智能手机而言,相同的是依旧有AP/ADSP/CP,不同的是不再用安卓系统,同时音频外设只有内置codec上的麦克风和扬声器,以及蓝牙。

2023-09-25 08:30:00 832

原创 飞桨paddlespeech语音唤醒推理C定点实现

即算出的浮点的fbank值作为浮点实现模型的输入,将浮点的Fbank值根据定标转换成定点值作为定点实现模型的输入,然后每层的浮点实现和定点实现并行运行。需要说明的是目前完成的是16bit的定点实现,后面会在此基础上做8bit的定点实现。1, 在python下根据paddlepaddle提供的API(named_parameters)得到模型每层的参数(weight & bias),同时看每层的weight和bias的绝对值的最大值,从而确定参数的Q格式,再以这个Q格式对weight 和bias做量化。

2023-07-21 07:35:46 680

原创 基于飞桨paddlespeech训练中文唤醒词模型

一边训练模型,一边请更多的人用手机录“你好米雅”的唤醒词音频,还要对这些录好的做7k HZ处的低通滤波处理。整个数据集是由3个子数据集(“你好米雅”数据集,“你好米雅”相似词数据集,AIDATATANG数据集)组成的,前两个是同一出品方且用相同的设备录的。又想试试真实录音的wav的准确率如何,请了几个人在办公室环境下用手机录了“你好米雅”的音频,在得到的模型下去测试,结果让我大失所望,识别率特别低。等做产品时用的数据集是私有的,把找到的方法用到模型训练上,就能出一个性能不错的语音唤醒方案。

2023-06-08 07:56:44 2278 6

原创 将音频格式从flac转到wav的两种方法

SoX​​(即 Sound eXchange)是一个跨平台(Windows,Linux,MacOS 等)的命令行实用程序,可以将各种格式的音频文件转换为需要的其他格式。Pydub是一个依赖于ffmpeg的python音频处理库,因此要先安装ffmpeg,安装命令如下:sudo apt install ffmpeg # version 7:4.2.7-0ubuntu0.1。对其他音频格式之间的互转,方法也是适用的,只不过代码上有可能需要做一点小的改动。为了更好的跟大家沟通,互帮互助,我建了一个讨论群。

2023-05-08 08:14:30 1201

原创 飞桨paddlespeech语音唤醒推理C浮点实现

一是跟python下的实现完全一致的版本,做这个版本的目的是方便与python版本的结果比较,确保每个模块的实现完全正确。二是将模型中的卷积层和对应的batchNormal(BN)层合并为一个卷积层的版本,将卷积层和对应的BN层合并为一个卷积层一是可以减少参数的个数,二是可以减少运算量(BN里有求方差等运算)。下面就讲讲我是怎么做C下的实现的。下图给出了我调试时用的wav的最终每帧的在python下和C下的后验概率(有多个值,限于长度,这里只截取了部分),可以看出python下和C下的结果是保持一致的。

2023-04-18 08:09:07 1060 2

原创 飞桨paddlespeech 语音唤醒初探

模型用的特征是80维的mel-filter bank,即每帧的特征是一个80维的数据。把一个utterance的这些帧的特征作为模型的输入,输出是每一帧的后验概率,如果有一帧的后验概率大于threshold,就认为这一utterance是关键词,从而唤醒设备。举例来说,一个utterance有158帧,模型的输入就是158*80的矩阵(158是帧数,80是特征的维度),输出是158*1的矩阵,即158个后验概率。共19442个文件,跟期望一致的(图中correct的)是19410个,准确率为99.84%。

2023-03-03 18:37:59 2647 7

原创 音频音量调整中的ramp up & down

在音量ramp过程中,要想做好ramp up & down,ramp过程中每个采样点的gain都是不一样的,从当前的gain值逐渐变到目标gain值。上面算出的是ramp up时的值,当ramp down时,就是-ΔdB。mute时相当于把音量从当前值变为-88dB,unmute时就相当于把音量从-88dB变回去),是个ramp down的过程,几乎就听不到声音了。在ramp过程中假设当前采样点的音量为N dB,对应的gain记为g1,则下个采样点的音量为(N + Δ) dB,对应的gain记为g2。

2023-01-16 08:09:51 2246 1

原创 智能语音之远场关键词识别实践(二)

对于每个功能模块来说,通常都会有多种不同的实现算法,不同的算法在性能和运算复杂度上有优劣,因此先要去评估,选择最适合我们项目的算法。经过一段时间的学习和实践,有了一些输出,也写了关于这个算法理论和实践的几篇文章,具体见《讨论后觉得原因很可能是这个:模型是基于先前单声道的语料训练的,而现在识别时的语音是多声道语音经过前端各算法处理后得到的单声道语音,两者不匹配。就我自己而言,不仅学到了后端深度学习相关的(模型训练、量化等),也学到了前端信号处理算法相关的,同时通过实践还累积了不少关键词识别相关的经验。

2022-12-18 12:55:52 867

原创 智能语音之远场关键词识别实践(一)

语音识别主要分两大类:大词汇量连续语音识别技术(Large Vocabulary Continuous Speech Recognition,LVCSR)和关键词识别(keyword Spotting,KWS)。LVCSR由于对算力要求较高,一般在云端(服务器侧)做,而KWS对算力的要求相对较小,可以在终端上做。我们公司是芯片设计公司,主要设计终端上的芯片,想要在语音识别上做点事情,最可能的是做KWS,于是我们就选择KWS来实践语音识别。按距离远近,语音识别可分为近场识别和远场识别,远场的应用场景更丰富些,

2022-03-03 08:18:10 2392

原创 麦克风阵列波束形成之DSB原理与实现

设共有N个麦克风,A点处为第n个,A处的麦克风的方位角为α(方位角为信号源映射到XY平面上与X轴的夹角),∠AOX = 2*pi*n/N (X轴的方向为角度0), 令β = ∠AOA’= ∠AOX – α= 2*pi*n/N – α。从上图可以看出,先对每个通道上的语音数据做去混响,同时用每个通道上的语音数据做声源定位得到说话人的角度(方位角和俯仰角等),然后用去混响后的语音数据和算出的说话人的角度去做波束形成得到单通道的语音数据,最后对单通道的语音数据做降噪给后续模块使用。原理讲完了,是在时域下讲的。

2022-02-21 08:17:06 4321 3

原创 VoIP语音处理流程和知识点梳理

在发送方向,从codec芯片采集到语音PCM数据后如有需要首先做重采样(SRC),然后做前处理(回声消除/AEC,噪声抑制/ANS,增益控制/AGC,俗称3A算法)。如果是语音就要去做编码,如果是静音则不需要编码,仅仅是周期性的(比如200毫秒)发送一个带能量大小的SID包给对方,对方收到这个包后去做CNG产生舒适噪声,让通话者感觉更舒服些。当然有些是必须的,比如编解码。9,jitter buffer(JB):把从网络收到的RTP包放进JB里缓一下,同时把乱序的包排好序等,有利于播放的流畅。

2022-01-07 08:11:02 4595 1

原创 基于MCRA-OMLSA的语音降噪(三):实现(续)

1,求平方根求平方根最常用的方法是牛顿迭代法。下图是y = f(x)的曲线,当f(x) =0时的值(α)就是该方程的根。可以通过多次迭代逼近的方法求得这个根,原理如下:任取一个x0,这个值对应的y值为f(x0)。在.

2022-01-05 08:09:48 864

原创 基于MCRA-OMLSA的语音降噪(二):实现

上篇文章(基于MCRA-OMLSA的语音降噪(一):原理)讲了基于MCRA-OMLSA降噪的原理,本篇讲怎么做软件实现。软件实现有多种方式。单纯看降噪效果可用python,因为python有丰富的库可用,可节省不少时间,把主要精力放在降噪效果提升上。如果要把算法用在产品上就得用其他语言。我们是芯片公司,且我们team偏底层,最常用的语言是C,所以我又用C实现了该算法。本文先讲讲在python下的实现,再讲讲在C下的实现。一,python下的实现Python有丰富的库,音频文件读取的librosa

2021-12-28 08:11:32 1270

原创 基于MCRA-OMLSA的语音降噪(一):原理

前面的几篇文章讲了webRTC中的语音降噪。最近又用到了基于MCRA-OMLSA的语音降噪,就学习了原理并且软件实现了它。MCRA主要用于噪声估计,OMLSA是基于估计出来的噪声去做降噪。类比于webRTC中的降噪方法,也有噪声估计(分位数噪声估计法)和基于估计出来的噪声降噪(维纳滤波),MCRA就相当于分位数噪声估计法,OMLSA就相当于维纳滤波。本文先讲讲怎么用MCRA和OMLSA来做语音降噪的原理,后续会讲怎么来做软件实现。一 MCRAMCRA的全称是Minima Controlled R

2021-12-21 08:11:27 2612 1

原创 webRTC中语音降噪模块ANS细节详解(四)

上篇(webRTC中语音降噪模块ANS细节详解(三))讲了噪声的初始估计方法以及怎么算先验SNR和后验SNR。 本篇开始讲基于带噪语音和特征的语音和噪声的概率计算方法和噪声估计更新以及基于维纳滤波的降噪。一, 带噪语音和特征条件下的语音概率先看怎么算带噪语音和特征条件下的语音概率。其中会用到先前算好的先验SNR和后验SNR,也会用到特征条件下的语音概率,从而涉及到怎么算特征条件下的语音概率,有了特征条件下的语音概率后带噪语音和特征条件下的语音概率就好算了。1, 带噪语音和特征条件下的语音概.

2021-11-15 08:00:41 1704 1

原创 webRTC中语音降噪模块ANS细节详解(三)

上篇(webRTC中语音降噪模块ANS细节详解(二))讲了ANS的处理流程和语音在时域和频域的相互转换。本篇开始讲语音降噪的核心部分,首先讲噪声的初始估计以及基于估计出来的噪声算先验信噪比和后验信噪比。1,初始噪声估计webRTC中ANS的初始噪声估计用的是分位数噪声估计法(QBNE,Quantile Based Noise Estimation),对应的论文为《Quantile Based Noise Estimation For Spectral Subtraction And Wiene.

2021-11-02 08:07:56 2622

原创 webRTC中语音降噪模块ANS细节详解(二)

上篇(webRTC中语音降噪模块ANS细节详解(一))讲了维纳滤波的基本原理。本篇先给出webRTC中ANS的基本处理过程,然后讲其中两步(即时域转频域和频域转时域)中的一些处理细节。ANS的基本处理过程如下图1: 图1从图1可以看出,处理过程主要分6步,具体如下:1) 把输入的带噪信...

2021-10-22 08:06:22 3331

原创 webRTC中语音降噪模块ANS细节详解(一)

ANS(adaptive noise suppression) 是webRTC中音频相关的核心模块之一,为众多公司所使用。从2015年开始,我在几个产品中使用了webRTC的3A(AEC/ANS/AGC)模块。以前仅仅是使用,对其中的算法原理只是初步了解。近半年来,我利用业余时间在看着《语音增强:理论与实践》和《实时语音处理时间指南》这两本书,对降噪算法有了更深的理解,同时又对ANS的代码进行了调试,基本掌握了算法实现。我想把我对ANS的理解写出来。由于内容细节较多,就出一个系列吧。webRTC中的ANS是

2021-10-10 16:39:24 2438

原创 基于混合模型的语音降噪效果提升

上篇文章(基于混合模型的语音降噪实践)实践了基于混合模型的算法来做语音降噪,有了一定的降噪效果。本篇说说怎么样来提升降噪效果。算法里会算每个音素的高斯模型参数,也会建一个音素分类的神经网络模型。这些都是依赖于音素对齐的,音素对齐做的越好,每个音素的高斯模型越准确,音素分类模型越收敛准确率越高,从而算法的降噪效果越好。先前做音素对齐用的是开源工具speech-aligner,怎么样让音素对齐做的更好呢?自己做不太现实(不仅周期长,而且相关专业知识积累有限),还得依赖专业工具。调研下来MFA(Montr

2021-07-19 08:01:54 637 3

原创 基于混合模型的语音降噪实践

前面的文章(语音降噪论文“A Hybrid Approach for Speech Enhancement Using MoG Model and Neural Network Phoneme Classifier”的研读 )梳理了论文的思想。本篇就开始对其实践,主要分以下几步:1,基于一个语料库算出每个音素的单高斯模型;2,训练一个输出是一帧是每个音素概率的NN分类判别模型;3,算法实现及调优。1,得到每个音素的单高斯模型要想得到每个音素的单高斯模型,首先得做好音素对齐,知道某一帧对应哪个音.

2021-06-18 07:58:32 516 1

原创 语音降噪论文“A Hybrid Approach for Speech Enhancement ...“的研读

最近认真的研读了一篇关于语音降噪的论文(A Hybrid Approach for Speech Enhancement Using MoG Model and Neural Network Phoneme Classifier)。它是一种利用混合模型降噪的方法,即既利用了生成模型(MoG高斯模型),也利用了判别模型(神经网络NN模型)。本文根据自己的理解对原理做了梳理。论文是基于“Speech Enhancement Using a Mixture-Maximum Model”提出的MixMAX.

2021-05-16 22:46:29 1296

原创 基于sinc的音频重采样(二):实现

上篇(基于sinc的音频重采样(一):原理)讲了基于sinc方法的重采样原理,并给出了数学表达式,如下: (1)本文讲如何基于这个数学表达式来做软件实现。软件实现的细节很多,这里主要讲核心部分。函数srcUD()和filterUD()就是实现的主要函数(这两个函数是在源码基础上作了一定的改动,核心思想没变)。srcUD()是实现一帧中点的重采样...

2021-04-17 22:08:14 1509 2

原创 基于sinc的音频重采样(一):原理

我在前面的文章《音频开源代码中重采样算法的评估与选择 》中说过sinc方法是较好的音频重采样方法,缺点是运算量大。https://ccrma.stanford.edu/~jos/resample/ 给出了sinc方法的原理文档和软件实现。以前是使用这个算法,没太关注原理和实现细节。去年(2020年)由于项目的需要和组内同学把这个算法的原理和软件实现细节搞清楚了。本文先讲讲sinc方法的原理,后面文章会讲讲软件实现的细节。1,sinc函数和信号的采样与重建在数字信号处理中,sinc函数定义为:.

2021-03-13 23:31:30 4710 1

原创 深度学习中神经网络模型的量化

1,什么是量化2,为什么要量化3,神经网络模型的量化神经网络模型在训练时都是浮点运算的,得到的模型参数也是浮点的。通常模型参数较多,在inference时也有非常多的乘累加运算。如果处理器的算力有限,在inference时用浮点运算将导致CPU load很高,极大影响性能。而且通常一个参数用浮点数表示占四个字节,而如果用8比特量化的话,一个参数只占一个字节,memory得到了极大的节约,在memory紧张的处理器上尤为重要。所以通常都要对神经网络模型进行量化,来降低CPU load和..

2021-02-21 21:03:10 1892 1

原创 嵌入式设备上卷积神经网络推理时memory的优化

以前的神经网络几乎都是部署在云端(服务器上),设备端采集到数据通过网络发送给服务器做inference(推理),结果再通过网络返回给设备端。如今越来越多的神经网络部署在嵌入式设备端上,即inference在设备端上做。嵌入式设备的特点是算力不强、memory小。可以通过对神经网络做量化来降load和省memory,但有时可能memory还吃紧,就需要对神经网络在memory使用上做进一步优化。本文就以一维卷积神经网络为例谈谈怎么来进一步优化卷积神经网络使用的memory。文章(卷积神经网络中一维卷.

2021-02-06 21:18:23 958

原创 智能语音卷积神经网络中一维卷积的处理

卷积神经网络(CNN)是深度学习中常用的网络架构,在智能语音中也不例外,比如语音识别。语音中是按帧来处理的,每一帧处理完就得到了相对应的特征向量,常用的特征向量有MFCC等,通常处理完一帧得到的是一个39维的MFCC特征向量。假设一段语音有N帧,则处理完这段语音后得到的是一个39行N列(行表示特征维度,列表示帧数)的矩阵,这个矩阵是一个平面,是CNN的输入。应用在图像问题上的CNN通常是二维卷积(因为图像有RGB三个通道),而语音问题上的CNN输入是一个矩阵平面,可以用一维卷积。本文就讲讲一维卷积是怎么处理

2021-01-23 20:58:16 3613 6

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除