掌握嵌入式人工智能:根据您的设备进行优化

2021-03-02  

增加诸如人脸识别这样基于人工智能的界面来进行机器的访问授权——这乍一看似乎是一个巨大的飞跃,但它并不像您想象得那么困难。有大量的网络平台可用,有很多训练选项,甚至还有开源应用程序,比如前面提到的人脸识别的例子。您可以用能在您的个人电脑上运行的原型程序来快速地进行测试。

(图片来源:CEVA

增加诸如人脸识别这样基于人工智能的界面来进行机器的访问授权——这乍一看似乎是一个巨大的飞跃,但它并不像您想象得那么困难。有大量的网络平台可用,有很多训练选项,甚至还有开源应用程序,比如前面提到的人脸识别的例子。您可以用能在您的个人电脑上运行的原型程序来快速地进行测试。

(图片来源:CEVA

广告

限制因素

在您的嵌入式应用程序中放入一个经过训练的网络似乎是另一个巨大的困难。个人电脑(或云)训练的网络不会在存储容量或功耗方面优化太多。它们可能使用浮点或双字来进行网络计算,并且在处理图像上的滑动窗口时,它们将大幅依赖于片外存储器访问。这对高性能个人电脑上运行的原型来说不成问题,但您需要在终端应用程序中省着点用,以确保不影响性能。

优化要领

优化中的一个关键步骤叫做量化。将权重从浮点切换到定点,并减小定点的大小,例如从32位浮点减到8位整数,不仅影响权重的大小,而且影响中间计算值的大小。仅此一项就可以显著减少内存占用,并且在大多数情况下对识别质量的影响很小。

第二项操作是利用权重中的稀疏性,同时尽可能地减小对精确度的影响。这种做法将利用那些接近于零的权重,并将它们舍入到零,同时密切跟踪这对精确度的影响。权重用于乘以部分和,如果其中有因数为零,就将变成无用功,因此也就没有必要执行该操作了。

在实际的实现过程中,图像被增量处理,因此当计算窗口在图像上移动时,必须更新权重。这会带来大量的更新以及大量的数据流量。通过将大部分权重值强制设为零,就可以压缩权重数组,从而使数组的全部或大部分存储在片内SRAM中,以便按需解压缩。因此,最大限度地减少了对主存的需求,从而提高了性能并降低了功耗。在加载权重时,它还附带地减少了片内通信量。更少的流量占用则意味着更高的吞吐量。

此外还要考虑一个因素。像大多数复杂的应用一样,神经网络依赖于精密的数据库。您需要使用专为微控制器环境设计的数据库,和您所选择的平台的编译器。选择TensorFlow Lite等开源库便是一个不错的着手点,但是为了充分利用微控制器,还需要专门的定制解决方案。

当然,想要弄清自己必须要干什么并不容易。而您现在要做的,就是找到平台来简化这些操作并提供经过硬件优化的数据库。

我如何使这个流程变得简单易用?

您需要的是一个可以在特定平台(例如TensorFlow)上承载训练过的网络,并且将该网络直接编译到您的嵌入式解决方案中的流程。除了加入一些基本要求之外,无需额外干预。当然,您也希望能够进一步手动优化该选项,可以是在不同的平面上设置不同的量化级别,也可以是在权重阈值与片内存储器容量方面多加尝试。此外,您还希望根据硬件优化数据库,以及根据数据库优化硬件。

欢迎联系CEVA,跟我们畅谈这些话题。我们有一个成熟的人工智能平台- ,它提供了一个用于量化和运行时任务生成的离线处理器工具集,以及为CEVA DSP和客户用户硬件加速器量身定制的运行时库。CEVA的解决方案支持所有主流的人工智能模型格式,包括tensorflow lite、ONNX、Caffe等。

限制因素

在您的嵌入式应用程序中放入一个经过训练的网络似乎是另一个巨大的困难。个人电脑(或云)训练的网络不会在存储容量或功耗方面优化太多。它们可能使用浮点或双字来进行网络计算,并且在处理图像上的滑动窗口时,它们将大幅依赖于片外存储器访问。这对高性能个人电脑上运行的原型来说不成问题,但您需要在终端应用程序中省着点用,以确保不影响性能。

优化要领

优化中的一个关键步骤叫做量化。将权重从浮点切换到定点,并减小定点的大小,例如从32位浮点减到8位整数,不仅影响权重的大小,而且影响中间计算值的大小。仅此一项就可以显著减少内存占用,并且在大多数情况下对识别质量的影响很小。

第二项操作是利用权重中的稀疏性,同时尽可能地减小对精确度的影响。这种做法将利用那些接近于零的权重,并将它们舍入到零,同时密切跟踪这对精确度的影响。权重用于乘以部分和,如果其中有因数为零,就将变成无用功,因此也就没有必要执行该操作了。

在实际的实现过程中,图像被增量处理,因此当计算窗口在图像上移动时,必须更新权重。这会带来大量的更新以及大量的数据流量。通过将大部分权重值强制设为零,就可以压缩权重数组,从而使数组的全部或大部分存储在片内SRAM中,以便按需解压缩。因此,最大限度地减少了对主存的需求,从而提高了性能并降低了功耗。在加载权重时,它还附带地减少了片内通信量。更少的流量占用则意味着更高的吞吐量。

此外还要考虑一个因素。像大多数复杂的应用一样,神经网络依赖于精密的数据库。您需要使用专为微控制器环境设计的数据库,和您所选择的平台的编译器。选择TensorFlow Lite等开源库便是一个不错的着手点,但是为了充分利用微控制器,还需要专门的定制解决方案。

当然,想要弄清自己必须要干什么并不容易。而您现在要做的,就是找到平台来简化这些操作并提供经过硬件优化的数据库。

我如何使这个流程变得简单易用?

您需要的是一个可以在特定平台(例如TensorFlow)上承载训练过的网络,并且将该网络直接编译到您的嵌入式解决方案中的流程。除了加入一些基本要求之外,无需额外干预。当然,您也希望能够进一步手动优化该选项,可以是在不同的平面上设置不同的量化级别,也可以是在权重阈值与片内存储器容量方面多加尝试。此外,您还希望根据硬件优化数据库,以及根据数据库优化硬件。

欢迎联系CEVA,跟我们畅谈这些话题。我们有一个成熟的人工智能平台- ,它提供了一个用于量化和运行时任务生成的离线处理器工具集,以及为CEVA DSP和客户用户硬件加速器量身定制的运行时库。CEVA的解决方案支持所有主流的人工智能模型格式,包括tensorflow lite、ONNX、Caffe等。

文章来源于:电子工程专辑    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。