海思Hi3516DV00移植yolov5-7.0的模型转化流程说明

一、YOLOv5

在这里插入图片描述

YOLOv5作为单阶段检测框架的集大成者,凭借其卓越的实时性、高精度和易用性,已成为工业界实际部署的首选方案。yolov5的最新版本是7.0,该版本是官方最后更新的一个版本。yolov5-7.0
在这里插入图片描述

工程化实现卓越:基于PyTorch框架构建,支持动态图机制与ONNX生态的无缝对接
模型轻量化设计:提供n/s/m/l/x五种参数量级,满足不同算力场景需求
数据增强策略完善:集成Mosaic、MixUp等先进增强方法
部署友好性突出:支持TensorRT、OpenVINO等主流推理框架
持续迭代能力:官方维护团队保持每月更新频率,2023年新增实例分割扩展功能

二、模型转换流程

2.1 整体转换流程图

torch.onnx.export
onnx2caffe
HiSVP工具链
PyTorch模型
ONNX模型
Caffe模型
海思WK模型

2.2 PyTorch转ONNX

使用yolov5项目根目录下的export.py完成转化,主要涉及到以下参数的设置:

--weights #修改为yolov5s.pt文件的路径
--imgsz #修改为想要转化的模型输入尺寸
--device #设置为CPU
--opset #onnx的版本,设置为12

在这里插入图片描述

2.3 ONNX到Caffe1.0转换

转化流程中,最麻烦的就是onnx转caffe1.0了。由于Hi3516DV300的工具链仅支持Caffe1.0,所以,许多算子、层结构都不支持。
比较流行的做法是使用,yolov5_onnx2caffe这个开源项目的脚本进行转化。yolov5_onnx2caffe
按照项目的要求,完成环境安装后,运行convertCaffe.py即可完成onnx转caffe的步骤。参数设置如下:

if __name__ == "__main__":

    onnx_path = "./weights/yolov5s.onnx" #onnx的路径
    prototxt_path = "yolov5s.prototxt" #输出prototxt路径
    caffemodel_path = "yolov5s.caffemodel" #输出caffemodel路径

    #onnx_path = "/home/willer/nanodet_concat/tools/nanodet-simple.onnx"
    #prototxt_path = "./nanodet-simple.prototxt"
    #caffemodel_path = "./nanodet-simple.caffemodel"

    graph = getGraph(onnx_path)

    #convertToCaffe(graph, prototxt_path, caffemodel_path, exis_focus=True, focus_concat_name="Concat_40", focus_conv_name="Conv_41")
    #convertToCaffe(graph, prototxt_path, caffemodel_path, exis_focus=True, focus_concat_name="Concat_40")
    #convertToCaffe(graph, prototxt_path, caffemodel_path, focus_conv_name="Conv_41")
    convertToCaffe(graph, prototxt_path, caffemodel_path)

2.4 Caffe转WK

Hi3516DV300的量化工具叫做RuyiStudio,启动该工具。一般来说,在SDK包中,已经包含该软件。RuyiStudio是绿色软件,无需安装,双击exe即可启动。
在这里插入图片描述

2.4.1 搭建NNIE工程

1、file->new->nnie-project
在这里插入图片描述

2、输入一个非中文的工程名称,SOC version选择Hi3516DV300。
在这里插入图片描述

2.4.2 打开模型转化界面

1、展开项目目录,找到xxx.cfg文件。
在这里插入图片描述

2、使用Mapper Configuration Editor打开xxx.cfg文件。
在这里插入图片描述

2.4.3 模型转化参数设置

在这里插入图片描述

一些重要参数的解释,主要是需要和模型的预处理需要一一对应。

参数名称参数含义
prototxtcaffe的prototxt文件
caffemodelcaffe的caffemodel文件
net_type网络类型,可以选择RNN、CNN,这里选择CNN
compile_mode量化的精度,可以选择High-precison(高精度、慢)和Low-bandwidth(低精度、快,int16)
norm_type输入图像的预处理类型,这里选择直接归一化到0-1之间,就是data_scale
image_list参考图像的列表,以txt的形式,一行记录一个图像的路径和名称
image_type输入图像的格式

2.4.4模型转化

参数设置完成后,点击make图标,即可启动模型量化,等待几分钟即可生成wk文件。
在这里插入图片描述

三、可能遇到的问题

3.1 Prototxt contains special characters

