在我的 以前的博客 我谈到了几乎不可避免的对基于AI的界面的需求-并且添加像face-id这样的基于AI的界面来授权对机器的访问乍看起来似乎是一个巨大的飞跃,但这并不是那么困难如您所想。有大量可用的AI平台,大量的培训选项,甚至是开源应用程序,例如 面部识别码示例。使用可以在PC上运行的原型,您可以快速启动并进行测试。


(来源:CEVA)

约束条件

将训练有素的网络迁移到嵌入式应用程序似乎是另一个巨大的障碍。经过PC或云训练的网络在内存使用或功耗方面并没有进行太多优化。他们可能会使用浮点数或双字进行网络计算,并且在处理图像上的滑动窗口时会严重依赖片外内存访问。那’对于在插入墙壁电源的高性能PC上运行的原型而言,这不是一个问题,但是您需要在最终应用程序中更加节俭,并且不影响性能。

优化的要点

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

第二种操作是在最小的精度影响下利用权重的稀疏性。这种做法将利用接近零的权重,并将它们四舍五入,同时密切关注准确性的影响。权重用于乘以部分和,当其中一个因素为零时,这是没有意义的练习,因此无需执行该运算。

在实际的实现中,图像是增量处理的,因此当计算窗口在图像上移动时,权重必须更新。这样可以进行大量更新和大量访问。通过将大部分权重强制为零,可以压缩权重阵列,从而可以将所有或大部分阵列存储在片上SRAM中,以根据需要进行解压缩。从而最大程度地减少了访问主存储器的需求,从而提高了性能并降低了功耗。加载砝码时,它还附带减少了片上流量。较少的流量争用意味着较高的吞吐量。

应该考虑另外一个因素。像大多数复杂的应用程序一样,神经网络依赖于复杂的库。您需要使用设计用于微控制器环境的库,并将其编译到所选平台。一个好的起点可能是一个开源库,例如 TensorFlow Lite,但是为了充分利用微控制器,将需要专门定制的解决方案。

当然,知道您必须做什么并不容易。现在,您需要找到一个平台,可以简化这些操作并提供硬件优化的库。

如何使它易于使用?

您需要的是一种流程,您可以在特定的平台(例如TensorFlow)上使用经过培训的网络,并将其直接编译到嵌入式解决方案中,而无需输入一些基本要求。当然,您还希望该选项能够进一步手动优化,也许在不同平面上设置不同的量化级别。也许尝试权重阈值与片上存储器大小的比较。并且您想要针对硬件进行优化的库,以及针对库进行优化的硬件。

经过验证的AI平台(例如CEVA)’s 神经网络 设计用于提供这种类型的流。 CDNN提供了用于量化和运行时任务生成的离线处理器工具集,以及针对CEVA DSP和客户用户硬件加速器的量身定制的运行时库。 CEVA的解决方案支持所有流行的AI模型格式,包括TensorFlow Lite,ONNX,Caffe等。


相关内容:

要获得更多嵌入式产品, 订阅嵌入式’的每周电子邮件通讯.

发表评论

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.