神经网络怎样用单片机实现(01/14收集汇总)

神经网络怎样用单片机实现

  本文收集汇总于01/14日,今天给各位分享神经网络怎样用单片机实现的知识,其中也会对神经网络怎样用单片机实现进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

一、训练好的卷积神经网络怎么应用到单片机上?

首先要选择一款端侧的推理框架,如MindSpore、NCNN等。需要将pytorch模型转为onnx模型(使用torch.onnx.export),因为onnx基本上是这些框架都支持的。如果是应用到安卓手机上,一般开发流程是:
使用推理框架的转换工具将onnx模型转换为推理框架的模型格式,在这个过程中模型转换工具会进行模型优化、模型小型化等;使用Android Studio将模型文件和推理框架的链接库打包到应用程序中在应用程序中,调用推理框架接口进行推理,通常的推理接口的调用顺序为:加载模型文件读取输入的图片并将图片数据转为模型的输入张量(使用opencv接口或者框架自带的数据处理接口)调用框架推理接口进行模型推理获取推理输出结果并将输出的张量转为分类标签的置信度。一般将图片数据转为模型的输入张量时,需要对图片数据进行处理,例如reisze图片大小。
图像分类模型的一般有两种类型,一种是多分类模型(可以对图片中的多个物体,进行分类),一种是单分类模型(只能对图片的一个物体进行分类)。 如果是单分类模型,在输出结果获取置信度最高的分类,作为分类结果; 如果是多分类模型,简单的做法,取置信度大于0.5的分类,即为分类结果。
给一个具体的例子,以MindSpore作为推理框架在手机上进行推理为例:
首先:使用转换工具进行转换:
converter_lite --fmk=ONNX --modelFile=classify.onnx --outputFile=classify_mindspore
其次:在应用程序的代码中调用MindSpore接口进行推理:
size_t size = 0; char* model_buf = ReadFile(mode_path, &size); //读取模型文件 mindspore::lite::Context ctx; //context中可以设置线程数等环境变量 auto session = mindspore::session:: LiteSession:: CreateSession(model_buf, size, &ctx); //创建用于推理的会话 auto inputs = session ->GetInputs(); //获取input数据地址 // resize image, convert image to input tensor, normalize the input tensor //Preprocess(); session-> RunGraph();//执行推理 auto outputs = session->GetOutputs(); //convert output tensor to category score //Postprocess();

二、训练好的卷积神经网络怎么应用到单片机上?

假设你现在是用pytorch训练好的模型,首先第一步你需要将其转化成onnx,大多数推理引擎或者部署的中间件都会支持onnx网络前端的解析。下面我们分情况去做讨论:
一、嵌入式平台计算的backend为cpu、gpu
首先你要选定一款推理框架,常见的有MNN、NCNN、Tengine等等。接下来就是明确porting的流程:
(1)模型的parsing:
上述提到的推理框架都会有自己的模型格式,也会提供相应的工具给你进行parsing。若你的网络设计中包含推理框架不支持的op,则改步骤无法完成。需要你返回模型训练的定义部分进行相应的修改,或者基于推理框架的接口进行Op的拓展。
(2)数值仿真(可选)
部分推理框架提供了上位机的数值仿真工具或者python库,用户在上位机中就可以进行网络的数值仿真。该步骤主要为了验证第一步模型parsing以及推理框架的接口调用的正确性。
(3)native业务代码
该部分大家可根据各推理框架提供的demo实例进行调用即可,如果数值仿真这一步没什么问题,基本上工期是可以预计的。
二、嵌入式平台的backend为npu等asic ip
npu的ip供应商一般会提供npu相关的中间件给到soc厂家进行封装,porting的流程如下:
(1)模型的parsing
原理大致同上,不同的地方在于,npu大多为8bit的定点计算。ip vendor或soc vendor会额外提供相应的量化中间件给你进行模型的parsing及量化。量化精度误差跟算法任务、网络设计、量化算法以及calibration数据等都有关系,碰坑需耐心。。。
(2)数值仿真
针对npu的使用场景,各家都会提供上位机的数值仿真工具和py库。由于做了模型的定点化,所以在数值仿真阶段,我们不仅要关注输出节点,在项目工期允许的情况下,还应关注中间节点的数值误差精度。一般我都是逐个op的去比较量化后结果和上位机上对应的fp32结果的一个cos-similarity similarity。若遇到中间结果的量化误差精度很大,则逐步从量化数据、量化预处理、模型设计等角度进行反推修正。
(3)native业务代码
根据demo进行调用,建议同上。
上面仅介绍了怎样去应用和落地,但若想做到算法效果、推理性能、功耗的一个平衡,算法和工程上还是需要花很多功夫的。

三、使用那些库函数写出来的程序(比如机器学习和神经网络)怎样在单片机等嵌入式设备上实现?

现在单片机开发也不是从写寄存器开始了,厂家都会提供驱动库,ST有提供AI相关的库,可以了解一下。

文章说明:本文收集于网络,仅作参考,若有侵权,请联系本站删除!

免责声明:本站部分内容转载于网络,其中内容仅代表作者个人观点,与本网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与本网联系,我们将及时更正、删除,谢谢。

本站联系邮箱: 本站联系邮箱:douxingdu02@163.co m