为嵌入式应用程序优化 AI

电子说

1.2w人已加入

描述

在我之前的博客中,我谈到了对基于 AI 的界面的需求如何变得几乎不可避免——并且添加一个基于 AI 的界面(如 face-id)来授权对机器的访问,乍一看似乎是一个巨大的飞跃,但实际上并非如此有你想象的那么困难。有大量可用的 AI 平台、大量培训选项甚至开源应用程序,例如face-id 示例。您可以使用可以在 PC 上运行的原型快速启动和测试。

约束

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

优化的要点

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

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

在实际实现中,图像是增量处理的,因此当计算窗口在图像上移动时必须更新权重。这可以带来很多更新和大量流量。通过强制大部分权重为零,可以压缩权重数组,从而可以将所有或大部分数组存储在片上 SRAM 中,以便按需解压缩。这反过来又最大限度地减少了访问主存储器的需要,从而提高了性能并降低了功耗。它还偶然减少了加载重量时的片上流量。更少的流量争用意味着更高的吞吐量。

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

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

我如何使它成为一个易于使用的流程?

您想要的是一个流程,您可以在其中使用您在特定平台(例如 TensorFlow)上训练的网络,并将其直接编译到您的嵌入式解决方案中——除了拨打一些基本要求外,无需干预。当然,您还希望该选项能够进一步手动优化,可能在不同的平面上设置不同的量化级别。也许可以尝试权重阈值与片上内存大小。您需要针对硬件优化的库和针对库优化的硬件。

CEVA 的CDNN等经过验证的 AI 平台旨在提供这种类型的流程。CDNN 为量化和运行时任务生成提供离线处理器工具集,以及为 CEVA DSP 和客户用户硬件加速器定制的运行时库。CEVA 的解决方案支持所有流行的 AI 模型格式,包括 TensorFlow Lite、ONNX、Caffe 等。

审核编辑 黄昊宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分