经过上面两篇的介绍,目前我们对昇腾和PyTorch模型迁移有了一定的了解,这里将首先快速体验运行样例以及开发一个图片分类应用。

申请云环境

  1. 获取账号名。登录华为云->账号中心->基本信息
    huawei
  2. 获取项目ID。我的凭证->项目列表
    id

然后去找小助手申请环境。
采用共享镜像,创建基于 Ascend 310 的环境,用户使用 HwHiAiUser。
ecs

速通样例

运行配置

  • 创建好环境后,利用终端工具远程连接服务器。
    Connect

  • 首先更改/etc/passwd,设置HwHiAiUser使用的shell为bash
    bash

  • 切换用户为HwHiAiUser
    su

  • 下载samples仓库

    1
    git clone https://gitee.com/ascend/samples.git 

    clone

    由于我使用的环境CANN版本为6.0.RC1.alpha001,根据仓库说明,需要将样例仓库切换版本为v0.8.0
    checkout

以YOLOV3_coco_detection_picture为例

YOLOV3_coco_detection_picture所在目录为samples/cplusplus/level2_simple_inference/2_object_detection/YOLOV3_coco_detection_picture
根据README.MD进行如下操作。

  • 下载原始模型

    1
    2
    3
    wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/Yolov3/yolov3.caffemodel
    wget <https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/Yolov3/yolov3.prototxt>
    wget <https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/YOLOV3_coco_detection_picture/aipp_nv12.cfg>

    down

  • 模型转换

    1
    atc --model=yolov3.prototxt --weight=yolov3.caffemodel --framework=0 --output=yolov3 --soc_version=Ascend310 --insert_op_conf=aipp_nv12.cfg

    atc

  • 进入脚本目录进行编译,架构选择x86

    1
    2
    3
    cd $HOME/samples/cplusplus/level2_simple_inference/2_object_detection/YOLOV3_coco_detection_picture/scripts

    bash sample_build.sh

    build

  • 运行样例
    run
    结果显示输入图片检测有狗,置信度为99%
    dog

应用开发

本节以C/C++接口的AscendCL为例开发一个图片分类应用,模型采用的是Caffe架构的ResNet-50网络,输入为分辨率是224*224的RGB图像,输出为Top5置信度的类别标签以及其对应的置信度。

代码所在样例仓库目录为/home/HwHiAiUser/samples/cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification

模型应用分为四个步骤:准备模型、准备数据、编译程序、运行程序。

准备模型

首先,创建caffe_model文件夹用于储存模型,而后通过链接获得模型。

down

其次,需要将caffe模型转为昇腾的om模型。

1
atc --model=caffe_model/resnet50.prototxt --weight=caffe_model/resnet50.caffemodel --framework=0 --output=model/resnet50 --soc_version=Ascend310 --input_format=NCHW --input_fp16_nodes=data --output_type=FP32 --out_nodes=prob:0

参数说明

1
2
3
4
5
6
7
8
9
--model:原始模型文件路径。
--weight:权重文件路径。
--framework:原始框架类型。0:表示Caffe;1:表示MindSpore;3:表示TensorFlow;5:表示ONNX。
--soc\_version:昇腾AI处理器的版本。进入“CANN软件安装目录/compiler/data/platform_config”目录,".ini"文件的文件名即为昇腾AI处理器的版本,请根据实际情况选择。

--input\_format:输入数据的Format。
--input\_fp16\_nodes:指定输入数据类型为FP16的输入节点名称。
--output\_type和--out\_nodes:这2个参数配合使用,指定prob节点的第一个输出的数据类型为float32。
--output:生成的resnet50.om文件存放在“样例目录/model“目录下。

atc

准备数据

data文件夹中放置测试数据,

1
2
3
cd ./data
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/dog1_1024_683.jpg
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/dog2_1024_683.jpg

dwon

而后利用图片转换脚本,将图片转为分辨率为224*224的RGB图像。
trans

编译程序

首先,需要设置环境变量,这里开发环境与运行环境的操作系统架构相同,采用

1
2
export DDK_PATH=$HOME/Ascend/ascend-toolkit/latest # $HOME/Ascend表示ascend-toolkit按照目录
export NPU_HOST_LIB=$DDK_PATH/runtime/lib64/stub

其次,生成编译文件

1
2
3
mkdir -p build/intermediates/host
cd build/intermediates/host
cmake ../../../src -DCMAKE_CXX_COMPILER=g++ -DCMAKE_SKIP_RPATH=TRUE

最后,进行编译

1
make

build-make

运行程序

找到编译生成的main
main

执行
main

结语

至此,便完成了一个caffe模型在昇腾NPU设备上的迁移和推理,下篇将对本次使用的图片分类应用的源码进行解析。