编译及运行应用
- 准备数据。
- 您可以从以下链接中获取ResNet-50网络的模型文件(*.prototxt)、预训练模型文件(*.caffemodel)。
- 参考《ATC工具使用指南》将ResNet-50网络转换为适配昇腾AI处理器的离线模型(*.om文件)。
切换到resnet50_async_imagenet_classification样例目录,命令示例如下,从output参数设置的目录下获取om文件:
atc --model=caffe_model/resnet50.prototxt --weight=caffe_model/resnet50.caffemodel --framework=0 --output=model/resnet50 --soc_version=${soc_version} --input_format=NCHW --input_fp16_nodes=data -output_type=FP32 --out_nodes=prob:0
- --soc_version:昇腾AI处理器的版本,请根据实际情况替换。
可从ATC安装路径的“atc/data/platform_config”目录下查看昇腾AI处理器的版本,对应“*.ini”文件的名字(不带.ini后缀)即为soc_version。
- --output:生成的om文件建议命名为resnet50.om,并以管理员帐号将om文件上传到开发环境的“样例目录\model”目录下(若目录不存在,请自行创建),否则在编译代码前,您还需要修改sample_process.cpp中的omModelPath参数值。
- --soc_version:昇腾AI处理器的版本,请根据实际情况替换。
- 执行脚本,获取测试图片数据。
- 请从以下链接获取该样例的输入图片,并以运行用户将获取的文件上传至开发环境的“resnet50_async_imagenet_classification样例目录/data”目录下。如果目录不存在,需自行创建。
https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/dog1_1024_683.jpg
https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/dog2_1024_683.jpg
- 从开发环境的resnet50_async_imagenet_classification样例目录下获取data目录和script目录,将data目录和script目录上传到已安装python3.7.5的服务器上的同一个目录下(执行atc命令的服务器上已安装python3.7.5),将*.jpg转换为*.bin,同时将图片从1024*683的分辨率缩放为224*224。在“data”目录下执行transferPic.py脚本,生成2个*.bin文件,将这2个*.bin文件以管理员帐号上传到开发环境的“样例目录\data”目录下。
python3.7.5 ../script/transferPic.py
如果执行脚本报错“ModuleNotFoundError: No module named 'PIL'”,则表示缺少Pillow库,请使用pip3.7.5 install Pillow --user命令安装Pillow库。
- 请从以下链接获取该样例的输入图片,并以运行用户将获取的文件上传至开发环境的“resnet50_async_imagenet_classification样例目录/data”目录下。如果目录不存在,需自行创建。
- 以管理员帐号登录开发环境,并切换到resnet50_async_imagenet_classification样例所在的目录。
- 编译代码。
- 在样例目录下,创建目录用于存放编译文件,例如,本文中,依次创建的目录为“build\intermediates\soc”。
- 以管理员身份执行cmd窗口,切换到“样例目录\build\intermediates\soc”目录下,执行cmake生成编译文件,在“样例目录\out\Debug”或“样例目录\out\release”目录下生成可执行文件main.exe,将Debug或release目录下的main.exe复制到“样例目录\out”目录下,否则会导致运行可执行文件时找不到依赖的文件。
“../../../src”表示CMakeLists.txt文件所在的目录,请根据实际目录层级修改。
- Debug模式时的编译命令如下:
cd 样例目录\build\intermediates\soc cmake ../../../src -DCMAKE_SKIP_RPATH=TRUE -G "Visual Studio 15 2017 Win64" cmake --build .
- Release模式下的编译命令如下:
cd 样例目录\build\intermediates\soc cmake ../../../src -DCMAKE_SKIP_RPATH=TRUE -G "Visual Studio 15 2017 Win64" -DCMAKE_CONFIGURATION_TYPES=release cmake --build . --config release
当前样例的编码字符集为ASCII,编译命令默认都是ASCII编码字符集,不支持Unicode编码字符集,如需支持Unicode编码字符集,需用户自行适配代码。
- Debug模式时的编译命令如下:
- 运行应用。
- 以管理员帐号将开发环境的resnet50_async_imagenet_classification样例目录及其子文件上传到运行环境(Host)。
- 以管理员帐号登录运行环境(Host)。
- 以管理员身份执行cmd窗口,切换到可执行文件main.exe所在的目录,运行可执行文件。
- 运行可执行文件,不带参数时:
- 执行模型异步推理的次数默认为100次;
- callback间隔默认为1,表示1次异步推理后,下发一次callback任务;
- 内存池中的内存块的个数默认为100个。
- 运行可执行文件,带参数时:
- 第一个参数表示执行模型异步推理的次数;
- 第二个参数表示下发callback间隔,参数值为0时表示不下发callback任务,参数值为非0值(例如m)时表示m次异步推理后下发一次callback任务;
- 第三个参数表示内存池中内存块的个数,内存块个数需大于等于模型异步推理的次数。
main.exe
执行成功后,在屏幕上的关键提示信息示例如下:
[INFO] ./main param1 param2 param3, param1 is execute model times(default 100), param2 is callback interval(default 1), param3 is memory pool size(default 100) [INFO] execute times = 100 [INFO] callback interval = 1 [INFO] memory pool size = 100 [INFO] acl init success [INFO] open device 0 success [INFO] create context success [INFO] create stream success [INFO] get run mode success [INFO] load model ../model/resnet50.om success [INFO] create model description success [INFO] init memory pool success [INFO] subscribe report success [INFO] top 1: index[267] value[0.889648] [INFO] top 1: index[161] value[0.836914] [INFO] top 1: index[267] value[0.889648] [INFO] top 1: index[161] value[0.836914] [INFO] top 1: index[161] value[0.836914] [INFO] top 1: index[267] value[0.889648] [INFO] top 1: index[161] value[0.836914] [INFO] top 1: index[267] value[0.889648] [INFO] top 1: index[161] value[0.836914] [INFO] top 1: index[267] value[0.889648] ...... [INFO] top 1: index[161] value[0.836914] [INFO] top 1: index[267] value[0.889648] [INFO] model execute success [INFO] unsubscribe report success [INFO] unload model success, modelId is 1 [INFO] execute sample success [INFO] end to destroy stream [INFO] end to destroy context [INFO] end to reset device is 0 [INFO] end to finalize acl
- 运行可执行文件,不带参数时: