模型转换
模型转换入口
- 可以通过如下两种方式进入模型转换界面。
- 在菜单栏选择 。
- 在菜单栏选择 ,菜单栏下方会出现一行工具栏,选择。
转换详情请参见转换步骤。
- 用户也可以通过如下方式使用ATC命令行进行模型转换。
转换前提
进行模型转换前,使用MindStudio安装用户,将所转换模型的模型文件以及权重文件上传到Ascend-cann-toolkit开发套件包所在的开发环境。进行模型转换前,用户可以按需配置环境变量,具体可参考全局环境变量设置。
转换步骤
- 打开模型转换页面,在“Model Information”页签中上传模型文件和权重文件,界面参考如图1或图2所示,不同版本请以实际界面显示为准。
参数解释如表1所示。
表1 Model Information界面参数配置 参数
说明
CANN Machine
(仅Windows系统支持此参数)
自动填充。远程连接CANN所在环境的SSH地址,表现格式为<username>@localhost:端口号。
Model File
模型文件。必填。该模型文件需要取消其他用户写的权限。
单击右侧的文件夹图标,选择需要转换的模型模型文件。
- 在Linux上使用模型转换功能时,选择或直接输入本地服务器上需要转换的模型文件路径。
- 在Windows上使用模型转换功能时,在弹出的窗口中选择“remote path”,在后台服务器路径选择需要转化的模型文件并上传;选择“local path”,单击右侧的文件夹图标,在Windows本地选择或直接输入需要转化的模型文件路径并上传。
说明:当导入超大模型时,如果提示报错“Failed to get model input shape.”,请在MindStudio安装路径下bin目录中的MindStudio.exe.vmoptions文件(32位)或者MindStudio64.exe.vmoptions文件(64位)中,将Xms和Xmx的数值调大后重启MindStudio。
Weight File
权重文件。当原始框架是Caffe时,该参数存在且必填:- 在Windows环境中,模型文件和权重文件需要放在同一目录下,单击选择模型文件时,权重文件将会自动填充。
- 在Linux环境中,如果模型文件和权重文件存在于后台服务器同一目录下,且名称和模型文件名称相同,则选择模型文件后,权重文件会自动填充。
- 如果模型文件和权重文件存在于后台服务器不同目录下,或者在同一目录下,但名称和模型文件名称不相同。
- 用户手动上传权重文件,单击右侧的文件夹图标,在后台服务器路径选择模型文件对应的权重文件,上传即可。
- 在参数后面的输入框中自行输入*.caffemodel权重文件在后台服务器的路径,包括权重文件名称及后缀。
Model Name
模型文件名称,必填。选择模型文件后,该参数会自动填充,用户可以根据需要自行修改名称,要求如下:
只支持a-z、A-Z、0-9、下划线以及短划线的组合,最多支持64个字符。
如果模型转换的输出路径已经存在相同名称模型文件,单击“Next”后会提示覆盖原有文件或重命名当前Model Name的信息,用户根据实际情况选择。
Output Path
输出的另存模型文件路径,用户可通过手动输入或单击右侧文件夹图标进行选择。进行模型转换后,系统会把默认在$HOME/modelzoo/${Model Name}/${Target SoC Version}/路径下输出转换后的om模型文件拷贝至配置的Output Path路径中。
Target SoC Version
模型转换时指定芯片型号。请根据板端环境具体芯片形态进行选择。
Input Format
输入数据格式。
- 当原始框架是Caffe时,取值为NCHW、ND(表示支持任意格式,N<=4),默认为NCHW。
- 当原始框架是ONNX时,取值为NCHW、NCDHW、ND(表示支持任意维度格式,N<=4),默认为NCHW。
- 当原始框架是MindSpore时,取值为NCHW。
- 当原始框架是TensorFlow时,取值为NHWC、NCHW、ND、NCDHW、NDHWC,默认为NHWC。
Input Nodes
模型输入节点信息。
- 如果选择模型文件并且解析成功,则该参数下方会展示模型输入节点的shape信息以及Type信息。
- 如果选择模型文件后,无法解析“Input Nodes”,该场景下,需要用户根据模型文件中的相关信息手动输入:单击该参数右侧的,在弹出界面中输入模型输入节点的Name、Shape信息(只支持英文逗号,数字(-1或大于0的整数),不能以英文逗号开头,只能以数字结尾)和输入节点的数据类型Type。单击删除节点信息。
- 如果模型有多个输入,解析成功后,“Input Nodes”参数下方会展示每一个输入节点的Shape信息和Type信息。
说明:
若原始框架为MindSpore,Input Nodes不会自动解析对应模型中的输入信息,需要用户自行查看相应的网络模型输入,手动填写。如果不填,后台使用atc命令进行转换时,ATC工具会自动解析网络模型中的相关参数。
Shape
模型输入的shape信息。例如图1中的数值分别代表输入数据的N(模型一次处理的图片个数),C(Channel,例如彩色RGB图像的Channel数为3),H(Height),W(Width)。若开启AIPP功能,则此处的H,W取值即为AIPP输出数据的高和宽。根据输入数据格式分为以下两种设置情况。
- 当“Input Format”参数是具有固定形状的输入数据格式,如NCHW和NCDHW等,
- 设置动态batch:适用于执行推理时,每次处理图片数量不固定的场景。
将解析的shape中的N设置为-1,单击其他参数或者单击“Next”,会在shape下方出现Dynamic Batch参数。在其中的编辑框中输入具体的档位数,每一档通过英文逗号分隔。最多支持100档配置,每个档位数值建议限制为:[1~2048],例如输入1,2,4,8。
如果模型转换时设置了Dynamic Batch参数,则使用应用工程进行模型推理时,需要在aclmdlExecute接口之前,增加aclmdlSetDynamicBatchSize接口,用于设置真实的batch档位。关于aclmdlSetDynamicBatchSize接口的具体使用方法,请参见《应用软件开发指南(C&C++)》的“AscendCL API参考”中的模型加载与执行章节。
- 设置输入图片的动态分辨率:适用于执行推理时,每次处理图片宽和高不固定的场景。
将解析的shape中的H和W设置为-1,单击其他参数或者单击“Next”,会在shape下方出现Dynamic Image Size参数。在其中的编辑框中输入具体的动态分辨率参数,最少输入两组,每一组参数通过英文分号分隔,组内参数使用英文逗号分隔。最多支持100档配置,例如输入112,112;224,224。
如果模型转换时设置了Dynamic Image Size参数,则使用应用工程进行模型推理时,需要在aclmdlExecute接口之前,增加aclmdlSetDynamicHWSize接口,用于设置真实的分辨率。关于aclmdlSetDynamicHWSize接口的具体使用方法,请参见《应用软件开发指南(C&C++)》的“AscendCL API参考”中的模型加载与执行章节。
如果模型转换时设置了动态分辨率,并且要使用“Data Pre-Processing”中的数据预处理功能,该场景下不能设置数据预处理的Crop和Padding功能。
设置动态batch和动态分辨率不能同时使用,一次只能设置其中一个参数。
- 设置动态batch:适用于执行推理时,每次处理图片数量不固定的场景。
- 当“Input Format”参数为ND,设置ND格式下的动态维度:适用于执行推理时,每次处理任意维度的场景。
根据需要设置-1在Shape中数量及位置,单击其他参数或者单击“Next”,会在Shape下方出现Dynamic Dims参数。在其中的编辑框中输入具体的动态维度参数,最少输入2组,最多100组。组与组之间使用英文分号分隔,组内参数使用英文逗号分隔。组与组之间的内容不能重复,组内的最小维度为1。每组中的参数值与Shape参数中的-1标识的参数依次对应,Shape参数中有几个-1,则每组必须设置几个参数值。例如输入shape信息为“-1,-1,-1,-1”,输入Dynamic Dims参数可以为“1,224,224,3;2,448,448,6”。
Type
Type:指定输入节点的数据类型。
- 若原始框架类型为Caffe、ONNX,支持的数据类型为FP32、FP16、UINT8。
- 若原始框架类型为MindSpore,支持的数据类型为FP32、UINT8。
- 若原始框架类型为TensorFlow,支持的输入数据类型为FP32、FP16、UINT8、Int32、Int64、Bool。
当原始框架为Caffe、ONNX和MindSpore时,只有Type取值为UINT8,2中“Data Pre-Processing”页签(配置AIPP功能)才支持配置,其他类型不支持配置。如果模型有多个输入,只有Type取值为UINT8的节点,才可以配置“Data Pre-Processing”页签;如果Type取值为UINT8的节点无法获取Shape中的H,W信息,也无法配置“Data Pre-Processing”页签。
当原始框架为TensorFlow时,只有Type取值不为FP16,2中“Data Pre-Processing”页签(配置AIPP功能)才支持配置。如果模型有多个输入,只有Type取值不为FP16的节点,才可以配置“Data Pre-Processing”页签;如果Type取值不为FP16的节点无法获取Shape中的H,W信息,也无法配置“Data Pre-Processing”页签。
Output Nodes
指定输出节点信息。
单击“Select”在弹出的网络拓扑结构中,选中某层节点,右击选择 ,该层由蓝色标签进行标记,单击“OK”后,在“Output Nodes”参数下面会看到标记层的算子,右击选择 取消选中。
- Op Name:标记层的算子名称。
- Data Type:算子输出的数据类型,包括FP32、UINT8、FP16,通过该参数用户可以设置单个算子的输出数据类型。
“Output Nodes”参数下方 层的算子,默认为全部选中,用户可以自行选择将不需要输出的算子去勾选,只有选中的算子才会作为模型的输出。本章节以选中所有算子为例进行说明。
某些情况下,用户想要查看某层算子参数是否合适,则需要将该层算子的参数输出,即可以通过单击“Select”按钮,在弹出网络拓扑结构中将所需层的算子标记为 ,然后在“Output Nodes”参数下方选中想要输出的算子,模型转换后,在相应.om模型文件可以看到该算子的输出直接作为模型的输出。详细信息请参见模型可视化。
说明:- 如果不标记某层算子或标记后Output Nodes节点下方不选中某个算子,则模型的输出默认为最后一层的算子信息。
- 如果标记某层算子,并且标记后Output Nodes节点下方选中某个或多个算子,则模型输出为Output Nodes节点下方选中的算子。
- 如果模型转换过程中该算子被融合掉,则该算子不能作为输出节点。
- 如果用户选择的模型中包括不支持的算子,则单击“Select”后,MindStudio界面“Output”窗口会提示哪些算子不支持并提示shape信息无法获取等信息,在弹出的网络结构图中该算子呈现红色,该场景下无法获取算子的输出维度和shape信息。
- 若原始框架为MindSpore,该参数无法编辑,不支持指定输出节点信息。
Load Configuration
导入上次模型转换的配置文件。
如果用户之前转换过模型,无论成功与否,在$HOME/modelzoo/${Model Name}/${Target SoC Version}/路径都会生成${Model Name}_config.json配置文件,该文件记录用户模型转换时所选择的配置信息,包括所用模型路径、模型名称、输入输出配置,数据预处理配置等,下次重新转换模型时,通过单击“Load Configuration”选择相应路径下的配置文件,则相应的配置信息会自动填充,用户自行决定是否沿用上次配置还是修改配置后重新进行模型转换。
单击右侧的按钮,弹出生成模型网络结构图进度条,之后会弹出该模型的原始网络结构图,如图3所示。(MindSpore框架的原始网络模型,不支持查看网络结构图。)
- 上/下滑动鼠标滚轮,可以控制模型可视化区域的上/下移动。
- 按住Ctrl键+上下滑动鼠标滚轮,可以实现模型可视化区域的放大/缩小。
- 查看算子信息
单击某层算子,该层算子会出现绿色选中框,右上角区域会展示该选中框所有的算子,单击可以展开所有算子信息,包括算子名称,算子类型以及算子的参数信息等,单击折叠所有的算子信息;用户也可以逐层单击相关算子左侧的展开按钮,查看参数的详细信息。展示的信息同模型文件中该层算子的信息。
- 查看算子输出维度和shape信息
图3所示界面展示了每一层算子输出的维度和shape信息,如每一层算子连接线中间的1,3,224,224、1,64,112,112等信息。将鼠标移至某个shape上面,在其上面会显示算子输出的维度信息,例如NCHW等维度。
如果用户选择的模型中包括不支持的算子,则单击右侧的按钮,MindStudio界面“Output”窗口会提示哪些算子不支持并提示shape信息无法获取等信息,在弹出的网络结构图中该算子呈现红色,该场景下无法获取算子的输出维度和shape信息。该场景下的处理方法请参见异常处理。
- 搜索算子
搜索区域中给出了该模型所用到的所有算子,您可以在搜索区域“Find”后面的对话框中输入算子名称,下方搜索区域会列出相关的算子,选择其中一个算子,左侧网络拓扑结构中相应算子会显示绿色选中框,右上方会展示该选中框所包括的所有算子信息。
图4 模型可视化界面的搜索功能
- 搜索算子内部信息
选中某层算子,单击右上方的展开按钮,右侧区域框会展示该层所包括所有算子的信息,然后单击或在右侧区域使用“Ctrl+F”快捷键,弹出图5所示搜索界面,其中:
- Case sensitive:大小写敏感。
- Wrap Search:循环搜索。
- Backward:反向搜索。
用户在输入框中输入想要查询的信息,比如算子的输入输出、属性等信息,然后在图5界面中勾选搜索特性,单击“Find”进行查找,如果匹配到相关信息,则右侧区域框中相关信息会高亮显示,否则会提示“Value not found”。单击“Close”退出搜索。
单击“OK”退出编辑。
- 单击“Next”,进入“Data Pre-Processing”配置数据预处理页签,界面参考如图6所示,不同版本请以实际界面显示为准。
数据预处理是昇腾AI处理器BS9SX1A AI处理器提供的硬件图像预处理模块,包括色域转换,图像归一化(减均值/乘系数)和抠图(指定抠图起始点,抠出神经网络需要大小的图片)等功能。
只有当“Model Information”页签,“Input Nodes”参数中,输入节点的“Type”有配置为“Uint8”类型,“Data Pre-Processing”页签才可以配置该节点的数据预处理功能。如果模型有多个输入,每个输入节点都可以获取shape信息中的宽和高,并且“Input Nodes”参数中每个输入节点的“Type”都配置为“Uint8”,则“Data Pre-Processing”页签可以配置多个节点的数据预处理功能。参数说明如表2所示。
表2 节点配置参数 参数
说明
Image Pre-processing Mode
图片预处理模式, 包括如下两种:
- Static:静态AIPP。
- Dynamic:动态AIPP。
Load Aipp Configuration
AIPP配置加载功能。动态AIPP不支持此功能。
开启此功能后,在“Aipp Configuration File”输入框中选择对应的配置文件或者手动输入配置文件路径。
加载配置文件后,所有“Input Node: (data)”和“Input Node: (im_info)”下的参数按照配置文件自动设置,如有需要,用户可自定义修改界面参数。
Image Pre-processing Mode取值为Static,如下参数需要配置:
Input Node: (data)
节点配置开关,可以控制是否对该节点开启AIPP。只有图1中Input Nodes参数对应data节点的Type取值为UINT8,该参数才会自动开启。当模型为TensorFlow时,图1中Input Nodes参数对应data节点的Type取值为FP32、Int32、Int64、Bool时,可以手动开启该参数。
Input Node: (im_info)
模型有两个输入时,该参数才出现,表示对模型的第二个输入开启AIPP。只有图1中Input Nodes参数对应im_info节点的Type取值为UINT8,并且能获取模型的宽和高,该参数才打开。Input Node: (im_info)中的im_info根据解析的模型不同而变化。
Input Image Format
输入图片格式。
若1中“Target SoC Version”选择Ascend310、Ascend710、Ascend710Pro,则支持的格式为:YUV420 sp、YVU420 sp、RGB package、BGR package、YUV400。
- 若取值为YUV420 sp、YVU420 sp、YUV422 sp、YVU422 sp,则右侧会出现输入数据类型选项:
BT.601(Video Range)、BT.601(Full Range)、BT.709(Video Range)、BT.709(Full Range)
不同的类型,对应不同的色域转换配置(色域转换,用于将输入的数据格式,转换为模型需要的格式,具体色域转换系数会在模型转换完成后生成在insert_op.cfg配置文件中)其中:
- BT.601是标准清晰度视频的格式,定义于SDTV标准中。
- BT.709是标准化高清晰度视频的格式,定义于HDTV标准中。
两种标准又分为NARROW(Video Range)和WIDE(Full Range),其中:
NARROW取值范围为:;WIDE取值范围为:,关于如何判断输入数据的标准,请参见《ATC工具使用指南》“FAQ > 使用AIPP色域转换模型时如何判断视频流的格式标准”章节。
- 若取值为YUV400,不支持色域转换。
- 若取值为RGB package、BGR package、ARGB package、RGBA package、ABGR package、BGRA package,则不会出现右侧的输入数据类型选项,根据输出(Model Image Format)参数的取值不同,模型转换完成后,数据预处理配置文件insert_op.cfg中如下参数的取值不同:
- 若取值为BGR package,输出为RGB;或取值为RGB package,输出为BGR:
#色域转换前,R通道与B通道交换开关/U通道与V通道交换开关 rbuv_swap_switch : true
- 若取值为BGR package,输出为BGR;或取值为RGB package,输出为RGB:
#色域转换前,R通道与B通道交换开关/U通道与V通道交换开关 rbuv_swap_switch : false
- 若取值为ARGB package,输出为RGBA;或取值为ABGR package,输出为BGRA:
#色域转换前,R通道与B通道交换开关/U通道与V通道交换开关 rbuv_swap_switch : false #色域转换前,RGBA->ARGB, YUVA->AYUV交换开关 ax_swap_switch : true
- 若取值为ARGB package,输出为BGRA;或取值为ABGR package,输出为RGBA:
rbuv_swap_switch : true ax_swap_switch : true
- 若取值为RGBA package,输出为RGBA;或取值为BGRA package,输出为BGRA:
rbuv_swap_switch : false ax_swap_switch : false
- 若取值为RGBA package,输出为BGRA;或取值为BGRA package,输出为RGBA:
rbuv_swap_switch : true ax_swap_switch : false
- 若取值为BGR package,输出为RGB;或取值为RGB package,输出为BGR:
Input Image Resolution
原始图片大小。
如果“Input Image Format”取值为“YUV420 sp”,要求原始图片的宽和高取值是偶数。
Model Image Format
模型处理图片格式。
输入图片格式不同,模型处理图片格式不同,具体格式如下:
- 若“Input Image Format”取值为YUV420 sp、YVU420 sp、YUV422 sp、YVU422 sp、BGR package,则“Model Image Format”取值为RGB、BGR。
- 若“Input Image Format”取值为RGB package,则“Model Image Format”取值为RGB、BGR、GRAY。
- 若“Input Image Format”取值为YUV400,则“Model Image Format”取值只能为GRAY。
- 若“Input Image Format”取值为ARGB package、RGBA package、ABGR package、BGRA package,则“Model Image Format”取值为RGBA、BGRA。
- 若2中“Aipp Configuration File”选择的AIPP配置文件是读不出RGB数据的异常文件,则“Model Image Format”默认取值为GRAY。
该参数同时也是色域转换开关,默认开启。当输入图片格式与模型处理文件格式不一致时需要开启。
Crop
抠图开关,若开启,则表示启用抠图功能。默认关闭。
开启该参数后,下方会出现如下两个参数:
- Cropping Start:抠图开始位置。Cropping Start [H][W]的取值范围要小于Input Image Resolution [H][W](原始图片的高和宽)。
- Cropping Area:抠图大小,默认抠图大小的宽和高来自图1“Input Nodes”参数中Shape参数取值的宽和高,修改的宽和高取值不能超过原始图片Input Image Resolution对应参数的取值。
抠图约束如下:
- 若“Input Image Format”取值为YUV420 sp、YVU420 sp,则Cropping Start [H][W]都必须为偶数。
- 若“Input Image Format”取值为YUV422 sp、YVU422 sp,则Cropping Start [W]必须为偶数。
- 若“Input Image Format”取值为其他值,对Cropping Start [H][W]没有约束。
- 若开启抠图功能,则Input Image Resolution >= Cropping Area + Cropping Start。
若开启抠图功能,并且没有开启Padding,该场景下Cropping Area [H][W]才能取值为0或不配置,此时抠图大小Cropping Area [H][W]取值来自图1Input Nodes中shape取值的高和宽(模型文件input shape中的高和宽)。
Padding
Padding使能开关,若开启,则表示启用补边功能。默认关闭。
Padding Area [L][R][B][T]取值范围为[0,32]。AIPP经过Padding后,输出的图片的高和宽要与模型需要的高和宽保持一致。
Normalization
归一化开关。
开启后,包括Mean、Min、Variance三个配置项,其中“Conversion Type”表示计算规则。
Mean
每个通道的均值。
当开启“Normalization”参数时才呈现。
- 若“Model Image Format”为RGB时,则该参数显示为Mean: [R][G][B],每个通道的默认值为104、117、123,可根据需要手动修改默认值。
- 若“Model Image Format”为BGR时,则该参数显示为Mean: [B][G][R],每个通道的默认值为104、117、123,可根据需要手动修改默认值。
- 若“Model Image Format”为GRAY时,则该参数显示的默认值为104,可根据需要手动修改默认值。
- 若“Model Image Format”为RGBA时,则该参数显示为Mean: [R][G][B][A],每个通道的默认值为104、117、123、0,可根据需要手动修改默认值。
- 若“Model Image Format”为BGRA时,则该参数显示为Mean: [B][G][R][A],每个通道的默认值为104、117、123、0,可根据需要手动修改默认值。
Min
每个通道的最小值。
当开启“Normalization”参数时才呈现。
- 若“Input Image Format”为YUV420 sp、YVU420 sp、YUV422 sp、YVU422 sp、YUV400、RGB package、BGR package,则该参数显示为Min: [R][G][B],每个通道的默认值都为0。
- 若“Input Image Format”为ARGB package、RGBA package、ABGR package、BGRA package,则该参数显示为Min: [R][G][B][A],每个通道的默认值都为0。
1/Variance
每个通道的方差的倒数。
当开启“Normalization”参数时才呈现。
- 若“Input Image Format”为YUV420 sp、YVU420 sp、YUV422 sp、YVU422 sp、YUV400、RGB package、BGR package,则该参数显示为1/Variance: [R][G][B],每个通道的默认值都为1.0。
- 若“Input Image Format”为ARGB package、RGBA package、ABGR package、BGRA package,则该参数显示为1/Variance: [R][G][B][A],每个通道的默认值都为1.0。
Image Pre-processing Mode取值为Dynamic,如下参数需要配置:
Input Node: (data)
动态AIPP节点配置开关,可以控制是否对该节点开启动态AIPP。只有图1中Input Nodes参数对应data节点的Type取值为UINT8,该参数才打开。
Input Node: (im_info)
模型有两个输入时,该参数才出现,表示对模型的第二个输入开启动态AIPP。只有图1中Input Nodes参数对应im_info节点的Type取值为UINT8,并且能获取模型的宽和高,该参数才打开。Input Node: (im_info)中的im_info根据解析的模型不同而变化。
Max Image Size (Byte)
输入图像最大的size,动态AIPP必须配置(如果为动态batch场景,N为最大档位数的取值)
- 若输入图像格式为YUV400_U8,则Max Image Size>=N * Input Image Resolution [W] * Input Image Resolution [H] * 1。
- 若输入图像格式为YUV420SP_U8,则Max Image Size>=N * Input Image Resolution [W] * Input Image Resolution [H] * 1.5。
- 若输入图像格式为XRGB8888_U8,则Max Image Size>=N * Input Image Resolution [W] * Input Image Resolution [H] * 4。
- 若输入图像格式为RGB888_U8,则Max Image Size>=N * Input Image Resolution [W] * Input Image Resolution [H] * 3。
模型转换是否开启AIPP功能,执行推理业务时,对输入图片数据的要求:
模型转换时开启AIPP,在进行推理业务时,输入图片数据要求为NHWC排布,该场景下最终与AIPP连接的输入节点的格式被强制改成NHWC,该场景下可能与1中“Model Information”页签中“Input Format”参数指定的数据格式不一致。
- 单击“Next”,进入“Advanced Options Preview”高级选项配置页签,界面参考如图7所示,不同版本请以实际界面显示为准。
参数解释如下:
- 单击“Finish”,开始进行模型转换。
在MindStudio界面下方,“Output”窗口会显示模型转换过程中的日志信息,如果提示“Model converted successfully”,则表示模型转换成功。“Output”窗口会显示模型转换所用的命令、所设置的环境变量、模型转换的结果、模型输出路径以及模型转换日志路径等信息。
- 模型转换完毕,在服务器后台路径“$HOME/modelzoo/resnet50/$Soc_Version ”下会生成用于运行环境运行的.om模型文件,以及模型转换所用的配置信息文件${modelname}_config.json和日志文件ModelConvert.txt。
- 如果开启数据预处理功能,在.om同级目录下,还会生成数据预处理的配置信息文件(insert_op.cfg)。
- 如果勾选关闭融合功能,在.om同级目录下,还会生成融合开关配置文件(fusion_switch.cfg),用于记录哪些功能被关闭。
模型转换的日志文件(ModelConvert.txt)所在路径为:“$HOME/modelzoo/resnet50/$Soc_Version”。回显信息示例如下:
hisisoc@dggphicprd32833:~/modelzoo/resnet50/$ ll total 150636 drwxr-x--- 4 hisisoc hisisoc 4096 Mar 10 16:46 ./ drwxr-x--- 4 hisisoc hisisoc 4096 Mar 10 16:45 ../ drwxr-x--- 2 hisisoc hisisoc 4096 Mar 10 16:45 Ascend310/
hisisoc@dggphicprd32833:~/modelzoo/resnet50$ cd Ascend310 hisisoc@dggphicprd32833:~/modelzoo/resnet50/Ascend310$ ll total 50780 drwxr-x--- 2 hisisoc hisisoc 4096 Mar 10 16:46 ./ drwx------ 3 hisisoc hisisoc 4096 Mar 10 16:45 ../ -rw------- 1 hisisoc hisisoc 127 Mar 10 15:55 fusion_switch.cfg --融合开关配置文件 -rw------- 1 hisisoc hisisoc 453 Mar 10 16:45 insert_op.cfg --数据预处理配置文件 -rw-r----- 1 hisisoc hisisoc 453 Mar 10 16:45 ModelConvert.txt --日志文件 -rw------- 1 hisisoc hisisoc 2095 Mar 10 18:03 resnet50_config.json --模型转换所用的配置信息文件,下次模型转换时,可以通过选择该文件沿用上次模型转换的配置数据 -rw------- 1 hisisoc hisisoc 51581408 Mar 10 16:46 resnet50.om --上板运行的模型文件
异常处理
- 问题描述
如果用户选择的模型文件中包括昇腾AI处理器BS9SX1A AI处理器不支持的算子,则模型转换时会弹出图8所示整网支持度评估报告。
其中左侧的“Summary”区域中:
- 解决方法
- 在图8所示整网支持度评估报告界面中,选中右侧“Result Details”区域“Result”为“failed”的算子,则该算子整行被选中。单击最右侧“Operation”下面的解决方法,例如“Creator Operator”,创建自定义算子工程。
如果当前已经打开了算子工程,则会弹出图9提示框,可以选择在当前算子工程添加算子或新建算子工程;如果当前不存在算子工程,则会直接弹出新建算子工程界面。
关于创建自定义算子工程的详细操作请参见工程创建。 - 根据引导完成自定义算子工程的创建。
中的“Operator Type”自定义算子的类型,会根据模型支持度评估界面选中的算子类型自动填充。创建完成后,新建工程的默认存储路径为“$HOME/AscendProjects”。
算子工程目录结构以及主要文件如下:├── .idea ├── build //编译生成的中间文件 ├── cmake //编译相关公共文件存放目录 ├── framework //算子插件实现文件目录 │ ├── tf_plugin //存放tensorflow框架的算子插件文件及编译规则文件 │ │ ├── tensorflow_add_plugin.cpp ...... ......
- 进行自定义算子的开发,详细信息请参见自定义算子开发。
自定义算子开发完成后,重新进行模型转换。
- 在图8所示整网支持度评估报告界面中,选中右侧“Result Details”区域“Result”为“failed”的算子,则该算子整行被选中。单击最右侧“Operation”下面的解决方法,例如“Creator Operator”,创建自定义算子工程。