在caffe转wk的时候,转化工具可能会报错。
在这里插入图片描述

Line (14+ 1) "/model.0/conv/Conv" contains special characters, please check it.
Prototxt contains special characters.

解决办法
修改convertCaffe.py,将onnx中的所有节点的命名中的./进行替换,修改函数为:def getGraph(onnx_path)
修改前:

def getGraph(onnx_path):
    model = onnx.load(onnx_path)
    model_graph = model.graph
    graph = Graph.from_onnx(model_graph)
    graph = graph.transformed(transformers)
    graph.channel_dims = {}
    return graph

修改后:

def getGraph(onnx_path):
    model = onnx.load(onnx_path)
    model_graph = model.graph
    graph = Graph.from_onnx(model_graph)
    graph = graph.transformed(transformers)
    graph.channel_dims = {}
    
    for i in range(0, len(graph.nodes)):
        name = graph.nodes[i].name
        name = name.replace('.', '_')
        graph.nodes[i].name = name.replace('/', '_')
    return graph

重新生成caffe模型,即可解决问题。

3.2 生成WK时间长

在参数配置无误后,对于M、L等参数量较大的模型,工具的量化时间较长,容易出现软件卡死的现象。
解决办法
配置GPU转化环境或者选择CPU和内存较好的电脑进行转化。

四、小结

  • NNIE的配套工具不够完善,项目中使用,尽量使用支持ACNN-Toolkit的芯片。
  • 如果只是做目标检测,如入侵检测、流量统计、分类等场景,NNIE是可以满足要求的,转化工具足以支撑。
  • 需要打通NNIE的模型转化工具链,并能够根据芯片的特性,反馈至模型设计端。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/983381.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

通过Golang的container/list实现LRU缓存算法

文章目录 力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2. 插入元素3. 删除元素4. 遍历链表5. 获取链表长度使用场景注意事项 源代码阅读 在 Go 语言中,container/list 包提供了一个双向链表的实现。链表是一种常见的数据结构&#…

从零开始学机器学习——线性和多项式回归

首先给大家介绍一个很好用的学习地址:https://cloudstudio.net/columns 在之前的学习中,我们已经对数据的准备工作以及数据可视化有了一定的了解。今天,我们将深入探讨基本线性回归和多项式回归的概念与应用。 如果在过程中涉及到一些数学知…

【数据结构初阶第十八节】八大排序系列(上篇)—[详细动态图解+代码解析]

看似不起眼的日复一日,总会在某一天让你看到坚持的意义。​​​​​​云边有个稻草人-CSDN博客 hello,好久不见! 目录 一. 排序的概念及运用 1. 概念 2. 运用 3. 常见排序算法 二. 实现常见排序算法 1. 插入排序 (1&…

SPI驱动五) -- SPI_DAC上机实验(使用spidev)

文章目录 参考资料:一、DAC硬件1.1 原理图1.2 扩展板连接图1.3 DAC原理 二、编写APP三、编写设备树四、上机实验五、Bug分析六、总结 参考资料: 参考资料: 内核驱动:drivers\spi\spidev.c 内核提供的测试程序:tools\…

基于Asp.net的驾校管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

Spring (八)AOP-切面编程的使用

目录 实现步骤&#xff1a; 1 导入AOP依赖 2 编写切面Aspect 3 编写通知方法 4 指定切入点表达式 5 测试AOP动态织入 图示&#xff1a; 实现步骤&#xff1a; 1 导入AOP依赖 <!-- Spring Boot AOP依赖 --><dependency><groupId>org.springframework.b…

阿里云CTF2025 ---Web

ezoj 啊&#xff1f;怎么整个五个算法题给CTF选手做&#xff1f;&#xff1f;这我不得不展示一下真正的技术把测评机打穿。 可以看到源码 import os import subprocess import uuid import json from flask import Flask, request, jsonify, send_file from pathlib import Pa…

WSL(ubunt)中使用ollama部署deepseek-7b

想在自己的Win11电脑上部署Linux的DeepSeek模型&#xff0c;但在网上一直没有找到合适的相应教程&#xff0c;自己查询各种网上资源&#xff0c;以及询问一些AI大模型后成功安装&#xff0c;并整理了以下步骤。仅作为个人学习笔记使用&#xff0c;由于本人对各方面知识掌握不足…

蓝桥杯国赛—路径之谜(dfs详细解法)

