昇腾社区首页
中文
注册

动态分辨率推理样例(ResNet-50)

示例代码

import numpy as np
from mindx.sdk import base
from mindx.sdk.base import Tensor
import cv2 as cv

try:
    # 设置待推理图片路径
    jpg_path = "./test.jpg"  
    # 读入原图片
    img = cv.imread(jpg_path)
    # 缩放到224 * 224,输出尺寸格式为(宽,高)
    img_test1 = cv.resize(img, (224, 224))
    # 色域转换 BGR -> YUV420
    input_image = cv.cvtColor(img_test1, cv.COLOR_BGR2YUV_I420)
    
    device_id = 1  # 芯片ID
    base.mx_init()  # 全局初始化,申请设备资源与日志资源
    input_image1 = np.reshape(input_image,((1,) + input_image.shape[:2] +  (1,)))
    
    imgTensor = [Tensor(input_image1)]  # 将Image类转为Tensor
    model_path = "./resnet50_dynamic_image.om"  # 模型路径
    model_ = base.model(model_path, deviceId=device_id)  # 创造模型对象
    outputs = model_.infer(imgTensor)  # 使用模型对Tensor对象进行推理
        
    label_path = "./resnet50_clsidx_to_labels.names"  # 分类标签文件的路径
    output0 = outputs[0]  # 获取推理结果
    output0.to_host()  # 将推理结果Tensor转至Host侧
    result0_array = np.array(output0)  # 将推理结果Tensor转为numpy数组,用于后处理
    max_idx = result0_array.argmax(axis=1)[0]  # 获取置信度最高的label下标索引
    print('label_index:', max_idx)  # 输出置信度最高的label下标索引
    
    with open(label_path, 'r', encoding='utf-8') as f:   # 读取分类标签文件
        file = f.read()
    label_list = file.split('\n')[1:-1]  # 获取有效分类标签
    infer_result = label_list[max_idx]  # 获得标签名称
    print('infer result:{}'.format(infer_result))  # 打印推理结果
except Exception as e:
    print(e)

示例说明

动态分辨率模型在使用DVPP类进行数据预处理时,推理处理流程可参考端到端推理处理样例(ResNet-50),本样例为使用OpenCV进行数据预处理并推理的流程。

样例仅供参考,模型构建部分命令和相关配置具体请参见CANN ATC工具使用指南

如在使用ATC工具时选择配置AIPP色域转换,请注意OpenCV读取图片时色域转换与OM模型输入对应。

  • 本样例模型构建使用的动态分辨率转换命令参考:
    atc --model=./resnet50_v1.5.pb --framework=3 --output=resnet50_dynamic_image --output_type=FP32 --soc_version=Ascend310 --input_shape=input_tensor:1,-1,-1,3 --insert_op_conf=./aipp_resnet50_dynamic_image.aippconfig --dynamic_image_size="224,224;448,448"
  • 动态分辨率aipp配置参考:
    aipp_op {
        aipp_mode: static
        input_format : YUV420SP_U8
        csc_switch : true
        rbuv_swap_switch : false
        src_image_size_w : 0
        src_image_size_h : 0
        matrix_r0c0 : 256
        matrix_r0c1 : 0
        matrix_r0c2 : 359
        matrix_r1c0 : 256
        matrix_r1c1 : -88
        matrix_r1c2 : -183
        matrix_r2c0 : 256
        matrix_r2c1 : 454
        matrix_r2c2 : 0
        input_bias_0 : 0
        input_bias_1 : 128
        input_bias_2 : 128
    
        mean_chn_0 : 124
        mean_chn_1 : 117
        mean_chn_2 : 104
    }