1 AI模型部署边缘设备的奇妙之旅:如何实现手写数字识别-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

AI模型部署边缘设备的奇妙之旅:如何实现手写数字识别

福州市凌睿智捷电子有限公司 2024-12-07 01:07 次阅读

1 简介

近年来,人工智能AI)技术的突破性进展为嵌入式系统带来了新的生机。AI技术的融入使得嵌入式系统能够更加智能地处理复杂任务, 如图像识别、语音识别、自然语言处理等。这种融合不仅提高了嵌入式系统的智能化水平,还极大地拓展了其应用范围, 使得嵌入式系统在智能家居、智能交通、智能医疗等领域有了更深层次的运用。AI技术的嵌入,已经成为未来嵌入式系统发展 的一个重要趋势。踏入边缘端部署的第一步,我们可以从一个经典的机器学习案例——手写数字识别开始。手写数字识别是AI技术与嵌入式系统融合的一个直观且易于理解的例子。它不仅展示了如何在资源受限的设备上运行复杂的AI算法,而且体现了将智能处理推向数据产生源的重要性,从而减少对云端计算的依赖。

2 基础知识

2.1 神经网络模型概览

神经网络模型的设计灵感来源于人类大脑的结构。人脑由大量相互连接的神经元组成,这些神经元通过电信号传递信息,帮助我们处理和理解周围的世界。模仿这一过程,人工神经网络(ANN)利用软件构建的人工神经元或节点来解决复杂问题。这些节点被组织成层,并通过计算系统执行数学运算以求解问题。一个典型的神经网络模型包括三个主要部分:

输入层:负责接收来自外部世界的原始数据,如图像、声音或文本等。输入节点对这些数据进行初步处理后,将它们传递给下一层。

隐藏层:位于输入层与输出层之间,可以有一层或多层。每一层都会对接收到的数据进行分析和转换,逐步提取特征直至形成抽象表示。隐藏层的数量和宽度决定了网络的深度和复杂性。

输出层:最终产生网络的预测结果。根据任务的不同,输出层可能包含单个节点(例如二分类问题中的0或1)或者多个节点(如多类别分类问题)。

9665f9e8-b3f4-11ef-8084-92fbcf53809c.png

为了更直观地理解神经网络的工作原理,我们可以使用在线工具A Neural Network Playground

96745d30-b3f4-11ef-8084-92fbcf53809c.png

当神经网络中包含多个隐藏层时,它就被称为深度神经网络(DNN),也即深度学习网络。这类网络通常拥有数百万甚至更多的参数,使得它们能够捕捉到数据内部非常复杂的非线性关系。在深度神经网络中,每个节点之间的连接都有一个权重值,用来衡量两个节点间的关联强度;正权重表示激励作用,而负权重则意味着抑制作用。较高的权重意味着该节点对其相邻节点的影响更大。理论上讲,足够深且宽的神经网络几乎可以拟合任意类型的输入输出映射。然而,这种能力是以需要大量的训练数据为代价的——相比起简单的浅层网络,深度神经网络往往需要数百万级别的样本才能达到良好的泛化性能。

2.3 常见的神经网络类型

根据具体应用场景和技术特点,人们开发了多种不同类型的神经网络架构:

前馈神经网络(FNN):最基础的一种形式,其中数据仅沿单一方向流动,从输入层经过一系列隐藏层到达输出层,不存在反馈路径。

卷积神经网络(CNN):特别擅长于图像识别任务,因其特殊的滤波器设计能够有效地捕捉图像的空间结构信息。

循环神经网络(RNN):适用于处理序列数据,比如自然语言处理中的句子或是时间序列分析中的股票价格走势。RNN具备记忆功能,允许当前时刻的状态依赖于之前时刻的状态。

长短期记忆网络(LSTM) 和门控循环单元(GRU):作为RNN的改进版本,旨在克服传统RNN中存在的梯度消失问题,从而更好地建模长时间跨度上的依赖关系。

生成对抗网络(GAN):由两个子网络构成,一个是生成器用于创造新的数据样本,另一个是判别器用来判断这些样本的真实性。两者相互竞争,共同进化,最终实现高质量的数据合成。

