一、模型转换工具的介绍与操作演示–模型转换OMG介绍
Atlas200DK平台中提供了模型转换工具(OMG)。可以将caffe、Tensorflow等开源框架模型转换成Atlas200DK支持的模型,从而能够更方便快捷地把其他平台地模型放到Atlas200DK平台进行调试并拓展相关业务
1)OMG的功能介绍
2)OMG命令使用及命令参数解析
3)Mind Studio模型转换实际操作
4)OMG与整体结构关系、OMG转换流程以及整体业务流程
5)模型转换报错定位思想

1.OMG常用功能介绍

OME,离线模型执行,支持主流NN框架能够在Atlas200DK上进行推理,即用于离线模型转换完的管理和推理。主要功能如上图的右边所列。
OMG,离线模型生成,主要功能把训练好的模型脱离训练框架直接在昇腾处理器上进行执行。
omg使用:主要在Host测,一般我们的主机Linux Ubuntu上单独离线执行, 以omg可执行程序的方式提供给IDE,命令行方式调用;也可以在MindStudio上进行模型转换,实际上MindStudio也是调用的DDK中的omg可执行程序,使用命令行方式调用的。
2. 模型转换-OMG

OMG当前主要支持caffe和TF,也许后期升级会对更多的开源框架的进行支持。
主流开源框架的模型存储格式是protobuf,omg集成了protobuf的解析。对不同的框架所需要的东西也是不一样的,一般来说,都包括网络模型文件和权值文件。对caffe来说,它就包括网络结构文件和权值文件。TF来说,只需要一个,pb文件(网络和权值都在这个文件里)。
转成离线模型,看右边,也就是下图所示,先对模型和权重进行解析,后续经过graph,经过图处理之后,调用modelBuilder会生成模型,接着会对这个模型进行调验,最终才会生成我们的一个.om离线模型。

上面详细说明了OMG和OME的功能,以及omg的简易流程,下面看一下omg的运行环境及其命令的使用
3. 运行依赖库
先看一下当前运行环境所需要的依赖库情况。因为我们在使用的时候,会报缺少库这种情况。第一种情况,我们忘记配置环境变量,可以使用export LD_LIBARY_PATH环境变量配上。第二种情况,被其他软件做了升级,导致跟我们版本的库不匹配,我们可以把DDK中的so拿过来替换,那么这种问题就可以相对而言可以排除。
看一下库都做了哪些事,如下图所示:

还有一点需要注意的是,我们不需要去管库版本升级的问题,不需要做手动升级,因为omg所需依赖库都会根据版本做统一升级,已确保so库一致性
4. OMG命令使用及命令参数解析

示例1:alexnet转换,将caffemodel转换为昇腾处理器支持的离线模型了。

示例2:resNet18模型转换

input_shape在TF中使用的是比较多的,因为TF的网络有很多动态shape的模型,比如某一个网络,它的输入是[1,?,?,3],像这种动态shape,当前升腾处理器其实是不支持的,但我们在转模型的时候,需要把它转成固定的shape,比如说[1, ??,3] -->> [1, 224, 224,3],然后再去做离线转换。
aipp使用的好处:一般来说,它可以提高我们的性能,通常输入是图片的,并且数据是U8的,(比如说yuv数据,rgb数据,它相对来说,可以去开启),并且aipp本身也只支持U8的数据输入。
那么它的性能是怎么会提升呢?因为我们在做这个aipp的时候,我们很多处理会放到aicore里去做,比如,减均值以及相对应的格式转换的处理,还有omg模型在输入数据的时候,它会去做一个4D转5D的一个操作。而这一块东西,如果在cpu做,是比较耗时的,但我们aicore里面也是可以做的,放在aicore里去做,就可以大大提升推理时的性能。

通过上面两个命令,

–weight,caffe有,但tf是没有的,对于tf,weight是不需要设置的。
–plugin_path 自定义算子插件路径:我们做自定义算子的自定义文件路径指定。当我们可以把自己实现的算子加入到整网中,然后转成om离线模型,就需要用到pligin_path这个参数。
–insert_op_conf,输入预处理数据的配置文件路径,这个文件就是我们所说的aipp的配置路径。
–fp16_high_prec,是否生成高精度/高性能模型,默认是高精度FP16模型。’
–model,是一个可选项,默认0,即生成模型。

比如说,量化场景,我们就需要用的cal_conf这个量化配置。量化时所需要设置的一个参数。
其他的参数,其余不常见的参数可根据具体查看Atlas200DK模型转换指导。
还有相对来说,有些网络都是带后处理的,带后处理,我们需要一个op_name_map去设置后处理对应的名称。在caffe里面,比如说会有ssd detection output或者fastrcnn detection output这几类。
–out_nodes,我们在调试的时候,用的比较多,它可以downp指定层的数据。用于我们做精度分析,或者是其他的一些分析。
还有很多不常用的。
omg参数介绍的差不多
那我们如何能把各个模型高性能地运行起来,想必就是aipp这一块一些参数需要做一些了解。
5. 模型转换AIPP介绍

