码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 地平线 旭日X3 PI (三) 模型转换


    文章目录

      • 更新时间
      • 准备工作
      • 转换流程
      • 模型转换结果记录
      • 参考文档

    • 开发机环境配置
    • 去年在x3 sdb上yolov3 darknet 自训练模型转换流程,供参考。
    • 转换后的模型部署到板上推理流程

    更新时间

    最近更新: 2022-07
    开发板:地平线 旭日 X3 PI

    准备工作

    • 官方的docker镜像,上篇文章已经介绍了开发机的配置,点击此链接查看。
    • nanodet onnx模型 下载地址(或者其他onnx模型)
    • Netron 模型结构查看软件

    转换流程

    ① 启动官方docker

    #在horizon_xj3_open_explorer_v2.2.3_20220617主目录下使用脚本进入docker
    sudo sh run_docker.sh ./data
    #启动后主目录挂载到docker
    
    • 1
    • 2
    • 3

    ② 进入detection目录

    • 目录结构有点复杂,慢慢梳理吧。
    • 这里演示的是detection的转换案例
    #首线进入到detection的案例下
    cd ddk/samples/ai_toolchain/horizon_model_convert_sample/04_detection/
    
    • 1
    • 2

    ③ copy案例

    • 本文采样onnx转换,这里copy下yolov5的案例,比较接近;caffe可以选择yolov2案例copy。

      cp -rf ./03_yolov5s ./08_nanodet
      
      • 1

    ④ 模型放入指定目录

    • 模型存放目录: /ddk/samples/ai_toolchain/model_zoo
      #进入模型存放目录
      cd ddk/samples/ai_toolchain/model_zoo/mapper/detection/
      
      • 1
      • 2
    • 创建文件,放入onnx模型
      # 创建文件夹
      mkdir nanodet
      #放入模型
      cp   XXXX.onnx  ./
      
      • 1
      • 2
      • 3
      • 4

    ⑤ 修改转换脚本

    • 修改01_check.sh 中模型的路径,修改成之前放模型的路径。
    • 修改yaml名称,由于是copy过来的,还是修改一下。
    • 修改03_build.sh 中yaml的路径及名称。

    ⑥ 配置yaml中转换参数(⭐重要参数)

    • 官方文档配置详情:3.4 转换模型章节
    • model_parameters
      • onnx_model (⭐) —— 模型路径需要修改
      • output_model_file_prefix —— 输出模型名称
    • input_parameters
      • input_name(⭐) —— 单输入模型可不填,多输入需要用“,”分隔。
      • input_type_train —— 训练时输入的数据格式,常规是’rgb’或者’bgr’格式。
      • input_shape(⭐) —— 可用Netron查看,例: input_shape:‘1x3x224x224’,可不填。
      • input_layout_train —— 根据input_shape填写,常规:‘NHWC’/‘NCHW’
      • norm_type —— 预处理策略。
      • mean_value —— 预处理方法的图像减去的均值, 如果是通道均值,value之间必须用空格分隔,根据自己的数据计算得出。
      • scale_value —— 预处理方法的图像缩放比例,如果是通道缩放比例,value之间必须用空格分隔,根据自己的数据计算得出。
    • calibration_parameters
      • compile_mode —— 编译策略,一般默认速度优先即可。
      • core_num(⭐) —— 模型指定BPU个数,默认为1;常规开发板为双核,追求速度可填2。
      • optimize_level (⭐)—— 优化等级,默认速度优先 ‘03’。
    • 根据模型修改配置文件
      • 本文采用nanodet模型为单输入,rgb,nchw,单输出,320*320的模型,依据上表只修改了模型路径其他不需要修改;追求速度core_num也可修改为2。

    ⑦ 执行转换

    • 01_check.sh
    • 图太长中间跳过一些节点,大部分都能在BPU上运行。
      在这里插入图片描述
      .
    • 02_preprocess.sh
      • 需要先修改 preprocess.py 下 calibration_transformers()函数中的预处理尺寸

        #这里模型输入为320*320 
        transformers = [
        	        PadResizeTransformer(target_size=(320, 320)),
        	        HWC2CHWTransformer(),
        	        BGR2RGBTransformer(data_format="CHW"), ]
        
        • 1
        • 2
        • 3
        • 4
        • 5
      • 执行 02_preprocess.sh
        .

    • 03_build.sh
      • 根据⑥中修改yaml中的配置,build过程需要等待一会。
        在这里插入图片描述
      • 重要关注Cosine Similarity和原本模型的相似度,本问nanodet所有节点都在0.9以上,尚可。
      • build完成后会在目录下生成model_output文件夹,里面保存了生成的板上运行的模型。
        在这里插入图片描述

    ⑦ 板上开发

    • 得到模型后,需要根据模型编写模型的后处理模块,这个会在后面的文章介绍。
    • 官方案例的自训练模型可直接采用官方代码修改即可。

    模型转换结果记录

    结果根据官方工具显示:

    模型转换差异算子支持情况
    nanodet-plus尚可大部分可在BPU上运行
    yolox-nano差异大大部分可在BPU上运行
    fastestdet尚可部分在CPU上运行

    参考文档

    https://developer.horizon.ai/api/v1/fileData/doc/cn/source_doc/x3_ddk_docs.html
    https://developer.horizon.ai/api/v1/fileData/doc/ddk_doc/navigation/ai_toolchain/docs_cn/horizon_ai_toolchain_user_guide/index.html
    https://developer.horizon.ai/api/v1/fileData/doc/ddk_doc/navigation/ai_toolchain/docs_cn/hb_mapper_sample_doc/index.html
    https://developer.horizon.ai/api/v1/fileData/doc/ddk_doc/navigation/ai_toolchain/docs_cn/hb_mapper_tools_guide/model_conversion_details.html#

  • 相关阅读:
    B2B企业如何做好谷歌Google广告推广营销布局?
    element中el-switch用法汇总(拓展:el-switch开关点击弹出确认框时,状态先改变,点击确认/取消失效,怎么解决?)
    亲测有效,快速创建JMeter桌面快捷方式
    Effective-java-读书笔记之异常
    AJAX(一):初识AJAX、http协议、配置环境、发送AJAX请求、请求时的问题
    LabVIEW用户界面设计
    heroku的使用,部署node后端
    【嵌入式面试题】常见面试题梳理二
    一文速通Nginx网关与gateway网关区分
    实操演练 | 使用 Navicat 对 MySQL 表进行分区
  • 原文地址:https://blog.csdn.net/djj199301111/article/details/125549168
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号