2.4 模型优化技术

在将深度学习模型部署到资源受限的环境中时,模型优化技术扮演着至关重要的角色。这些技术旨在减少模型的大小、降低计算复杂度,并提高推理速度,同时尽量保持或最小化对模型准确性的负面影响。以下是三种常见的模型优化技术:剪枝、量化和蒸馏。

2.4.1 剪枝(Pruning)

剪枝是一种通过移除神经网络中不重要或冗余的连接(权重)或节点来压缩模型的技术。通常,剪枝是基于权重的绝对值大小来进行的,即认为较小的权重对于模型的重要性较低,可以被安全地删除。

过程

预训练阶段:首先训练一个大型的初始模型。

剪枝阶段:根据设定的标准(如阈值)去除部分权重或整个神经元。

微调阶段:对剪枝后的模型进行再训练,以恢复可能因剪枝而损失的精度。

优点

显著减少了模型参数的数量,从而降低了存储需求和计算成本。

对于某些应用,可以通过剪枝实现更高的效率,尤其是在硬件加速器上。

挑战

剪枝可能会导致模型性能下降,因此需要仔细选择剪枝策略并进行适当的再训练。

高度非线性的问题中,简单地剪枝可能会造成较大的准确率损失。

2.4.2 量化(Quantization)

模型量化是深度学习模型优化的一种关键技术,旨在通过减少模型参数和激活值的数值精度来降低模型的存储需求和计算复杂度。具体来说,量化通常涉及将浮点数(如32位或16位)表示的权重和激活转换为低精度的数据类型(如8位整数或更低),从而实现模型压缩和加速推理。

过程

(1)训练后量化

这是最简单的方法,直接应用于已经训练好的模型。过程如下:

统计分析:收集模型中所有层的激活和权重分布信息。

确定范围:根据统计结果确定量化范围(例如最小值和最大值),以便将浮点数映射到整数区间。

应用量化:将浮点权重和激活值按照预定规则转换为低精度整数。

校准(可选):为了最小化量化误差,可以通过少量数据集进行校准,调整量化参数。

这种方法的优点是不需要重新训练模型,但可能导致一定程度的精度损失。

(2)量化感知训练

量化感知训练在模型训练阶段就引入了量化操作。这意味着在整个训练过程中,模型会“学习”如何更好地适应量化后的环境。 步骤包括:

vwin 量化:在前向传播时,模拟量化过程,即用低精度数值代替高精度数值来进行计算。

反向传播与更新:在反向传播期间,仍然使用原始浮点梯度进行参数更新,确保模型能够正常收敛。

逐步量化:可以选择性地先对某些层进行量化,观察其影响后再决定是否对其他层也实施量化。

最终量化:完成训练后,将模型完全转换为量化版本。

这种方法通常能保留更多的模型精度,因为模型已经在训练中学会了应对量化带来的变化。

优点

显著降低模型的存储需求和计算复杂度。

在特定硬件(如GPU、NPU)上运行时,可以大幅提升推理速度。

挑战

可能会导致一定的精度损失,尽管这种损失通常是可控的。

不同类型的模型和任务对量化敏感度不同,需谨慎评估。

2.4.3 蒸馏(Knowledge Distillation)

蒸馏,也称为知识迁移,是一种通过“教师”模型指导“学生”模型学习的方法。“教师”模型通常是更大、更复杂的模型,具有较高的准确性;而“学生”模型则设计得更加紧凑,以便于部署。“教师”的输出(软标签)作为额外信息传递给“学生”,帮助其学习。

过程

教师模型训练:先训练出一个高性能但可能过于庞大的教师模型。

学生模型训练:使用教师模型的输出作为监督信号,训练一个较小的学生模型,使其模仿教师的行为。

混合损失函数:结合硬标签(原始目标值)与软标签(教师预测),构成最终的损失函数用于训练学生模型。

优点

可以在几乎不影响预测质量的情况下大幅减小模型规模。

学生模型继承了教师的知识,能够在资源受限的设备上高效运行。

挑战