下面来看一下aipp配置文件。

上图,我在mindstudio转换模型时,通过cafmodel.node里面提取出的aipp配置,主要参数如下图所示。

aipp_mode,必选项,一般使用静态配置,动态的可以根据场景需要去配置。
related_input_rank:可选项。
src_image_size_w/h,进入aipp实际图片的宽高配置,如果在我们的流程代码里有dvpp的预处理,这里我们就需要考虑dvpp对齐,在dvpp课程里就会学到。比如:其实,我这个数据输入的是608X608,但,是经过dvpp处理后的。实际输入640X608,dvpp对齐导致产生的滤边,aipp会把相应的滤边裁去,最后,实际进入一个模型的是608X608的一个大小,然后去做推理。如果不设置或者设置为0,它是直接读取到模型里面的。所以我们就会碰到一种情况,经过了dvpp处理,并且对齐后有滤边的,放进模型去推理,导致推理出错,原因就是输入的数据大小和模型要求的数据的大小不匹配。
crop,aipp处理图片时是否支持抠图,也就是把滤边裁剪掉。
csc_switch:色域转换开关,静态aipp配置。它可以把yuv数据转换为模型所需的rgb/bgr的数据。
rbuv_swap_switch:色域转换钱,R通道与B通道交换开关/U通道与V通道交换开关。
rbuv_swap_switch:色域转换钱,R通道与B通道交换开关/U通道与V通道交换开关。再回过去看input_format,其实我们并不仅支持YUV420SP_U8/XRGB8888_U8/RGB888_U8/YUV400_U8,还可以支持BGR、NV11等等。

这些数据,通过mindstudio不需要修改的,实际修改的机率也不大。
在使用mindstudio的时候,aipp设置会根据开关状态回去自动生成。
还有没有提到的参数,比如说减均值、归一化的参数配置,其余的参数可以根据具体场景使用,去查看《atlas200dk的模型转换指导》文档。
atlas200DK还提供了更快捷的模型转换工具,那就是我们的mindstudio,下一章节,我们就去看看模型在mindstudio上时如何转换的。
6. Mind Studio模型转换实际操作
1)首先打开谷歌,登入mindstudio

然后去看模型转换的入口(tools–>Convert Model)

2)file–new–new project创建一个工程,创建界面如下:

在界面左边,双击resnet_50.mind,打开工程看一下,中间其实就是拖拽的界面,右边也是控件。如下图所示:

下图就是模型转换的入口,如下图所示,此时就不再是灰的了,点击进入就可以。

其实在我们工程也是可以进入模型转换的入口的,如下图所示:

在界面的右边,也就是控件部分model–>my model[+],也是可以进入模型转换的入口的,如下图所示:

进入模型转换界面之后,

offlinemodel,其实就是说,通过命令行方式,或者其他地方转过的模型,可以加载到当前的mindstudio中来,

量化模型,是需要输入图片校准级的,放在image_file。最后会生成一个量化模型。
Optional Optional是一个比较通用的。


operator plugin path,是自定义算子的一个插件。
很多图片的预处理,都是可以放到aicore去做。
input preprocessmodel是aipp的一个功能,可以不用,如果想要模型是fp32输入,那么就直接关掉。也是ok的,也是可以转的。但,如果我们能用这些aipp,我们还是尽可能去用。因为像aipp里面,你把它生了之后,我们很多一些图片数据的预处理。都可以放到aicore的去做,这样就可以大大加大我们的效率,就是在做推理的时候,那我们推理的性能肯定会比我们fp32速度快很多。



实际输入图片大小和模型所需模型大小不一样,原因在于受dvpp影响,dvpp的yuv数据输出做了padding,也就是会把我们的数据做对齐,这是自动的,我们不需要管。在运行的时候,aipp也会相应的把多出来的滤边裁剪掉。所以对我们是相对无感的。
model image format,作用就是上面(input image format)输入图片yuv420转换到BGR。如下图:

crop start loc:抠图
mean less:减均值
multipulying factor是做归一化的
encryption是加密功能,也很少去用。

生成之后界面,如下图所示:

点击close,出现如下界面,此时转换好的模型就放到了右边,mymodel里面了,此时左边也多出一个convertmodel.log

双击convertmodel.log打开看看,在中间部分可以看到,它给我们生成了一个aipp的配置说明以及模型转换的命令,其实它会做每个算子的遍历和处理,也可以看到一些报错。

以上是mindstudio转换,下面是在命令行的模型
先找到mindstudio中omg的工具,这个工具在~/tools/che/ddk/bin.x86_64-linux-gcc5.4


由于每次使用都需要指定路径,这样做比较费事,可以做一个软链接。这样在任何终端都可以使用,就不需要指定路径了。
在终端输入命令:ln -s omg /usr/bin/omg


输出模型为fp32的命令:
omg --model=resnet50.prototxt --weigth=resnet50.caffemodel --framwork=0 --output=resnet_noaipp

下图为fp32的输出模型:

