【2023 · CANN训练营第一季】应用开发深入讲解④ 模型转换(ATC工具)

本文主要是介绍【2023 · CANN训练营第一季】应用开发深入讲解④ 模型转换(ATC工具),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        体系化学习AscendCL应用,目标为对昇腾CANN有初步了解并且可以基于昇腾CANN独立开发一个CV类图片应用。

【2023 · CANN训练营第一季】应用开发深入讲解① AscendCL概述

【2023 · CANN训练营第一季】应用开发深入讲解② 华为弹性云服务器(ECS)搭建介绍

【2023 · CANN训练营第一季】应用开发深入讲解③ 快速入门(基于ResNet-50网络模型的图片分类应用)

【2023 · CANN训练营第一季】应用开发深入讲解④ 模型转换(ATC工具)


        当前昇腾AI处理器以及昇腾AI软件栈无法直接使用如Caffe、TensorFlow等开源框架网络模型来直接进行推理,想要进行推理则需要进行模型转换,将开源框架的网络模型转换成Davinci架构专用的模型。模型转换的步骤通过本部分所介绍的ATC工具来完成。

目录

1 模型转换工具介绍

2 模型转换工具演示

● 借助MindStudio图像界面进行

● AIPP配置

● 使用ATC命令行工具进行

3 单算子模型文件配置


1 模型转换工具介绍

        昇腾张量编译器(Ascend Tensor Compiler,简称ATC)是昇腾CANN架构体系下的模型转换工具:

  • 它可以将开源框架的网络模型(Caffe、TensorFlow、ONNX、MindSpore)以及Ascend IR定义的单算子描述文件转换为昇腾AI处理器支持的离线模型。
  • 模型转换过程中,ATC会进行算子调度优化、权重数据重排、内存使用优化等具体操作,对原始的深度学习模型进行进一步的调优,从而满足部署场景下的高性能需求,使其能够高效执行在昇腾AI处理器上。

        在进行模型转换前,请务必查看如下约束要求

➢ 支持原始框架类型为Caffe、TensorFlow、 MindSpore、 ONNX的模型转换:

  • 当原始框架类型为Caffe、MindSpore、ONNX时,输入数据类型为FP32、FP16 (通过设置入参--input_ fp16_ nodes实现,MindSpore框架不支持该参数)、UINT8 (通过配置数据预处理--insert_ op_ _conf实现) ;
  • 当原始框架类型为TensorFlow时, 输入数据类型为FP16、FP32、 UINT8、 INT32、 INT64、BOOL。

➢ 当原始框架类型为Caffe时,模型文件( .prototxt )和权重文件( .caffemodel )的op name、op type必须保持名称一致(包括大小写)。

➢ 当原始框架类型为TensorFlow时,只支持FrozenGraphDef格式(.pb)。

➢ 不支持动态shape的输入,例如: NHWC输入为[?,?,?,3]多个维度 可任意指定数值。模型转换时需指定固定数值。

➢ 对于Caffe框架网络模型:输入数据最大支持四维,转维算子( reshape、expanddim等)不能输出五维。

➢ 模型中的所有层算子除const算子外,输入和输出需要满足dim!=0(维度不为0)。

➢ 只支持《算子规格说明》中的算子,并需满足算子限制条件,若不满足,可自行开发算子。

        若不满足以上要求,则模型转换可能失败。


2 模型转换工具演示

① 借助MindStudio图像界面进行

        找到模型转换工具:

         选择下载好的模型(以caffe resnet50模型为例)文件,在图中位置可打开模型可视化工具,在其中可以看到所有模型的算子:

         其中:

Output Path为转换后模型输出路径;

Target SoC Version为推理芯片的型号;

Input Format为输入数据的排布格式,NCHW格式与模型匹配;

Input Nodes为模型的输入节点信息,包括shape和type,

        shape:可根据模型自动解析并填充,修改其第一个参数为-1,可使其支持动态

                      batch size、动态分辨率和动态dims。

        type:用以指定输入节点的数据类型,若要使用AIPP功能,将其修改为UINT8可

                  自动开启,设置为其他类型则需要手动开启。

Output Nodes可指定输出结点,在打开的可视化工具中可选择或取消输出结点,该功能用于中间输出调试的场景;

Load Configuration选项可选择上次成功生成模型时的配置文件,可省去重新配置参数的步骤。

        配置完成后选择下一步,进行AIPP相关配置。

② AIPP配置

        AIPP(Artificial Intelligence Pre-Processing)人工智能预处理,用于在AI Core上完成数据预处理,包括改变图像尺寸、色域转换(转换图像格式)、减均值/乘系数(改变图像像素),数据预处理之后再进行真正的模型推理。

        该模块功能与DVPP相似,都是用于图像数据预处理,但与DVPP相比,由于DVPP各组件基于处理速度和处理占有量的考虑,对输入、输出有特殊的限制,如对输出图片的宽高有对齐要求,且其输出格式通常为YUV420SP等格式。这样的设定虽在视频分析的场景下有非常广阔的输入,但深度学习模型的输入通常为RGB或BRG,且输入图片尺寸各异,因此ATC工具流程中提供了AIPP功能模块。

        与DVPP不同的是,AIPP主要用于在AI Core上完成数据预处理,通过AIPP提供的色域转换功能,输出满足要求的图片格式;通过改变图像尺寸中的补边(Padding)功能,输出满足长宽对齐的图片等,AIPP的出现是对DVPP能力的有效补充。

        AIPP根据配置方式不同 ,分为静态AIPP和动态AIPP;如果要将原始图片输出为满足推理要求的图片格式,则需要使用色域转换功能;如果要输出固定大小的图片,则需要使用AIPP提供的Crop(抠图)、Padding(补边)功能。

  • 静态AIPP:模型转换时设置AIPP模式为静态,同时设置AIPP参数,模型生成后,AIPP参数值被保存在离线模型(.om)中,每次模型推理过程采用固定的AIPP预处理参数进行处理,而且在之后的推理过程中无法通过业务代码进行直接的修改。如果使用静态AIPP方式,多batch情况下共用同一份AIPP参数。
  • 动态AIPP:模型转换时设置AIPP模式为动态,每次在执行推理前,根据需求动态修改AIPP参数值,然后在模型执行时可使用不同的AIPP参数。动态AIPP参数值会根据需求在不同的业务场景下选用合适的参数(如不同摄像头采用不同的归一化参数,输入图片格式需要兼容YUV420和RGB等)。如果模型转换时设置了动态AIPP,则使用应用工程进行模型推理时,需要在aclmdlExecute接口之前,调用aclmdlSetInputAIPP接口,设置模型推理的动态AIPP数据。如果使用动态AIPP方式,多batch使用不同的参数,体现在动态参数结构体中,每个batch可以配置不同的crop等参数。
  • 色域转换:色域转换,用于将输入的图片格式,转换为模型需要的图片格式,在使能AIPP功能时,通过csc_switch参数控制色域转换功能是否开启。一旦确认了AIPP处理前与AIPP处理后的图片格式,即可确定色域转换其他相关的参数值,本手册提供相关模板可以供用户使用,无需再次修改。
  • 改变图像尺寸:AIPP功能中的改变图像尺寸操作由Crop(抠图)、Padding(补边)完成,分别对应配置模板中的crop、padding参数。

        配置AIPP界面如下:

         其中:

Data Preprocessing用于控制是否开启AIPP功能;

Image Pre-processing Mode选择图像预处理模式,包括静态AIPP和动态AIPP;

Load Aipp Configuration用以加载之前配置好的AIPP文件,可省去重新配置AIPP的步骤;

Input Node:(data)用于选择输入数据格式,

        Input Image Format:选择送入.om模型时的图片格式。

        Input Image Resolution:设置AIPP的输入图片大小,可将图片剪裁成模型所需图片大小。

Model Image Format为模型所需图片的色域,此处就涉及到色域转换;

Crop是否裁剪图片;

Padding是否对图片进行补边;

Normalization是否对图片归一化,包括Mean(均值)、Min(最小值)和1/Variance(方差倒数)。

        点击Next进入下一步,配置高级选项:

         其中:

Operator Fusion选择以关闭融合功能,该功能涉及到昇腾模型压缩工具;

Auto Tune Mode设置算子自动调优模式,选择以开启调优;

Additional Arguments没有配置入口但ATC工具支持的参数可以在此处扩展进来;

Environment Variables配置环境变量,如打屏信息等;

Command Preview通过命令行参数的形式展示以上所进行的所有配置。

        点击Finish完成配置,在Output窗口中可以看到模型转换的进度。

        转换成功后会在输出路径中生成.om模型文件以及.json模型配置文件,在下次配置时可以使用该配置文件来省去重新配置的步骤。

③ 使用ATC命令行工具进行

        使用以下命令进行模型转换:

atc --model=model/resnet50.prototxt --weight=model/resnet50.caffemodel --framework=0 --output=model/resnet50 --soc_version=Ascend310 --insert_op_conf ./insert_op.cfg

        其中:

--model指定模型文件所在路径;

--weight指定权重文件所在路径;

--framework指定模型框架,0为caffe框架;

--output指定输出路径;

--soc_version指定芯片型号;

--insert_op_conf选择AIPP配置文件(.cfg)


3 单算子模型文件转换

        一条单算子模型文件转换的命令如下:

atc --singleop ./op_list.json --output ./output/ --soc_version Ascend310

        其中:

--singleop指定单算子描述文件;

--output指定输出路径;

--soc_version指定芯片型号。

        .json文件中为单算子的配置,其内容大致如下:

[
{"op": "GEMM","input_desc": [{"format": "ND","shape": [16, 16],"type": "float16"},{"format": "ND","shape": [16, 16],"type": "float16"},{"format": "ND","shape": [16, 16],"type": "float16"},{"format": "ND","shape": [],"type": "float16"},{"format": "ND","shape": [],"type": "float16"}],"output_desc": [{"format": "ND","shape": [16, 16],"type": "float16"}],"attr": [{"name": "transpose_a","type": "bool","value": false},{"name": "transpose_b","type": "bool","value": false}]
}
]

        描述文件的参数说明参考:描述文件参数说明

这篇关于【2023 · CANN训练营第一季】应用开发深入讲解④ 模型转换(ATC工具)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/351195

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in