Hi3559AV100 NNIE开发(7) Ruyistudio 输出mobileface_func.wk与板载运行mobileface_chip.wk输出中间层数据对比
前面随笔讲了关于NNIE的整个开发流程,并给出了Hi3559AV100 NNIE开发(5)mobilefacenet.wk仿真成功量化及与CNN_convert_bin_and_print_featuremap.py输出中间层数据对比过程:https://www.cnblogs.com/iFrank/p/14528882.html,下文是Hi3559AV100 NNIE开发(7) Ruyistudio 输出mobileface_func.wk与板载运行mobileface_chip.wk输出中间层数据对比,通过在Hi3559AV100平台上跑mobileface NNIE,来验证mobileface.caffemodel模型的正确性,便于后续MPP开发。
1、开发环境
操作系统:Windows 10
仿真工具: Ruyi Studio 2.0.28
开发平台: Hi3559AV100(SDK020)
网络模型: Mobilefacenet(CNN)
框架:Caffe1.0
2、NNIE开发流程

3、基于Hi3559AV100的mobileface网络的MPP开发流程
在测试前先给出NNIE一般量化流程,并给出我的测试结果:
(1)需要把其他非caffemodel模型对应转换到caffemodel模型,因为Hi35xx系列NNIE只支持caffemodel模型;
(2)配置仿真量化参数(即配置mobilefacenet.cfg)进行PC仿真量化,获得中间层输出结果A(mapper_quant目录下);
(3)使用RuyiStudio提供的python中间层输出工具,获得中间层输出结果B(data/ouput目录下);
(4)使用Ruyi Studio的向量对比工具Vector Comparison对A和B进行对比,观察误差,使误差控制在一定范围(利用CosineSimilarity参数),目前我测试的正确率为0.9914857;
(5)配置板载chip运行量化参数生成mobilefacenet.wk文件,上板运行获得输出结果C;
(6)对比结果A和C,使仿真与板载误差控制在可接受范围内,目前我测试的正确率为0.9946077;
(7)之后进行MPP开发,关键在于对NNIE Blob数据的处理;

因为Mobileface.wk在板载运行时,输入的为.bgr格式图形,之前写的随笔VS2015上OpenCV-2.4.13安装与Hi35xx .jpg/.bmp格式转.bgr格式开发 :https://www.cnblogs.com/iFrank/p/14552094.html,也已经给出实现过程,现再次给出基于OpenCV实现的.jpg转.bgr的实现代码:
1 #include <stdio.h>
2 #include <windows.h>
3 #include <math.h>
4 #include <iostream>
5 #include <string>
6
7 #include "opencv2/opencv.hpp"
8 #include "opencv2/highgui/highgui.hpp"
9 #include "opencv2/imgproc/imgproc.hpp"
10
11 using namespace cv;
12
13 typedef unsigned char U_CHAR;
14
15 int main()
16 {
17 const char *filename = "C:/Users/PC/Desktop/jpg_bgr/10_MariaCallas_28_f.jpg";
18 char *outname = "C:/Users/PC/Desktop/jpg_bgr/10_MariaCallas_28_f.bgr";
19 int flag = 1;
20
21 cv::Mat img = cv::imread(filename);
22 if (!img.data)
23 {
24 printf("read image error\n");
25 return -1;
26 }
27
28 //缩放
29 resize(img, img, Size(112, 112)); //224x224
30 //imshow("img",img);
31 //waitKey(0);
32
33 U_CHAR *data = (U_CHAR*)img.data;
34 int step = img.step;
35 printf("Step: %d, height: %d, width: %d\n",
36 step, img.rows, img.cols);
37
38 FILE *fp = fopen(outname, "wb");
39 int h = img.rows;
40 int w = img.cols;
41 int c = img.channels();
42
43 for (int k = 0; k<c; k++) {
44 for (int i = 0; i<h; i++) {
45 for (int j = 0; j<w; j++) {
46 fwrite(&data[i*step + j*c + k], sizeof(U_CHAR), 1, fp);
47 }
48 }
49 }
50 fclose(fp);
51
52 return 0;
53 }
4、RuyiStudio mobileface_func.wk仿真输出与板载mobileface_chip.wk输出比较过程
4.1、代码修改(其他NNIE参数配置根据自己板子set)
首先修改代码,主要是修改SAMPLE_SVP_NNIE_Cnn函数,具体如下(之后在加入结果输出就行):

其他参数配置根据自己的需要和板载进行调整,这里就不多说了,之后在板载终端运行之后,会产生output.hex文件,这个就是后面用来比较的数据。里面都是16进制数据,用来表示浮点数:

4.2、mobileface_chip.wk输出比较
RuyiStudio软件的Vector Comparsion设置及比较结果如下,并结合了.prototxt Graph View的图解。在 Compare 完后,双击选择需要查看的行,会弹出详细对比界面,从结果可以看出,数据数据比较精度为0.99460775,达到预期效果。


