智能语音技术栈

智能语音技术栈_第1张图片

识别原理——硬件数据采集——软件数据处理

目前主流的开源平台包括CMU Sphinx、HTK、Kaldi、Julius、iATROS、CNTK、TensorFlow等,CMU Sphinx是离线的语音识别工具,支持DSP等低功耗的离线应用场景。由于深度学习对于语音识别WER的下降具有明显的作用,所以Kaldi、CNTK、TensorFlow等支持深度学习的工具目前比较流行,Kaldi的优势就是集成了很多语音识别的工具,包括解码搜索等。

智能语音技术栈_第2张图片

Mobile AI Compute Engine,mace不光支持qcom的芯片,也支持麒麟。mace github开源,3395*,覆盖CPU、GPU、DSP,业界领先的性能和稳定性,编译时只支持arm,不使用GPU加速,Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML。移植mace到手机上识别键盘、鼠标等,速度还可以。

android sdk。

综合来讲,对比目前已有的几个开源mobile dnn inference库,caffe2、tf-lite、ncnn和snpe,再加上一些著名的dnn后端库,比如arm compute library、nnpack、gemmlowp、hexagon dsp sdk、qsml等,mace算是支持比较完整(当然了,缺乏ios的支持算是目前的短板,但应该不难解决),优化比较到位的库。

库的评价点:

1. 是否有CPU优化?是否使用NEON?是否有为mobile设计的thread pool?是否有针对CPU架构做超参数的调整(比如说thread number)?

CPU优化是必须有的,不用NEON(SIMD)是不可能的。采用 intrinsic c+汇编 的方式已经较好的发挥了NEON的优势,benchmark结果也很可观。

2. 算法上是否采用了正确的path,比如说用Winograd来做卷积(类似nnpack),对小矩阵做特殊优化(类似xsmm),等等?

CPU和GPU均采用了Winograd算法来优化卷积,效果也是很显著的,还算接近理论加速比。并且针对常用卷积核有专门优化,效果都是显而易见的。

3. GPU上,是否有高效的kernel implementation?比如说OpenCL/GL,Metal,等等。

目前对高通的Adreno GPU有很好的优化(这里当然得感谢高通的支持,毕竟他们是最了解芯片的)

,此外又适配了Mali和PowerVR,以实现通用型,将来会针对Mali的GPU进一步优化。

4. 是否有在 mobile 上非常有用的一些功能,比如说reduced precision(类似gemmlowp)

GPU目前支持float16和float32两种精度,float16相对于float32精度稍微差点但是性能有大幅提升,而目前常见CNN网络对精度不是很敏感,所以GPU默认采用float16。CPU目前还不支持量化,不过在不久的将来就会支持。

5. 通用性问题

手机端的通用性比较难做。CPU目前主流的只有ARM一家,所以还好说。而GPU目前主流的有三家,三家技术不尽相同,MACE目前做了适配,但是还不敢保证所有GPU的可用性和高性能,当然这也是将来的工作重点,尽可能支持主流的所有设备,将来能够提供一个完整的解决方案。

 

 

 

 

 

 

 

参考链接:

https://zhuanlan.zhihu.com/p/31193859

http://zhuanlan.51cto.com/art/201706/543458.htm

https://www.zhihu.com/question/283022477/answer/429250384

https://blog.csdn.net/rony2012/article/details/76433431

你可能感兴趣的:(不归类)