音频嵌入式AI概述
我们日常生活中会接触到很多便携式音频设备,包括蓝牙音箱、TWS耳机、智能手表等等,随着AI技术的发展,越来越多的便携式音频设备中也开始加入相关的功能,包括AI降噪、语音唤醒、关键词识别、声纹识别等等,这些功能一般都是在本地实现。由于AI算法的复杂度高,计算量相较于传统方法大得多,这就给相关企业和研发人员带来不小的压力。
一、算法预研
通过软件工具实现算法,传统方法一般用MATLAB比较方便,不过MATLAB比较贵,一般企业不会买或者买几个共享号,用起来比较麻烦,如果只写脚本不用Simulink,可以用Octave(免费)进行替代。
AI算法一般用Python来实现,常用搭配为Pycharm+Anaconda,Pycharm用来写脚本,Anaconda用来搭建环境。如果是在Linux系统上工作的话用Anaconda搭建环境,然后直接运行脚本就好了。
二、算法复现
对于企业来说,仅仅实现AI算法是没用的,还要能够落地,能在板子上跑起来。有一些比较好的芯片,像高通、英伟达之类的,这些芯片拥有神经网络推理引擎,把模型加载进去就可以运行起来。但是音频芯片一般都是低功耗MCU,这类芯片都没有推理引擎,所以要用C语言复现算法过程,其中的难点毫无疑问就是神经网络的计算过程。
三、算法优化
一般神经网络计算都是浮点计算,这在板子上跑会很慢,根本跑不起来,所以需要做定点化,而且芯片上的内存一般都很紧张,需要对神经网络参数做量化处理。神经网络的量化分为后量化和感知量化,感知量化是指训练过程中进行量化,后量化是指训练完成后对参数进行量化,最新版本的TensorFlow支持感知量化和后量化,不过我一般是在训练完成后手动对参数进行量化。
除此之外,一些MCU平台,比如ARM、HIFI等都有各自的内联函数和汇编,主要是通过并行运算来实现速度上的优化,我没做过基于汇编的优化,但是用过ARM和HIFI的内联函数进行优化。ARM主要有SIMD和NEON两类指令集,其中SIMD可以做两个和四个的并行计算,NEON能做更多的并行计算,但是NEON不是所有版本的ARM芯片都能用。HIFI平台有多个版本,越新的版本优化空间越大,像HIFI2可以做两个和四个的并行计算,HIFI5可以做四个和八个的并行计算,优化效果也更明显。