Hi3559AV100 NNIE开发(7) Ruyistudio 输出mobileface_func.wk与板载运行mobileface_chip.wk输出中间层数据对比的更多相关文章
- Hi3559AV100 NNIE开发(3)RuyiStudio软件 .wk文件生成过程-mobilefacenet.cfg的参数配置
之后随笔将更多笔墨着重于NNIE开发系列,下文是关于Hi3559AV100 NNIE开发(3)RuyiStudio软件 .wk文件生成过程-mobilefacenet.cfg的参数配置,目前项目需要对 ...
- Hi3559AV100 NNIE开发(5)mobilefacenet.wk仿真成功量化及与CNN_convert_bin_and_print_featuremap.py输出中间层数据对比过程
前面随笔给出了NNIE开发的基本知识,下面几篇随笔将着重于Mobilefacenet NNIE开发,实现mobilefacenet.wk的chip版本,并在Hi3559AV100上实现mobilefa ...
- Hi3559AV100 NNIE开发(2)-RFCN(.wk)LoadModel及NNIE Init函数运行过程分析
之后随笔将更多笔墨着重于NNIE开发系列,下文是关于Hi3559AV100 NNIE开发(2)-RFCN(.wk)LoadModel及NNIE Init函数运行过程分析,通过对LoadModel函数及 ...
- Hi3559AV100 NNIE开发(4)mobilefacenet.cfg参数配置挖坑解决与SVP_NNIE_Cnn实现分析
前面随笔给出了NNIE开发的基本知识,下面几篇随笔将着重于Mobilefacenet NNIE开发,实现mobilefacenet.wk的chip版本,并在Hi3559AV100上实现mobilefa ...
- Hi3559AV100 NNIE开发(6)RFCN中NNIE实现关键线程函数->SAMPLE_SVP_NNIE_Rfcn_ViToVo()进行数据流分析
前面随笔给出了NNIE开发的基本知识,下面几篇随笔将着重于Mobilefacenet NNIE开发,实现mobilefacenet.wk的chip版本,并在Hi3559AV100上实现mobilefa ...
- Cubieboard2裸机开发之(一)点亮板载LED
前言 CUbieboard2板载两个LED,一个绿色的,一个蓝色的,其中绿色LED通过三极管与PH20管脚连接,蓝色LED通过三极管与PH21管脚连接,这里只以蓝色LED为例,电路原理图如图1和图2所 ...
- 解决在VS2015下用C++开发的DLL在WIN7上无法加载运行
首先用Dependency Walker检查该DLL依赖的库,如下图所示: 依赖的动态库除了KERNEL32.DLL.USER32.DLL外,还包括了MSVCP120D.DLL以及MSVCR120D. ...
- 基于Hi3559AV100的SVP(NNIE)开发整体流程
在之后的hi3559AV100板载开发中,除了走通V4L2->VDEC->VPSS->VO(HDMI)输出,还有需要进行神经网络的开发学习,进行如face detection的开发等 ...
- Hi3559AV100 NNIE RFCN开发:V4L2->VDEC->VPSS->NNIE->VGS->VO系统整体动态调试实现
下面随笔将给出Hi3559AV100 NNIE RFCN开发:V4L2->VDEC->VPSS->NNIE->VGS->VO系统整体动态调试实现,最终的效果是:USB摄像 ...
随机推荐
- GitHub rename the default branch from master to main
GitHub rename the default branch from master to main master => main Repository default branch Cho ...
- 析构函数 & 构造函数
析构函数 & 构造函数 C++ 析构函数(destructor) 与构造函数相反,当对象结束其生命周期,如对象所在的函数已调用完毕时,系统自动执行析构函数. 析构函数往往用来做"清理 ...
- Make one your own Online Video Recorder by using WebRTC & vanilla javascript
Make one your own Online Video Recorder by using WebRTC & vanilla javascript Online Video Record ...
- html 布局,上下各100px,中间自适应
flex <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- alpakka-kafka(1)-producer
alpakka项目是一个基于akka-streams流处理编程工具的scala/java开源项目,通过提供connector连接各种数据源并在akka-streams里进行数据处理.alpakka-k ...
- 大小厂必问Java后端面试题(含答案)
你好,我是yes. 这个系列的文章不会是背诵版,不是那种贴上标准答案,到时候照着答就行的面试题汇总. 我会用大白话尽量用解释性.理解性的语言来回答,但是肯定没有比平时通过一篇文章来讲解清晰,不过我尽量 ...
- 3. Vue语法--计算属性
一. 计算属性 1. 什么是计算属性? 通常, 我们是在模板中, 通过插值语法显示data的内容, 但有时候我们可能需要在{{}}里添加一些计算, 然后在展示出来数据. 这时我们可以使用到计算属性 先 ...
- 原生javascript开发计算器实例
计算器的主要作用是进行数字运算,开发一个计算器功能的web实例,有助于更好的掌握js基础的数字运算能力. 本实例详细分析一个js计算器的开发步骤,学习本教程时最好先具备一些基础的js知识. 计算器包括 ...
- 07_MySQL修改数据库的表结构
修改数据库的表结构
- 又长又细,万字长文带你解读Redisson分布式锁的源码
前言 上一篇文章写了Redis分布式锁的原理和缺陷,觉得有些不过瘾,只是简单的介绍了下Redisson这个框架,具体的原理什么的还没说过呢.趁年前项目忙的差不多了,反正闲着也是闲着,不如把Rediss ...