下图带aipp的模型,也就是int8的模型。命令方式,如下图:
omg --model=resnet50.prototxt --weigth=resnet50.caffemodel --framwork=0 --insert_op_conf=aipp.cfg --output=resnet_aipp

Atlas 200 DK 系列 --高级篇--模型转换相关推荐

  1. Atlas 200 DK 系列--初级篇--图像分类应用的部署和使用

    通用分类网络应用 本Application支持运行在Atlas 200 DK或者AI加速云服务器上,实现了对常见的分类网络的推理功能并输出前n个推理结果. 前提条件 部署此Sample前,需要准备好以 ...

  2. Atlas 200 DK 系列--初级篇--MindStudio常见操作

    简介 Mind Studio是一套基于华为昇腾AI处理器开发的AI全栈开发平台,包括基于芯片的算子开发.以及自定义算子开发,同时还包括网络层的网络移植.优化和分析,另外在业务引擎层提供了一套可视化的A ...

  3. Atlas 200 DK 系列 -- 快速搭建开发环境

    一 .PC虚拟机上安装Ubuntu (系统版本为(ubuntu-16.04.3-desktop-amd64.iso),与版端系统版本必须对应(ubuntu-16.04.3-server-arm64.i ...

  4. Atlas 200 DK

    Atlas 200 DK系列教程--初级篇 Atlas 200 DK文档 搭建硬件环境 制作SD卡 get tools git clone https://github.com/Ascend/tool ...

  5. 【华为云技术分享】【昇腾】【玩转Atlas200DK系列】Atlas 200 DK安装python的hiai库以及opencv

    [摘要] Atlas 200 DK安装python的hiai库以及opencv [昇腾]开发板上安装python的hiai库和opencv库 Matrix是已经支持phthon接口了,但是发现目前py ...

  6. 【玩转Atlas200DK系列】Atlas 200 DK安装python的hiai库以及opencv

    [摘要] Atlas 200 DK安装python的hiai库以及opencv [昇腾]开发板上安装python的hiai库和opencv库 Matrix是已经支持phthon接口了,但是发现目前py ...

  7. 【华为云技术分享】基于Atlas 200 DK的原版YOLOv3(基于Darknet-53)实现(Python版本)

    摘要:本文将为大家带来使用Atlas 200 DK的原版YOLOv3(基于Darknet-53)实现的展示. 前言 YOLOv3可以算作是经典网络了,较好实现了速度和精度的Trade off,成为和目 ...

  8. 【华为云技术分享】【昇腾】ModelArts与Atlas 200 DK云端协同开发——行人检测Demo(提供完整Demo)

    基于ModelArts与Atlas 200 DK 端云协同开发,基于开源数据集,使用ModelArts训练行人检测模型,在本地MindStudio完成模型转换,最终部署到Atlas 200 DK,从数 ...

  9. 【Atlas 200 DK】(一)简介 Atlas 200 DK 开发者套件(型号:3000)

    >>> 华为Atlas 200 DK官网 >>> 华为云学院 >>> Atlas200DK教程(入门篇) 技术规格 产品 Atlas 200 DK ...

最新文章

  1. Windows2008/2012多用户同时远程连接终端服务授权
  2. 94授权登录steam怎么用_Steam手机令牌如何绑定,绑定后好处多多
  3. 多重背包问题以及二进制优化
  4. leetcode面试题 10.03. 搜索旋转数组(二分法)
  5. Django二次开发对接FastDFS
  6. 2020年视频号发展白皮书
  7. resnet,inception,densenet,senet
  8. python虚拟环境 windows环境搭建_windows下安装Python虚拟环境virtualenvwrapper-win
  9. 【转】编辑器与IDE
  10. atitit.泛型编程总结最佳实践 vO99 java c++ c#.net php
  11. Windows 上C++ new/detele如何知道内存大小
  12. SpringCloud优点、缺点
  13. nacos配置中心提示com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNAVAILABLE: io exceptio
  14. 某公司盗用我的名字做虚假宣传
  15. 用R来求解一元二次方程
  16. 网站分析行业的“前途”和“钱途”
  17. 自然语言14_Stemming words with NLTK
  18. 29 Redis 应对并发访问的无锁原子操作
  19. 微软在盗版黑屏事件可能犯下极大的错误
  20. AIX 学习笔记之 存储管理 LV PV VG PP

热门文章

  1. 作为金山办公产品的用户对WPS Office的质疑
  2. 区分整流二极管和稳压二极管
  3. 第2章第28节:英文排版技巧:在文字中填充图片 [PowerPoint精美幻灯片实战教程]
  4. 中、高级职称期刊论文发表有些什么要求
  5. 运行时错误“-2147023174 (800706ba): RPC 服务器不可用”是怎么回事?
  6. 一年之计在于春 给农业插上智慧翅膀
  7. Centos7.2上安装libreoffice7.1.0.2
  8. Mybatis原码学习(三)Reflector
  9. 卸载oracle9i精简版,oracle9i下载
  10. excel 去除html,Excel怎么删除网页上复制删不掉的文本框