【项目--Hi3559A】如何在Hi3559A上运行自己的yolov3模型(修改类别、网络结构)

简介: 【项目--Hi3559A】如何在Hi3559A上运行自己的yolov3模型(修改类别、网络结构)

一、前言

  • 使用的SDK版本是030,板子与虚拟机Linux系统之间已进行了nfs挂载。

PS:吐槽一句,这海思的sample代码写的极其不人性化,许多需要修改的参数没有写在一个地方,其中一个参数一直报段错误,使团队卡了两天······

遇到问题不要慌,使劲撸源码就对了,指不定就是源码哪个地方华为将代码给写死了,“华为海思天下第一”

二、Sample代码调用分析

  • 首先是函数入口源文件,sample_nnie_main.c,它会根据所输入命令行选择执行的操作,控制台输入:./sammple nnie
    main 可见输入选项:


选择Yolov3,会进入sammple_nnie.c 中的SAMPLE_SVP_NNIE_Yolov3,其中可以配置加载模型与图片文件的顺序(在实际工程应用中这个部分需要重构,将图片数据通过指针直接传递过来,而不是利用图片进行数据读取<总不能前一个阶段保存图片,后一阶段再来读图片吧?>):

2020072910164680.png

而后分别调用:

SAMPLE_COMM_SVP_CheckSysInit();

SAMPLE_COMM_SVP_NNIE_LoadModel();

SAMPLE_SVP_NNIE_Yolov3_ParamInit();

SAMPLE_SVP_NNIE_FillSrcData();

SAMPLE_SVP_NNIE_Forward();

SAMPLE_SVP_NNIE_Yolov3_GetResult;

SAMPLE_SVP_NNIE_Detection_PrintResult()

依次是系统初始化、NNie加载模型、参数初始化、读取数据、前向推导、获取结果、结果打印。

至此,yolov3例程的函数调用基本言


使用的SDK版本是030,板子与虚拟机Linux系统之间已进行了nfs挂载。 PS:吐槽一句,这海思的sample代码写的极其不人性化,许多需要修改的参数没有写在一个地方,其中一个参数一直报段错误,使团队卡了两天······ 遇到问题不要慌,使劲撸源码就对了,指不定就是源码哪个地方华为将代码给写死了,“华为海思天下第一”二、Sample代码调用分析 - 首先是函数入口源文件,sample_nnie_main.c,它会根据所输入命令行选择执行的操作,控制台输入:./sammple nnie main 可见输入选项: -

20200729101205819.png

选择Yolov3,会进入sammple_nnie.c 中的SAMPLE_SVP_NNIE_Yolov3,其中可以配置加载模型与图片文件的顺序(在实际工程应用中这个部分需要重构,将图片数据通过指针直接传递过来,而不是利用图片进行数据读取<总不能前一个阶段保存图片,后一阶段再来读图片吧?>): - 

2020072910164680.png

- 而后分别调用: SAMPLE_COMM_SVP_CheckSysInit(); SAMPLE_COMM_SVP_NNIE_LoadModel(); SAMPLE_SVP_NNIE_Yolov3_ParamInit(); SAMPLE_SVP_NNIE_FillSrcData(); SAMPLE_SVP_NNIE_Forward(); SAMPLE_SVP_NNIE_Yolov3_GetResult; SAMPLE_SVP_NNIE_Detection_PrintResult() 依次是系统初始化、NNie加载模型、参数初始化、读取数据、前向推导、获取结果、结果打印。 至此,yolov3例程的函数调用基本讲解完毕。


三、修改相关参数

在运行自己网络的时候需要修改的几个地方:

模型文件地址 以及测试图片;

f32PrintResultThresh 这是最终的打印结果阈值,只有大于这个阈值才会进行结果的输出;

sample_nnie.c的SAMPLE_SVP_NNIE_Yolov3_SoftwareInit中,修改类别数u32ClassNum=你检测的目标数+1,比如你只检测人脸,则这里写2;

之后的pstSoftWareParam->u32NmsThresh = (HI_U32)(0.15fSAMPLE_SVP_NNIE_QUANT_BASE);

pstSoftWareParam->u32ConfThresh = (HI_U32)(0.2fSAMPLE_SVP_NNIE_QUANT_BASE);是设置nms阈值以及结果阈值的,根据情况进行调整;

