OM模型输入/推理解析一指禅

举报
j_f 发表于 2020/03/31 10:43:22 2020/03/31
【摘要】 一个转换成功的OM模型放在我们面前,怎么应用这个模型呢? 三板斧: 首先,确定模型的输入/输出信息;其次,按照输入shape构造模型的输入数据,将输入数据送给模型去推理;最后,根据模型的输出shape 以及输出shape的含义,解析推理结果

目录

OM模型输入/推理解析一指禅

一个转换成功的OM模型放在我们面前,怎么应用这个模型呢?

三板斧: 首先,确定模型的输入/输出信息;其次,按照输入shape构造模型的输入数据,将输入数据送给模型去推理;最后,根据模型的输出shape 以及输出shape的含义,解析推理结果。

1、查看模型输入输出

1.1查看模型输入信息

MindStudio工具查看模型网络拓扑结构参考:

https://ascend.huawei.com/doc/Mind%20Studio/2.1.0(beta)/zh/zh-cn_topic_0192773098.html

查看模型的输入shape

在模型显示图上方,选中data节点, 右侧展开input_desc ,查看各输入节点的shape

1585622793456784.png


 

例:如上图 input[0]shape[13600800]dtype =3 int8 类型。

上图中有两个data节点,说明,此模型有两个输入shape。另一个data节点的shape[1,3,1,1]dtype=1 float 类型。

1585622816577855.png

 

查看模型的AIPP信息

在模型显示图 空白处点击鼠标,右侧出现Aipp Properties节点信息(如果模型转换时没有开AIPP,右侧则没有AIPP相关信息) ,展开AIPP Properties节点查看AIPP 配置参数。

AIPP配置参数说明参考:

https://ascend.huawei.com/doc/atlas200dk/1.3.0.0/zh/zh-cn_topic_0173402132.html

色域转换配置说明

https://ascend.huawei.com/doc/atlas200dk/1.3.0.0/zh/zh-cn_topic_0173402133.htmll

 

推理输入数据的shape 参考AIPP参数: src_image_size_w/src_image_size_h

src_image_size_w/src_image_size_h 

# 图像的宽度、高度

# 类型:uint

# 取值范围 & 约束: [0,4096]、对于YUV420SP_U8类型的图像,要求取值是偶数

# 说明:请根据实际图片的宽、高配置src_image_size_w、src_image_size_h,若src_image_size_w、src_image_size_h同时不设置或同时设置为0,则会取网络输入定义的w和h

# src_image_size_w :0

# src_image_size_h :0

 

推理输入数据的图像格式: 参考input_format:

input_format

# 输入图像类型

# 类型: enum

# 取值范围:YUV420SP_U8/XRGB8888_U8/RGB888_U8/YUV400_U8

# input_format :1/2/3/4

例:

1585622873769270.png

 

如上图,

input_format =1 , 推理输入数据的图像格式为YUV420SP

src_image_size_h =608; src_image_size_w =896   输入的图片信息宽高分别为896/608

因此om模型需要的输入信息为: 宽高为896/606YUV420SP格式图片信息。

1.2查看模型输出信息

选中Netoutput节点, 右侧展开output_desc ,查看各输出节点的shape

1585623009545720.png

 

 

例:如上图 output[0]shape[13211]dtype =7  int32

output[1]shape[30432116]dtype =1  float

 

2、构造推理输入数据

    模型输入输出结构已明确,构造模型的输入数据送去推理。输入数据的常用构造方法有两种:使用opencv读图片信息;使用Dvpp进行图片信息处理;

2.1使用opencv接口

  使用opencv 读取图片信息:

例:cv::Mat mat = cv::imread(image_path, CV_LOAD_IMAGE_COLOR);

使用opencv 进行宽高缩放:

例:cv::resize(mat, mat_rs, cv::Size(224,224));

使用opencv 进行数据格式转换:

例: mat_rs.convertTo(mat_rs,CV_32FC3);

使用opencv 进行图像格式转换:

例:cv::cvtColor(mat_rs, mat_rs, CV_BGR2Lab);

2.2 使用EzDvpp接口

EzDvpp 接口使用:

https://ascend.huawei.com/doc/Atlas%20200%20DK/1.3.0.0/zh/zh-cn_topic_0165840096.html

2.3 注意点

根据原始模型的特点,模型预处理选择减均值、归一化操作、色域转换。 减均值、归一化、色域转换可通过编码实现,也可以通过转模型时AIPP实现。推荐使用AIPP

转模型时填写Mean Less/Multiplying Factor参数实现减均值、归一化操作。

转模型时填写Input Image Format/Model Image Format参数实现色域变化。

2.3.1 减均值

1: 对图像RGB减均值,在转模型时填写Mean less[R|G|B]参数。

1585623035820725.png

 

2

代码中减均值:

img = cv2.imread(img_path + name, 0)

img = np.array(img)

img = (img - 127.5) / 128

也可在模型转换时填写Mean less 参数:127.5

 

2.3.2 归一化

例: 对图像RGB归一化,在转模型时填写Multiplying Factor[R|G|B] 参数。

 

1585623105720772.png

 

2

代码中归一化:

img = cv2.imread(img_path + name, 0)

img = np.array(img)

img = (img - 127.5) / 128

也可在模型转换时填写Multiplying Factor 参数:0.007813

2.3.3 格式转换

例: 对图像色域转换,在转模型时填写Input Image format/Model Image Format  参数。

1585623119179565.png


 

如上图:输入图像格式为YUV420SP_U8,转换后图像格式为RGB888_U8

3、模型预测结果解析

模型预测结果 下面分别以分类网络、检测网络为例,说明如何解析模型推理结果。

3.1 分类网络预测结果解析

AlexNet网络模型为例:

模型下载地址:

https://gitee.com/HuaweiAscend/models/tree/master/computer_vision/classification/alexnet

 

AlexNet模型转换为om模型,模型的输出结构为[1,1000,1,1]0-999,分别给出所有标签的置信度。图片的推理类别 为1000个值中最大值的位置索引,测试图片的置信度为1000个值中的最大值。

 

1585623133308382.png

 

例: 推理结果保存在 confidenceArray 

检测出的类别: detectClass = np.argmax(confidenceArray)

检测出类别的置信度: detectConfidence = confidenceArray[detectClass ]

 

也可参考:

https://gitee.com/Atlas200DK/sample-classification/blob/master/classification/general_post/general_post.cpp

string GenerateTopNStr(int32_t top_n, const vector<float> &varr)  

使用GenerateTopNStr 显示排名前N的类型及其置信度。

3.2 检测网络预测结果解析

Fasterrcnn网络模型为例:

模型下载地址:

https://gitee.com/HuaweiAscend/models/tree/master/computer_vision/object_detect/faster_rcnn

 

Fasterrcnn模型转换为om模型,模型有两个输出:output[0]shape[13211]dtype =7 int32output[1]shape[30432116]dtype =1  float

 

1585623174253192.png

 

 

例: 推理结果保存在 resultList, resultList[0]保存output[0][13211] resultList[1]保存output[1]:  [30432116]

 

参考

https://gitee.com/Atlas200DK/sample-fasterrcnndetection-python/blob/master/fasterrcnnapp/detection_inference.py

中的GetDetectionInfo

1585623191168760.png

 

也可参考:

 

https://gitee.com/Atlas200DK/sample-objectdetection/blob/master/objectdetection/general_post/general_post.cpp

中的 FasterRcnnPostProcess 


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。