|嵌入式开发:嵌入式神经网络的发展现状

|嵌入式开发:嵌入式神经网络的发展现状

文章图片


对于任何注定要在批量生产中部署的嵌入式软件 , 一旦完成并验证了其核心功能的实现 , 就会在代码中投入大量精力 。 这个优化阶段是关于最小化所需的内存、CPU和其他资源 , 以便尽可能多地保留软件功能 , 同时将执行它所需的资源减少到绝对最低限度 。 这种从基于实验室的算法创建嵌入式软件的过程使嵌入式开发人员能够将软件功能成本工程化为大规模生产就绪形式 , 与用于开发它的大规模计算数据中心相比 , 需要更便宜、功能更弱的芯片和硬件 。
然而 , 它通常需要从一开始就冻结功能 , 修改代码只是为了改进算法本身的执行方式 。 对于大多数软件来说 , 这很好:实际上 , 它可以使用严格的验证方法来确保嵌入过程保留所有所需的功能 。
然而 , 当嵌入基于NN 的AI算法时 , 这可能是一个主要问题 。 为什么?因为通过从一开始就冻结功能 , 您正在删除可以优化执行的主要方式之一 。
问题是什么?
有两种根本不同的方法可以解决将复杂的神经网络从实验室中不受约束 , 资源丰富的神经网络训练环境移植到受严格约束的嵌入式硬件平台的任务:
优化执行神经网络的代码
优化神经网络本身当嵌入式开发人员发现内存带宽瓶颈或底层嵌入式硬件平台利用率低等性能问题时 , 传统的嵌入式软件技术会鼓励您深入挖掘底层代码并找到问题所在 。
这反映在当今可用于嵌入式MCU 和DSP的许多先进和复杂的工具中 。 它们使您能够深入了解软件中正在发生的事情 , 并识别和改进软件本身的执行——希望不会改变其功能 。

对于神经网络 , 优化与传统的嵌入式软件完全不同——至少如果你想用可用的硬件资源获得最好的结果 。 使用NN , 通过改变拓扑NN 本身(NN的各个层如何连接 , 以及每层的作用)和使用更新的约束和输入重新训练它的某种组合来实现改进 。 这是因为功能不是由神经网络“软件”定义的 , 而是由训练期间应用的目标和约束来创建定义神经网络最终行为的权重 。
因此 , 在进行NN 的嵌入过程时 , 您需要冻结NN的目标性能 , 而不是它是如何实现的 。 如果您从嵌入式开发过程的开始就约束NN 拓扑 , 那么您正在移除生产工程师提高性能所需的工具 。
这意味着您需要新的和不同的工具来完成将NN从实验室移植到嵌入式平台的任务 。 而低级软件工程师无法完成这项工作——您需要AI 工程师根据工具为您提供的性能信息来调整NN及其训练 。 这是新的:当研发工程师将训练有素的神经网络交给生产工程师时 , 他们再也不能说“工作完成了”!
另一种方法:
通过采用将人工智能研发工程师置于嵌入式软件移植任务中心的开发工作流程 , 任何芯片都可以取得卓越的成果 。 使用以层为中心的分析 , 并在几分钟内快速完成从编译修改后的卷积神经网络(CNN) 到查看目标神经处理器单元(NPU)的准确性能结果 , 嵌入式开发人员可以使用相同的底层硬件实现100% 或更多的收益.这是因为修改CNN 本身 , 而不是只修改用于执行相同CNN 的代码 , 可以让AI 工程师更灵活地识别和实施性能改进 。

在开发我们的aiWare NPU 时 , AImotive使用了我们自己的AI 工程师将过程移植到具有广泛NPU 功能的多个不同芯片的经验 。 我们想找到更好的方法来帮助我们自己的AI 工程师完成这项任务 , 因此在开发我们对aiWare NPU 本身和支持它的aiWare Studio工具的要求时 , 我们发现了一些在我们过去使用过的硬件平台上没有看到的理想特性:

相关经验推荐