完成网络的仿真与仿真代码简要分析
前言:
上一篇我们已经得到了转化完成的.wk网络结构文件,此次我们来简要讲述一下仿真的过程
Ruyi Stdio的仿真过程分为两种,一种是功能性的仿真,一种是指令仿真。顾名思义,功能性的仿真只在乎结果对不对,而指令性的仿真在乎的是每个过程,每次卷积的结果都是符合要求的。最终我们要在海思处理器上跑起来的就是指令性仿真过程中所用到的权重文件。
注:在转化的过程中选择功能性仿真与指令仿真最后生成的权重是有差别的,如果要进行功能性仿真,那在转化的时候就要选择功能性的仿真。
本文章以功能性的仿真为例。
step1.
首先,查看scr/main.cpp,可以发现里面包含多种网络的推理过程,可以将其他网络进行屏蔽,如下所示:
step2.
打开SvpSampleDetectionOneSeg.cpp文件,可以看到里面包含了各种文件所在的地址,按照自己的需求选择各种文件。如下
由于海思处理器所需要的图片文件类型不是标准格式,而是按照BBB...GGG...RRR格式排列的二进制文件。此地博主写了一个简单的python脚本完成jpg到bgr的转化,
import cv2
imgpath = "./BGR_img/917.jpg"
saveimg = r"./BGR_img/917_608x608.bgr"
img = cv2.imread(imgpath)
save_img_size = 608
if img is None:
print("img is none")
else:
img = cv2.resize(img,(save_img_size,save_img_size))
(B, G, R) = cv2.split(img)
with open(saveimg,'wb')as fp:
for i in range(save_img_size):
for j in range(save_img_size):
fp.write(B[i, j])
for i in range(save_img_size):
for j in range(save_img_size):
fp.write(G[i, j])
for i in range(save_img_size):
for j in range(save_img_size):
fp.write(R[i, j])
print("save success")
博主在下载频道也上传了相应的bgr转jpg与jpg 转bgr的文件,需要请自提
step3.
打开文件SvpSampleYolo.h 找到其中有关yolo3的部分,按以下文件注释修改各个参数,
//#define SVP_SAMPLE_YOLOV3_SRC_WIDTH (416)
//#define SVP_SAMPLE_YOLOV3_SRC_HEIGHT (416)
//
//#define SVP_SAMPLE_YOLOV3_GRIDNUM_CONV_82 (13)
//#define SVP_SAMPLE_YOLOV3_GRIDNUM_CONV_94 (26)
//#define SVP_SAMPLE_YOLOV3_GRIDNUM_CONV_106 (52)
//#define SVP_SAMPLE_YOLOV3_RESULT_BLOB_NUM (3)
//#define SVP_SAMPLE_YOLOV3_CHANNLENUM (255)
//#define SVP_SAMPLE_YOLOV3_PARAMNUM (85)
//#define SVP_SAMPLE_YOLOV3_BOXNUM (3)
//#define SVP_SAMPLE_YOLOV3_CLASSNUM (80)
//#define SVP_SAMPLE_YOLOV3_MAX_BOX_NUM (10)
#define SVP_SAMPLE_YOLOV3_SRC_WIDTH (608)
#define SVP_SAMPLE_YOLOV3_SRC_HEIGHT (608)
#define SVP_SAMPLE_YOLOV3_GRIDNUM_CONV_82 (19) //a = 608÷32 //参数值为图片大小除以32
#define SVP_SAMPLE_YOLOV3_GRIDNUM_CONV_94 (38) //b = a*2 //参数值为上一行参数乘2
#define SVP_SAMPLE_YOLOV3_GRIDNUM_CONV_106 (76) //c = b*2 //值为上一行参数乘以2
#define SVP_SAMPLE_YOLOV3_RESULT_BLOB_NUM (3)
#define SVP_SAMPLE_YOLOV3_CHANNLENUM (30) //值为 3x(5+ClassNum)
#define SVP_SAMPLE_YOLOV3_PARAMNUM (10) //值为 (5+ClassNum)
#define SVP_SAMPLE_YOLOV3_BOXNUM (3)
#define SVP_SAMPLE_YOLOV3_CLASSNUM (5)
#define SVP_SAMPLE_YOLOV3_MAX_BOX_NUM (15)
step4.
以上全部修改并保存后,右键单击项目名称,切换为功能仿真,如下
随后点击build按钮,选择release
等待完成,大概耗时一分钟左右。
step5.
打开release文件夹,右键单击可执行文件,选择run as -- local
开始进行仿真,速度取决于电脑性能,完成之后可以在sim_out -- result文件夹看到输出的图片。
到此,就完成了一次功能性的仿真,如果RuyiStdio用不舒服的话可以选择使用VS进行上面的修改与运行,原sample也提供了vs的解决方案
下一篇:如何在Hi3559A上完成网络的推理
https://blog.csdn.net/qq_34533248/article/details/102498143