HiSi 3516CV500 NNIE(Neural Network Inference Engine) 摸鱼记录(3) ---真机调试(实例分析)

#PS:要转载请注明出处,本人版权所有

#PS:这个只是 《 我自己 》理解,如果和你的

#原则相冲突,请谅解,勿喷

背景

本文建立前两篇的文章基础之上:
《HiSi 3516CV500 NNIE(Neural Network Inference Engine) 摸鱼记录(1) — 环境搭建》
https://blog.csdn.net/u011728480/article/details/91125581
《HiSi 3516CV500 NNIE(Neural Network Inference Engine) 摸鱼记录(2) — 模型生成及模型仿真(实例分析)》
https://blog.csdn.net/u011728480/article/details/91294917
本文将会以一个实例来进行分析。hisi svp sdk的基础之上。同时本文也是本系列文章的终章。

NNIE 使用流程(其实就是读其sdk文档)

hisi svp 整体框架
vision app
--------------------
mpi(MPP Program Interface)
--------------------
driver(ko)
--------------------
nnie(hardware)

从上述框架来说,我们要自己用的内容就是vision app 、mpi、以及nnie api
vision app就是做图像数据的准备以及结果处理,mpi做mmz内存分配(海思特有的内存空间),nnie做forward。

相关api 简介
/*
* mpp System init
*/
HI_MPI_SYS_Exit()
HI_MPI_VB_Exit()
//设置MPP 视频缓存 池 属性 。
HI_MPI_VB_SetConfig()
HI_MPI_VB_Init()
HI_MPI_SYS_Init()
//load model
//在mmz中分配一部分内存来存放model
HI_MPI_SYS_MmzAlloc()
//从mmz内存中解析模型
HI_MPI_SVP_NNIE_LoadModel()
//NNIE  Param  Init

//forward prepare
//------------------------根据model的配置,为每一段(这里你可以简单理解为层)的forward ctrl param , src Blob, dst Blob.也就是初始化SVP_NNIE_FORWARD_CTRL_S[],SVP_NNIE_FORWARD_WITHBBOX_CTRL_S[],SVP_SRC_BLOB_S[],SVP_DST_BLOB_S[]数组元素的值。
HI_MPI_SVP_NNIE_GetTskBufSize()//获取给定网络任务 各段 辅助内存
HI_MPI_SVP_NNIE_AddTskBuf()//记录TskBuf 地址 信息

//----------------给第一层送入预处理好的图片到SVP_SRC_BLOB_S

HI_MPI_SYS_MmzFlushCache()//刷新内存
HI_MPI_SVP_NNIE_Forward()//forward
HI_MPI_SVP_NNIE_Query()//查询forward任务是否完成
HI_MPI_SYS_MmzFlushCache()//刷新内存


//---------------解析HI_MPI_SVP_NNIE_Forward的参数astDst[],得到网络的最终输出

各种类型的forward其实hisi都已经有各个例子可以参考的。上面的总结也是我从它的例子中剥离出来的。我这里也想吐槽一下,hisi例子写的很好,就是封装的层数太多了,反而让人感觉很不爽。

NNIE 开发实例流程(其实就是参考其sample)

魔改hisi sample

在hisi sdk中,提供了多种网络的例子,这里以我的cnn 分类网络为例。
根据前文可以得到inst 的wk模型。以及一个预处理好的图片bin文件。

找到目标文件,smp/a7_linux/mpp/sample/svp/nnie/sample/sample_nnie.c,直接复制void SAMPLE_SVP_NNIE_Cnn(void)为我的函数,修改图片bin路径和wk路径。
在这里插入图片描述
作为新手,不建议去看其他的,直接改最后一部分,打印最后一层输出,直接和仿真的值进行对比。当然你熟悉后就必须自己一点点看懂,不然出错没有办法纠正。
在这里插入图片描述
我这里给个demo参考例子。结果打印:
在这里插入图片描述
仿真以及caffe输出值对比最后一层:
在这里插入图片描述
可以发现确实是对应上了,这就证明了这个网络至少跑出来的大方向是没问题了,剩下的就是自己组织优化的问题了。

注意

如果出现最后输出对应不上,先去检查图像输入对不对,也就是srcBlob的第一层是不是一样的,70%都是这里出问题了。
其次再去看打印的方式对不对。
最后看整个nnie器件你使用对不对。

总结

要完成这个事情,需要对深度学习,嵌入式编程有一定基础才行。一般来说,都是算法出模型,嵌入式的人做这个事情,当然有兴趣的话都一起做也行。这里我想说的是这是一个学科交叉的事情,单单了解一个方向的知识都不行的。所以,一定要多沟通,才能够干好这个事情。

其实这也是嵌入式方向的人的一个契机,当你了解一些基本的深度学习知识,而且又掌握嵌入式相关的内容,肯定是非常不错的,毕竟这是一个非常有趣的事情。

#PS:请尊重原创,不喜勿喷

#PS:要转载请注明出处,本人版权所有.

有问题请留言,看到后我会第一时间回复

  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 28
    评论
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值