设计有效的教学策略以及选择合适的损失函数是关键。

教师模型的质量直接影响到学生的学习效果,因此需要高质量的教师模型。

2.5 ONNX

ONNX(Open Neural Network Exchange)是一种用于在各种深度学习框架之间转换神经网络模型的开放格式。它允许用户将训练好的模型从深度学习框架转换为其他框架,或者将模型从一种框架转换为另一种框架。借助它支持不同的人工智能框架(如 PyTorch、MXNet)采用相同格式存储模型数据并交互。

968aadf6-b3f4-11ef-8084-92fbcf53809c.png

在没有ONNX之前,每个深度学习框架都有其自己的模型格式,这导致了所谓的“框架锁定”问题——即一旦选择了某个框架进行开发,就很难将模型迁移到其他框架中去。ONNX通过定义一种标准化的模型交换格式打破了这种限制,允许模型在PyTorch、TensorFlow、MXNet等流行框架之间自由转换。这意味着开发者可以根据项目需求灵活选择最适合的工具链,而不必担心后期迁移的成本。对于那些希望快速迭代并优化模型的企业和个人开发者而言,ONNX极大地简化了从研究到生产的路径。例如,研究人员可以在一个框架中设计并训练模型,而工程师则可以轻松地将该模型转换为另一种更适合生产环境的框架来部署。此外,许多推理引擎和硬件加速器也支持ONNX格式,从而进一步加快了模型部署的速度。

在凌智视觉模块中模型转换就比较简单,我们只需要点击运行即可,下面是具体的代码。

%cd /home/aistudio/PaddleX!pip uninstall -y paddle2onnx!pip install paddle2onnx -i https://pypi.doubanio.com/simple/ --trusted-host pypi.douban.com!paddle2onnx --model_dir ./output/best_model/inference \ --model_filename inference.pdmodel \ --params_filename inference.pdiparams \ --save_file ${MODEL_NAME}.onnx \ --deploy_backend rknn!cp ${MODEL_NAME}.onnx /home/aistudio/output%cd /home/aistudio/LockzhinerVisionModule然后使用 LockzhinerVisionModule 模型转换工具,将 ONNX 模型转换为 RKNN 模型。# 将 FP32 ONNX 模型转换为 RKNN 模型import osdef list_image_files(directory, output_file): with open(output_file, 'w') as f: for root, dirs, files in os.walk(directory): for file in files: if file.lower().endswith(('.png', '.jpg', '.jpeg')): abs_path = os.path.abspath(os.path.join(root, file)) f.write(abs_path + '\n')directory_path = '/home/aistudio/data/Dataset' # 替换为你的目录路径output_file_path = 'dataset.txt' # 输出文件名list_image_files(directory_path, output_file_path)!pip install onnxslim!python utils/export.py \ --config_path=./configs/${MODEL_NAME}.yaml \ --model_load_path=/home/aistudio/output/${MODEL_NAME}.onnx \ --model_save_path=/home/aistudio/output/${MODEL_NAME}.rknn \ --target_platform=RV1106

2.6 边缘端部署需考虑因素

边缘计算是一种将数据处理任务尽可能靠近数据源执行的计算模式,其主要目的是减少延迟、节省带宽,并增强隐私保护。与依赖远程数据中心进行数据处理和存储的传统云计算不同,边缘计算让智能处理更贴近用户或传感器,带来了显著的优势:

低延迟:由于减少了数据往返云端的时间,边缘计算可以实现近乎即时的数据处理和响应。

带宽优化:通过在本地处理数据,边缘计算减少了需要上传到云端的数据量,从而降低了通信成本和网络负载。

隐私与安全:敏感数据可以在本地处理,而不必传输到外部服务器,这有助于更好地保护用户隐私和数据安全。

然而,边缘计算也带来了独特的挑战,特别是在资源受限的嵌入式系统中部署复杂的AI模型时。为了确保神经网络模型能够在边缘设备上高效运行,必须考虑以下关键因素:

(1)硬件性能限制

