1 简介近年来,人工智能(AI)技术的突破性进展为嵌入式系统带来了新的生机。AI技术的融入使得嵌入式系统能够更加智能地处理复杂任务, 如图像识别、语音识别、自然语言处理等。这种融合不仅提高了嵌入式系统的智能化水平,还极大地拓展了其应用范围, 使得嵌入式系统在智能家居、智能交通、智能医疗等领域有了更深层次的运用。AI技术的嵌入,已经成为未来嵌入式系统发展 的一个重要趋势。踏入边缘端部署的第一步,我们可以从一个经典的机器学习案例——手写数字识别开始。手写数字识别是AI技术与嵌入式系统融合的一个直观且易于理解的例子。它不仅展示了如何在资源受限的设备上运行复杂的AI算法,而且体现了将智能处理推向数据产生源的重要性,从而减少对云端计算的依赖。 2 基础知识2.1 神经网络模型概览神经网络模型的设计灵感来源于人类大脑的结构。人脑由大量相互连接的神经元组成,这些神经元通过电信号传递信息,帮助我们处理和理解周围的世界。模仿这一过程,人工神经网络(ANN)利用软件构建的人工神经元或节点来解决复杂问题。这些节点被组织成层,并通过计算系统执行数学运算以求解问题。 一个典型的神经网络模型包括三个主要部分:
2.3 常见的神经网络类型根据具体应用场景和技术特点,人们开发了多种不同类型的神经网络架构:
2.4 模型优化技术在将深度学习模型部署到资源受限的环境中时,模型优化技术扮演着至关重要的角色。这些技术旨在减少模型的大小、降低计算复杂度,并提高推理速度,同时尽量保持或最小化对模型准确性的负面影响。以下是三种常见的模型优化技术:剪枝、量化和蒸馏。 2.4.1 剪枝(Pruning)剪枝是一种通过移除神经网络中不重要或冗余的连接(权重)或节点来压缩模型的技术。通常,剪枝是基于权重的绝对值大小来进行的,即认为较小的权重对于模型的重要性较低,可以被安全地删除。 过程:
优点:
挑战:
2.4.2 量化(Quantization)模型量化是深度学习模型优化的一种关键技术,旨在通过减少模型参数和激活值的数值精度来降低模型的存储需求和计算复杂度。具体来说,量化通常涉及将浮点数(如32位或16位)表示的权重和激活转换为低精度的数据类型(如8位整数或更低),从而实现模型压缩和加速推理。 过程 (1)训练后量化 这是最简单的方法,直接应用于已经训练好的模型。过程如下:
这种方法的优点是不需要重新训练模型,但可能导致一定程度的精度损失。 (2)量化感知训练 量化感知训练在模型训练阶段就引入了量化操作。这意味着在整个训练过程中,模型会“学习”如何更好地适应量化后的环境。 步骤包括:
这种方法通常能保留更多的模型精度,因为模型已经在训练中学会了应对量化带来的变化。 优点:
挑战:
2.4.3 蒸馏(Knowledge Distillation)蒸馏,也称为知识迁移,是一种通过“教师”模型指导“学生”模型学习的方法。“教师”模型通常是更大、更复杂的模型,具有较高的准确性;而“学生”模型则设计得更加紧凑,以便于部署。“教师”的输出(软标签)作为额外信息传递给“学生”,帮助其学习。 过程:
优点:
挑战:
2.5 ONNXONNX(Open Neural Network Exchange)是一种用于在各种深度学习框架之间转换神经网络模型的开放格式。它允许用户将训练好的模型从深度学习框架转换为其他框架,或者将模型从一种框架转换为另一种框架。借助它支持不同的人工智能框架(如 PyTorch、MXNet)采用相同格式存储模型数据并交互。 在没有ONNX之前,每个深度学习框架都有其自己的模型格式,这导致了所谓的“框架锁定”问题——即一旦选择了某个框架进行开发,就很难将模型迁移到其他框架中去。ONNX通过定义一种标准化的模型交换格式打破了这种限制,允许模型在PyTorch、TensorFlow、MXNet等流行框架之间自由转换。这意味着开发者可以根据项目需求灵活选择最适合的工具链,而不必担心后期迁移的成本。 对于那些希望快速迭代并优化模型的企业和个人开发者而言,ONNX极大地简化了从研究到生产的路径。例如,研究人员可以在一个框架中设计并训练模型,而工程师则可以轻松地将该模型转换为另一种更适合生产环境的框架来部署。此外,许多推理引擎和硬件加速器也支持ONNX格式,从而进一步加快了模型部署的速度。 在凌智视觉模块中模型转换就比较简单,我们只需要点击运行即可,下面是具体的代码。
2.6 边缘端部署需考虑因素边缘计算是一种将数据处理任务尽可能靠近数据源执行的计算模式,其主要目的是减少延迟、节省带宽,并增强隐私保护。与依赖远程数据中心进行数据处理和存储的传统云计算不同,边缘计算让智能处理更贴近用户或传感器,带来了显著的优势:
然而,边缘计算也带来了独特的挑战,特别是在资源受限的嵌入式系统中部署复杂的AI模型时。为了确保神经网络模型能够在边缘设备上高效运行,必须考虑以下关键因素: (1)硬件性能限制 边缘设备通常配备有较低功耗的处理器(如CPU或GPU),这意味着它们的计算能力有限。对于深度学习模型而言,这可能是一个瓶颈。因此,选择合适的硬件加速器变得至关重要,比如神经处理单元(NPU)、数字信号处理器(DSP)等,这些专用硬件可以显著提高推理速度,同时保持较低的功耗。 (2)内存容量 内存大小直接关系到模型的复杂度和可加载性。大型神经网络往往需要大量的RAM来存储权重和其他参数。对于内存有限的小型嵌入式系统来说,这可能意味着无法支持过于复杂的模型。因此,在设计阶段就需要权衡模型精度与所需资源之间的关系,必要时简化模型结构以适应目标平台。 (3)功耗管理 许多边缘设备依靠电池供电,这意味着长时间运行高能耗的应用程序会导致电量快速耗尽。为了延长续航时间,开发者应该采用节能算法和技术,例如量化、剪枝等方法来降低模型对计算资源的需求。此外,还可以利用动态电压频率调节(DVFS)技术根据实际工作负载调整处理器的工作状态,进一步节约电力。 (4)存储空间 尽管现代边缘设备拥有一定的内部存储,但深度学习框架及相关库可能会占用大量空间。特别是当涉及到预训练模型时,文件大小可能相当可观。因此,压缩模型或者精简依赖项成为了一个重要的考量点。使用轻量级框架、去除不必要的功能模块以及应用模型压缩技术(如量化感知训练)都是有效的解决方案。 3 部署3.1 准备工作在进行模型的部署之前,我们首先需要确认自己手上的模块的支持哪些算子、支持什么类型的量化(int4/int8/fp16/混合精度)、内存大小等参数,对于手上的板子有一个全面的了解。在进行部署时,我们常常将训练的模型转化成onnx中间文件,再根据硬件设备要求的转化成硬件要求的模型文件。 在本次实验中,我使用的模块是凌智视觉模块(Lockzhiner Vision Module) ,这个模块是福州市凌睿智捷电子有限公司联合百度飞桨倾力打造的一款高集成度人工智能视觉模块,专为边缘端人工智能和机器视觉应用而设计,模块的参数如下图所示。 3.2 模型转换废话不多说,试一试这个低代码平台是否真的如宣传所说的那样容易使用。在 百度飞桨的 AiStudio 中,搜索【PaddleX】在凌智视觉模块上部署手写数字分类模型 如果说有自己制作数据的话,需要将数据上传,然后在修改全局配置项,修改数据集地址以及对应的类别数。 按照厂家提供的配置直接进行训练转换。 模型的训练时间大概为半个小时,训练完成后,会自动生成一个rknn模型文件, 3.3 部署结果模型的推理结果如下图所示 |
快速部署!米尔全志T527开发板的OpenCV行人检测方案指南
5294 浏览 0 评论
3030 浏览 0 评论
边缘设备的奇妙之旅:在小凌派-RK2206上部署AI模型来实现视觉巡线
1429 浏览 0 评论
4927 浏览 0 评论
超强算力+实时响应!米尔发布基于STM32MP25x核心板Debian系统
9380 浏览 0 评论