为嵌入式应用优化人工智能
在我之前的博客中,我谈到了对基于 AI 的界面的需求如何变得几乎不可避免——并且添加像 face-id 这样的基于 AI 的界面来授权对机器的访问乍一看似乎是一个巨大的飞跃,但实际上并非如此和你想象的一样困难。有大量可用的 AI 平台、大量训练选项,甚至还有开源应用程序,例如 face-id 示例。您可以使用可在 PC 上运行的原型快速启动和测试。
(来源:CEVA)
约束
将训练有素的网络转移到您的嵌入式应用程序似乎是另一个巨大的障碍。 PC 或云训练的网络不会对内存使用或功率进行太多优化。他们可能会使用浮点或双字进行网络计算,并且在处理图像上的滑动窗口时会严重依赖片外内存访问。对于在插入墙上电源的高性能 PC 上运行的原型来说,这不是问题,但您需要在最终应用程序中更加节俭,同时不影响性能。
优化要点
优化的一个关键步骤称为量化。将权重从浮点数切换到定点数并减小定点大小,例如从 32 位浮点数到 8 位整数,不仅会影响权重的大小,还会影响中间计算值的大小。仅此一项就可以显着减少内存占用,在大多数情况下对识别质量几乎没有明显影响。
第二种操作是以最小的精度影响来利用权重的稀疏性。这种做法将利用接近于零的权重,并将它们四舍五入为零,同时密切跟踪精度影响。权重用于部分和的乘法,当其中一个因子为零时,这是毫无意义的练习,因此无需执行运算。
在实际实现中,图像是递增处理的,因此当计算窗口在图像上移动时必须更新权重。这可以带来大量更新和大量流量。通过强制大部分权重为零,可以压缩权重数组,从而可以将所有或大部分数组存储在片上 SRAM 中,以便按需解压缩。这反过来又最大限度地减少了对主存储器的需求,从而提高了性能并降低了功耗。加载权重时,它还附带减少了片上流量。更少的流量争用意味着更高的吞吐量。
还应考虑另一个因素。像大多数复杂的应用程序一样,神经网络依赖于复杂的库。您需要使用专为在微控制器环境中使用而设计的库,并将编译器编译到您选择的平台。一个好的起点可能是开源库,例如 TensorFlow Lite,但为了充分利用微控制器,需要专门定制的解决方案。
当然,知道你必须做什么并不容易。您现在需要找到一个平台来简化这些操作并提供硬件优化的库。
我如何使它成为一个易于使用的流程?
您想要的是一个流程,您可以在其中使用您在特定平台(例如 TensorFlow)上训练的网络,并将其直接编译到您的嵌入式解决方案中——除了拨入一些基本要求外,无需任何干预。当然,您还希望该选项能够进一步手动优化,可能在不同的平面上设置不同的量化级别。也许尝试使用权重阈值与片上内存大小。并且您想要针对硬件优化的库和针对库优化的硬件。
像 CEVA 的 CDNN 这样经过验证的 AI 平台旨在提供这种类型的流程。 CDNN 提供用于量化和运行时任务生成的离线处理器工具集,以及为 CEVA DSP 和客户用户硬件加速器定制的运行时库。 CEVA 的解决方案支持所有流行的 AI 模型格式,包括 TensorFlow Lite、ONNX、Caffe 等。
相关内容:
- 掌握嵌入式人工智能
- 将 AI 模型压缩到微控制器中
- 在嵌入式系统中应用机器学习
- 微控制器架构为 AI 发展
- 在边缘训练 AI 模型
- 微控制器架构为 AI 发展
- 利用嵌入式人工智能将大数据转化为智能数据
有关 Embedded 的更多信息,请订阅 Embedded 的每周电子邮件通讯。
嵌入式