边缘设备通常配备有较低功耗的处理器(如CPU或GPU),这意味着它们的计算能力有限。对于深度学习模型而言,这可能是一个瓶颈。因此,选择合适的硬件加速器变得至关重要,比如神经处理单元(NPU)、数字信号处理器(DSP)等,这些专用硬件可以显著提高推理速度,同时保持较低的功耗。

(2)内存容量

内存大小直接关系到模型的复杂度和可加载性。大型神经网络往往需要大量的RAM来存储权重和其他参数。对于内存有限的小型嵌入式系统来说,这可能意味着无法支持过于复杂的模型。因此,在设计阶段就需要权衡模型精度与所需资源之间的关系,必要时简化模型结构以适应目标平台。

(3)功耗管理

许多边缘设备依靠电池供电,这意味着长时间运行高能耗的应用程序会导致电量快速耗尽。为了延长续航时间,开发者应该采用节能算法和技术,例如量化、剪枝等方法来降低模型对计算资源的需求。此外,还可以利用动态电压频率调节(DVFS)技术根据实际工作负载调整处理器的工作状态,进一步节约电力。

(4)存储空间

尽管现代边缘设备拥有一定的内部存储,但深度学习框架及相关库可能会占用大量空间。特别是当涉及到预训练模型时,文件大小可能相当可观。因此,压缩模型或者精简依赖项成为了一个重要的考量点。使用轻量级框架、去除不必要的功能模块以及应用模型压缩技术(如量化感知训练)都是有效的解决方案。

3 部署

3.1 准备工作

在进行模型的部署之前,我们首先需要确认自己手上的模块的支持哪些算子、支持什么类型的量化(int4/int8/fp16/混合精度)、内存大小等参数,对于手上的板子有一个全面的了解。在进行部署时,我们常常将训练的模型转化成onnx中间文件,再根据硬件设备要求的转化成硬件要求的模型文件。在本次实验中,我使用的模块是凌智视觉模块(Lockzhiner Vision Module) ,这个模块是福州市凌睿智捷电子有限公司联合百度飞桨倾力打造的一款高集成度人工智能视觉模块,专为边缘端人工智能和机器视觉应用而设计,模块的参数如下图所示。

96b54a48-b3f4-11ef-8084-92fbcf53809c.png

这个模块有着一个很吸引人的特点与飞桨低代码开发工具 PaddleX 完美适配,配合飞桨星河社区 Al Studio, 可以实现一键训练;配合凌智视觉算法部署库,用户可以实现一键部署,减少我们在模型部署时遇到的疑难杂症。如果遇到问题,可以去厂家开源仓库提交问题。凌智视觉模块Gitee链接

3.2 模型转换

废话不多说,试一试这个低代码平台是否真的如宣传所说的那样容易使用。在 百度飞桨的 AiStudio 中,搜索【PaddleX】在凌智视觉模块上部署手写数字分类模型如果说有自己制作数据的话,需要将数据上传,然后在修改全局配置项,修改数据集地址以及对应的类别数。

96c09c90-b3f4-11ef-8084-92fbcf53809c.png

按照厂家提供的配置直接进行训练转换。

96e17d7a-b3f4-11ef-8084-92fbcf53809c.png

模型的训练时间大概为半个小时,训练完成后,会自动生成一个rknn模型文件,

3.3 部署结果

模型的推理结果如下图所示

96f2e092-b3f4-11ef-8084-92fbcf53809c.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式系统
    +关注

    关注

    41

    文章

    3587

    浏览量

    129427
  • AI
    AI
    +关注

    关注

    87

    文章

    30726

    浏览量

    268870
  • 人工智能
    +关注

    关注

    1791

    文章

    47182

    浏览量

    238192
