技术标签: 华为云 目标检测 人工智能 pytorch AscendCL应用开发 神经网络
体系化学习AscendCL应用,目标为对昇腾CANN有初步了解并且可以基于昇腾CANN独立开发一个CV类图片应用。
【2023 · CANN训练营第一季】应用开发深入讲解① AscendCL概述
【2023 · CANN训练营第一季】应用开发深入讲解② 华为弹性云服务器(ECS)搭建介绍
【2023 · CANN训练营第一季】应用开发深入讲解③ 快速入门(基于ResNet-50网络模型的图片分类应用)
【2023 · CANN训练营第一季】应用开发深入讲解④ 模型转换(ATC工具)
当前昇腾AI处理器以及昇腾AI软件栈无法直接使用如Caffe、TensorFlow等开源框架网络模型来直接进行推理,想要进行推理则需要进行模型转换,将开源框架的网络模型转换成Davinci架构专用的模型。模型转换的步骤通过本部分所介绍的ATC工具来完成。
目录
昇腾张量编译器(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)。
➢ 只支持《算子规格说明》中的算子,并需满足算子限制条件,若不满足,可自行开发算子。
若不满足以上要求,则模型转换可能失败。
找到模型转换工具:
选择下载好的模型(以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(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 --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)
一条单算子模型文件转换的命令如下:
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
}
]
}
]
描述文件的参数说明参考:描述文件参数说明
文章浏览阅读6.3k次,点赞7次,收藏68次。1、ArUco简介ArUco: a minimal library for Augmented Reality applications based on OpenCV,是科尔多瓦大学“人工视觉应用”研究小组(A.V.A)设计开发的一个微型现实增强库。ArUco源码下载地址:https://sourceforge.net/projects/aruco/files/?source=navba..._多个aruco定位
文章浏览阅读447次。利用fragment和ViewPager实现类似微信的底部导航功能。上传模拟器运行截图及代码截图。_android仿微信底部导航栏
文章浏览阅读1.3k次,点赞37次,收藏16次。信息安全毕业设计选题合集涵盖了管理系统、小程序、深度学习、机器学习、算法、人工智能、大数据、网络安全、嵌入式、推荐系统、目标检测等多个热门领域。对于计算机专业、软件工程专业、人工智能专业、通信工程专业的毕业生而言,选择一个合适的毕业设计选题至关重要。在这个毕业设计选题合集中,我们精心收集了各种有趣且具有挑战性的选题,旨在帮助学生们在毕业设计中展现他们的技术实力和创新能力。不论是对于对深度学习技术感兴趣的同学,还是希望探索机器学习、算法或人工智能的领域的同学,本合集都能为您提供丰富的选题资源和灵感。
文章浏览阅读1.8w次,点赞13次,收藏99次。《Linux编程基础》黑马程序员/编著清华大学出版社一、填空题1、Linux是一个基于命令行的操作系统,Linux命令中的选项分为(长选项)和(短选项)。2、Linux操作系统秉持“一切皆文件”的思想,将其中的文件、设备等通通当做文件来操作和处理,因此,文件处理与管理命令是Linux系统中最基础的命令。常用的文件处理与管理命令有:(ls cd pwd touch mkdir cp mv rm rmdir(注:写出5个即可))等。3、Vi编辑器有三种工作模式,分别是:(命令模......_linux黑马课后作业答案第二章
文章浏览阅读1.8k次,点赞2次,收藏6次。输入框组扩展自 表单控件。使用输入框组,您可以很容易地向基于文本的输入框添加作为前缀和后缀的文本或按钮。_bootstrap加减输入框按钮组件
文章浏览阅读30次。改进的模拟退火算法求解带时间窗车辆路径规划问题完整的代码,方可运行;可提供运行操作视频!适合小白!
文章浏览阅读777次,点赞2次,收藏3次。Java PhantomJS+ECharts Windows 生成图片菜鸡程序员小童准备用Java生成图片啦,主要是为了生成图表哦简单的效果图开始准备下手吧~下载安装PhantomJS下载选择Windows版本,我选择的是2.1.1版本https://phantomjs.org/download.html部署环境PHANTOM_JS_HOME=D:\phantomjs\pha..._phantomjs eharts window cdns
文章浏览阅读701次,点赞21次,收藏9次。专栏的目录,可以直接通过各个分析点跳转到相关帖子,方便查找
文章浏览阅读967次。找出字符串 "abcabcabcabcabcabda" 中 "ab" 出现的次数和位置_编写一个函数,找出字符串 “abcabcabcabcabcabda” 中 “ab” 出现的次数和位置。
文章浏览阅读239次。第04天-文件IO系统调用是受控的内核入口,借助于这一机制,进程可以请求内核以自己的名义去执行某些动作**实现:**系统调用是操作系统内核的一部分的,必须以某种方式提供给进程让他们去调用。CPU可以在不同的特权级别下运行,而相应的操作系统也有的运行级别(用户态和内核态)运行在内核态的进程可以毫无限制的访问各种资源,操作系统通过软件中断从用户态切换到内核态库函数:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-18xZd0AJ-1656067116776)(D:\图片\imag_#include #include #include #incl
文章浏览阅读1.9k次,点赞3次,收藏6次。确定LR(1)项目的搜索符典例提示要求哪个的搜索符,就找这个是从哪儿来的,规约后原来的后面跟的就是搜索符_lr(1)搜索符怎么看
文章浏览阅读10w+次,点赞152次,收藏529次。VMware虚拟机安装Ubuntu(超详细图文教程)_vmware安装ubuntu