重点:sample_svp_nnie_software.h中的SAMPLE_SVP_NNIE_YOLOV3_EACH_BBOX_INFER_RESULT_NUM 原值是85这是原版yolov3检测80类时定下的(居然写在这坑人),若不根据修改后的网络检测类别进行调整,会报段错误。应改为:5+你检测的目标类别数,如检测人脸则应改为6.

“本站所有文章均为原创,欢迎转载,请注明文章出处:https://blog.csdn.net/ll15982534415/article/details/107516264。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。”

原版:2020/7/29

相关文章
|
2月前
|
C++
基于Reactor模型的高性能网络库之地址篇
这段代码定义了一个 InetAddress 类,是 C++ 网络编程中用于封装 IPv4 地址和端口的常见做法。该类的主要作用是方便地表示和操作一个网络地址(IP + 端口)
161 58
|
2月前
|
网络协议 算法 Java
基于Reactor模型的高性能网络库之Tcpserver组件-上层调度器
TcpServer 是一个用于管理 TCP 连接的类,包含成员变量如事件循环(EventLoop)、连接池(ConnectionMap)和回调函数等。其主要功能包括监听新连接、设置线程池、启动服务器及处理连接事件。通过 Acceptor 接收新连接,并使用轮询算法将连接分配给子事件循环(subloop)进行读写操作。调用链从 start() 开始,经由线程池启动和 Acceptor 监听,最终由 TcpConnection 管理具体连接的事件处理。
57 2
|
2月前
基于Reactor模型的高性能网络库之Tcpconnection组件
TcpConnection 由 subLoop 管理 connfd,负责处理具体连接。它封装了连接套接字,通过 Channel 监听可读、可写、关闭、错误等
75 1
|
2月前
|
JSON 监控 网络协议
干货分享“对接的 API 总是不稳定,网络分层模型” 看电商 API 故障的本质
本文从 OSI 七层网络模型出发,深入剖析电商 API 不稳定的根本原因,涵盖物理层到应用层的典型故障与解决方案,结合阿里、京东等大厂架构,详解如何构建高稳定性的电商 API 通信体系。
|
2月前
基于Reactor模型的高性能网络库之Poller(EpollPoller)组件
封装底层 I/O 多路复用机制(如 epoll)的抽象类 Poller,提供统一接口支持多种实现。Poller 是一个抽象基类,定义了 Channel 管理、事件收集等核心功能,并与 EventLoop 绑定。其子类 EPollPoller 实现了基于 epoll 的具体操作,包括事件等待、Channel 更新和删除等。通过工厂方法可创建默认的 Poller 实例,实现多态调用。
195 60
|
2月前
基于Reactor模型的高性能网络库之Channel组件篇
Channel 是事件通道,它绑定某个文件描述符 fd,注册感兴趣的事件(如读/写),并在事件发生时分发给对应的回调函数。
156 60
|
2月前
|
安全 调度
基于Reactor模型的高性能网络库之核心调度器:EventLoop组件
它负责:监听事件(如 I/O 可读写、定时器)、分发事件、执行回调、管理事件源 Channel 等。
174 57
|
2月前
基于Reactor模型的高性能网络库之时间篇
是一个用于表示时间戳(精确到微秒)**的简单封装类
125 57
|
24天前
|
算法 安全 网络安全
【多智能体系统】遭受DoS攻击的网络物理多智能体系统的弹性模型预测控制MPC研究(Simulink仿真实现)
【多智能体系统】遭受DoS攻击的网络物理多智能体系统的弹性模型预测控制MPC研究(Simulink仿真实现)
|
4月前
|
机器学习/深度学习 搜索推荐 PyTorch
基于昇腾用PyTorch实现CTR模型DIN(Deep interest Netwok)网络
本文详细讲解了如何在昇腾平台上使用PyTorch训练推荐系统中的经典模型DIN(Deep Interest Network)。主要内容包括:DIN网络的创新点与架构剖析、Activation Unit和Attention模块的实现、Amazon-book数据集的介绍与预处理、模型训练过程定义及性能评估。通过实战演示,利用Amazon-book数据集训练DIN模型,最终评估其点击率预测性能。文中还提供了代码示例,帮助读者更好地理解每个步骤的实现细节。

热门文章

最新文章