一.题目 二.dfs解法 使用dfs算法可以递归遍历所有可能路径&#xff0c;如果找到错误的路径就进行回溯&#xff0c;只有找到正确的路径才会输出 public class Main {static class pair{int x;int y;public pair(int x,int y){this.x x;this.y y;} }public static void bfs()…

Jenkins在Windows上的使用(二):自动拉取、打包、部署

&#xff08;一&#xff09;Jenkins全局配置 访问部署好的Jenkins服务器网址localhost:8080&#xff0c;完成默认插件的安装后&#xff0c;接下来将使用SSH登录远程主机以实现自动化部署。 1. 配置插件 选择dashboard->Manage Jenkins->plugins 安装下面两个插件  …

记录小白使用 Cursor 开发第一个微信小程序(一):注册账号及下载工具(250308)

文章目录 记录小白使用 Cursor 开发第一个微信小程序&#xff08;一&#xff09;&#xff1a;注册账号及下载工具&#xff08;250308&#xff09;一、微信小程序注册摘要1.1 注册流程要点 二、小程序发布流程三、下载工具 记录小白使用 Cursor 开发第一个微信小程序&#xff08…

蓝耘智算 + 通义万相 2.1:为 AIGC 装上 “智能翅膀”,翱翔创作新天空

1. 引言&#xff1a;AIGC 的崛起与挑战 在过去几年中&#xff0c;人工智能生成内容&#xff08;AIGC&#xff09;技术突飞猛进。AIGC 涉及了文本生成、图像创作、音乐创作、视频制作等多个领域&#xff0c;并逐渐渗透到日常生活的方方面面。传统的内容创作方式已经被许多人类创…

C/C++中使用CopyFile、CopyFileEx原理、用法、区别及分别在哪些场景使用

文章目录 1. CopyFile原理函数原型返回值用法示例适用场景 2. CopyFileEx原理函数原型返回值用法示例适用场景 3. 核心区别4. 选择建议5. 常见问题6.区别 在Windows系统编程中&#xff0c;CopyFile和CopyFileEx是用于文件复制的两个API函数。它们的核心区别在于功能扩展性和控制…

计算机性能指标(计网笔记)

计算机性能指标&#xff1a;速率、带宽、吞吐率、时延、时延带宽积、往返时间RTT、利用率 速率 数据的传输速率&#xff0c;单位bit/s&#xff0c;或kbit/s&#xff0c;Mbit/s&#xff0c;Gbit/s 4*10**10bit/s40Gbit/s 常用带宽单位&#xff1a; 千比每秒kb/s 兆比每秒Mb/s…

Python基于Django的医用耗材网上申领系统【附源码、文档说明】

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…

php代码审计工具-rips

代码审计 代码审计就是检查所写的代码中是否有漏洞&#xff0c;检查程序的源代码是否有权限从而被黑客攻击&#xff0c;同时也检查了书写的代码是否规范。通过自动化的审查和人工审查的方式&#xff0c;逐行检查源代码&#xff0c;发现源代码中安全缺陷所造成的漏洞&#xff0…

工作学习笔记:HarmonyOS 核心术语速查表(v14 实战版)

作为在 HarmonyOS 开发一线摸爬滚打的工程师&#xff0c;笔者在 v14 版本迭代中整理了这份带血的实战术语表。 一、架构基础术语速查 A 系列术语 术语官方定义笔者解读&#xff08;v14 实战版&#xff09;开发陷阱 & 解决方案abc 文件ArkCompiler 生成的字节码文件打包时…

Trae IDE新建C#工程

目录 1 结论 2 项目结构 3 项目代码 1 结论 新建C#工程来说&#xff0c;Trae的Chat比DeepSeek的Coder好用。 2 项目结构 MyWinFormsApp/ │ ├── Program.cs ├── Form1.cs ├── Form1.Designer.cs ├── MyResources/ │ └── MyResources.resx └── MyWin…

大数据学习(55)-BI工具数据分析的使用

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91…

Apache Kafka单节点极速部署指南:10分钟搭建开发单节点环境

Apache Kafka单节点极速部署指南&#xff1a;10分钟搭建开发单节点环境 Kafka简介&#xff1a; Apache Kafka是由LinkedIn开发并捐赠给Apache基金会的分布式流处理平台&#xff0c;现已成为实时数据管道和流应用领域的行业标准。它基于高吞吐、低延迟的设计理念&#xff0c;能够…