当前位置: 首页 > news >正文

海思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的模型转化工具链,并能够根据芯片的特性,反馈至模型设计端。

相关文章:

  • 蓝桥杯备赛:一道数学题(练思维(同余的应用))
  • 大白话react第十四章高阶 React 组件开发和React 状态管理进阶等
  • 【机械视觉】C#+VisionPro联合编程———【三、加载CogToolBlock工具详解,以及实例】
  • VS2022中使用EntityFrameworkCore连接MySql数据库方法
  • HeapDumpBeforeFullGC和HeapDumpOnOutOfMemoryError区别
  • Win10 访问 Ubuntu 18 硬盘
  • 数列分块入门2
  • Linux系统下安装配置 Nginx 超详细图文教程_linux安装nginx
  • 笔记:代码随想录算法训练营day38: LeetCode322. 零钱兑换、279.完全平方数、139.单词拆分;多重背包
  • 接口技术##汇编语言
  • QSplitter保存和读取
  • [数据结构]栈和队列
  • C++20 DR11:数组 `new` 可以推导出数组大小
  • VS Code连接服务器教程
  • C/C++类型转换
  • 扎实基础:测试工作的基石
  • Flask 框架简介
  • Manus+Ollama实现本地大模型部署和应用测试
  • 基于multisim的花样彩灯循环控制电路设计与仿真
  • 密码学(终极版)
  • 深圳专业企业网站建设/谷歌关键词推广怎么做
  • 百度蜘蛛抓取网站模块/国内广告投放平台
  • 医疗知识普及网站开发/网络推广公司是干嘛的
  • 群晖网站建设/怎样注册网站免费注册
  • 协会网站建设的优势/如何做网络推广人员
  • 有什么网站用名字做图片/百度推广是做什么的