收藏 人收藏

    评论

    相关推荐

    边缘AI应用越来越普遍,AI模型边缘端如何部署

    模型在端侧的部署也成了业界关注的焦点。   如何把AI 模型边缘部署   首先得软硬件适配
    的头像 发表于 07-04 00:11 2632次阅读
    <b class='flag-5'>边缘</b><b class='flag-5'>AI</b>应用越来越普遍,<b class='flag-5'>AI</b><b class='flag-5'>模型</b>在<b class='flag-5'>边缘</b>端如何<b class='flag-5'>部署</b>?

    边缘部署模型优势多!模型量化解决边缘设备资源限制问题

    德赢Vwin官网 网报道(文/李弯弯)大模型边缘部署是将大模型部署边缘
    的头像 发表于 01-05 00:06 3511次阅读

    AI模型部署边缘设备奇妙之旅:如何实现手写数字识别

    ,我们可以从一个经典的机器学习案例——手写数字识别开始。手写数字识别
    发表于 12-06 17:20

    AI模型部署边缘设备奇妙之旅:如何在边缘部署OpenCV

    识别、分类、跟踪、场景重建等。这可能涉及到机器学习和深度学习模型的应用。 简而言之,图像处理是计算机视觉的基础,提供了必要的工具和技术来预处理和优化图像数据;而计算机视觉则是在此基础之上,通过更加复杂
    发表于 12-14 09:31

    AI模型部署边缘设备奇妙之旅:目标检测模型

    以及边缘计算能力的增强,越来越多的目标检测应用开始直接在靠近数据源的边缘设备上运行。这不仅减少了数据传输延迟,保护了用户隐私,同时也减轻了云端服务器的压力。然而,在边缘
    发表于 12-19 14:33

    基于RBM实现手写数字识别高准确率

    DL之RBM:基于RBM实现手写数字识别高准确率
    发表于 12-28 10:19

    MNIST数据集训练手写数字识别模型的优化

    TensorFlow笔记(4)——优化手写数字识别模型之代价函数和拟合
    发表于 10-21 10:39

    EdgeBoard FZ5 边缘AI计算盒及计算卡

    实现模型的训练、部署、推理等一站式服务,降低AI开发门槛。5 卓越品质与可靠性设计,直面工业场景高效开发宽温设计,适应-40度到+70度环境温度;整体式无风扇被动散热,适应工业场景的
    发表于 08-31 14:12

    【HarmonyOS HiSpark AI Camera】基于图像的手语识别机器人系统

    和图像,再把数字特征进行分类器模型预测,将预测结果以文本和语音形式展现出来。②把训练模型进行裁剪量化部署到IOT设备上,
    发表于 09-25 10:11

    如何将AI模型部署到嵌入式系统中

    本期我们分享主题是如何将 AI 模型部署到嵌入式系统中,下一期将介绍如何在 RT-Thread 操作系统上运行 Mnist Demo(手写数字
    发表于 12-14 07:55

    介绍在STM32cubeIDE上部署AI模型的系列教程

    介绍在STM32cubeIDE上部署AI模型的系列教程,开发板型号STM32H747I-disco,值得一看。MCUAI原文链接:【嵌入式AI开发】篇四|
    发表于 12-14 09:05

    如何去实现基于K210的MNIST手写数字识别

    基于K210的MNIST手写数字识别硬件平台采用Maixduino开发板在sipeed官方有售软件平台使用MaixPy环境进行单片机的编程 官方资源可在这里下载 链接: [link]http
    发表于 02-17 07:35

    嵌入式边缘AI应用开发指南

    保驾护航。下面让我们来了解如何不借助手动工具或手动编程来选择模型、随时随地训练模型并将其无缝部署到TI处理器上,从而实现硬件加速推理。图1: 边缘
    发表于 11-03 06:53

    Pytorch实现MNIST手写数字识别

    Pytorch 实现MNIST手写数字识别
    发表于 06-16 14:47 7次下载

    AI模型部署边缘设备奇妙之旅:目标检测模型

    的重要特征进行分类和提取,并有效排除无用的多余特征,进而实现图像识别。一般而言,图像识别有四大类任务:(1)分类-Classification:解决“是什么?”的问
    的头像 发表于 12-19 14:12 190次阅读
    <b class='flag-5'>AI</b><b class='flag-5'>模型</b><b class='flag-5'>部署</b><b class='flag-5'>边缘</b><b class='flag-5'>设备</b>的<b class='flag-5'>奇妙</b><b class='flag-5'>之旅</b>:目标检测<b class='flag-5'>模型</b>