编译运行Demo程序分为两种方式:
- 在PC开发环境利用MindStudio工具开发程序,编译与运行程序
- 在设备端直接编译运行程序
MindStudio编译运行demo程序
-
以HwHiAiUser(运行用户)登录开发环境,默认密码为:123456
-
Adlink基于开发环境上的“ACLlib组件的安装目录/acllib/sample”目录的样例程序,为各个样例下载好了原始模型,并提供脚本来转换模型。用户可以直接使用。样例包缺省在HwHiAiUser的Home下acl_sample目录(如果是采用Adlink提供的virtualbox虚拟机文件搭建的开发环境)。
Sample名称 基本功能 acl_execute_op目录下的acl_execute_gemm样例 实现矩阵-矩阵乘运算 acl_execute_model目录下的acl_dvpp_resnet50样例(调用AscendCL封装DVPP功能的接口) 基于Caffe ResNet-50网络实现图片分类(图片解码+缩放+同步推理) acl_execute_model目录下的acl_vpc_jpege_resnet50样例(调用AscendCL封装DVPP功能的接口) 基于Caffe ResNet-50网络实现图片分类(图片解码+抠图缩放+图片编码+同步推理) acl_execute_model目录下的acl_vdec_resnet50样例(调用AscendCL封装DVPP功能的接口) 基于Caffe ResNet-50网络实现图片分类(视频解码+同步推理) acl_execute_model目录下的acl_resnet50样例 基于Caffe ResNet-50网络实现图片分类(同步推理) acl_execute_model目录下的acl_resnet50_async样例 基于Caffe ResNet-50网络实现图片分类(异步推理) acl_execute_model目录下的acl_vpc_batchcrop样例 媒体数据处理(抠图,多图多框) acl_execute_model目录下的acl_venc样例 媒体数据处理(视频编码) [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m1orxPM0-1628850784329)(https://res-img3.huaweicloud.com/content/dam/cloudbu-site/archive/china/zh-cn/support/resource/framework/v3/images/support-doc-new-note.svg)]说明:
sample目录下的dvpp样例,当前不支持使用。
-
进入MindStudio的安装目录下的bin目录,安装缺省在HwHiAiUser的home目录,并启动MindStudio
HwHiAiUser@chenx-Latitude-3410:~$ cd MindStudio/bin/ HwHiAiUser@chenx-Latitude-3410:~/MindStudio/bin$ ./MindStudio.sh
-
选择打开或导入
-
选择AscendApp–>修改工程名称(可选)–>点击Next
-
选择Build–>Edit Build Configuration, 按下图修改Target、Target OS、Target Architecture内容,并选择Build进行编译
-
查看编译结果
-
转换模型
HwHiAiUser@chenx-Latitude-3410:~/acl_sample/acl_execute_model/acl_dvpp_resnet50$ tree ├── caffe_model │ ├── aipp.cfg │ ├── resnet50.caffemodel │ └── ResNet-50-deploy.prototxt ├── CMakeLists.txt ├── data │ ├── dog1_1024_683.jpg │ └── dog2_1024_683.jpg ├── inc │ ├── dvpp_process.h │ ├── model_process.h │ ├── sample_process.h │ ├── singleOp_process.h │ └── utils.h ├── kernel_meta ├── model │ └── resnet50_aipp.om ├── model_cvt.sh ├── out │ ├── acl.json │ ├── main │ ├── op_models │ │ ├── 0_Cast_0_2_1000_1_2_1000.om │ │ ├── 1_ArgMaxD_1_2_1000_3_2_1.om │ │ └── op_list.json │ ├── outputs │ └── run.sh └── src ├── acl.json ├── CMakeLists.txt ├── dvpp_process.cpp ├── main.cpp ├── model_process.cpp ├── sample_process.cpp ├── singleOp_process.cpp └── utils.cpp
HwHiAiUser@chenx-Latitude-3410:~/workspace/acl_sample/acl_execute_model/acl_dvpp_resnet50$ ./model_cvt.sh ATC start working now, please wait for a moment. ATC run success, welcome to the next use. ATC start working now, please wait for a moment. ATC run success, welcome to the next use.
-
添加模型文件
-
选择/HwHiAiUser/modelzoo/resnet50/device/resnet50.om模型文件
-
选择Run–>Edit Configurations
-
配置远程设备端IP。
-
远程设备连接成功如下,并点击Ok,回到上一个界面点击Ok返回。
-
运行程序
-
查看运行结果
在设备端编译运行Demo程序
-
以HwHiAiUser(运行用户)登录设备环境,默认密码为:Mind@123
-
Demo程序所在的目录为:/home/HwHiAiUser/Samples/demos,分三类Demo程序
HwHiAiUser@davinci-mini:~/Samples/demos$ ls acl_execute_model classification objectdetection
-
设置环境变量
每个demo的编译脚本src/CMakeLists.txt通过环境变量所设置的头文件、库文件的路径来编译代码。编译脚本CMakeLists.txt中已默认设置编译依赖的头文件路径(“/usr/local/Ascend/acllib/include/”)、库文件路径(“/usr/local/Ascend/acllib/lib64/stub/”)。如果未设置 D D K P A T H 、 {DDK_PATH}、 DDKPATH、{NPU_HOST_LIB}环境变量,则以编译脚本CMakeLists.txt中的路径为准;如果已设置 D D K P A T H 、 {DDK_PATH}、 DDKPATH、{NPU_HOST_LIB}环境变量,则编译脚本CMakeLists.txt优先以环境变量为准,按环境变量指向的路径查找编译依赖的头文件和库文件。
由于设备端的开发环境默认安装在HwHiAiUser的home目录:/home/HwHiAiUser/Ascend/ascend-toolkit/latest。默认HwHiAiUser的bashrc文件中已经设置了如下环境变量:
export DDK_PATH=/home/HwHiAiUser/Ascend/ascend-toolkit/latest export NPU_HOST_LIB=/home/HwHiAiUser/Ascend/ascend-toolkit/latest/acllib/lib64/stub
-
以acl_execute_model中的acl_dvpp_resnet50为例子,演示编译过程,其他demo同样的过程。
切换到“acl_execute_model/acl_dvpp_resnet50/build/intermediates/host”目录,执行cmake生成编译文件。“…/…/…/src/”表示CMakeLists.txt文件所在的目录,请根据实际目录层级修改。
HwHiAiUser@davinci-mini:~/Samples/demos/acl_execute_model/acl_dvpp_resnet50$ cd build/intermediates/host/ HwHiAiUser@davinci-mini:~/Samples/demos/acl_execute_model/acl_dvpp_resnet50/build/intermediates/host$ cmake ../../../src -DCMAKE_SKIP_RPATH=TRUE -- The C compiler identification is GNU 7.5.0 -- The CXX compiler identification is GNU 7.5.0 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done -- env INC_PATH: /home/HwHiAiUser/Ascend/ascend-toolkit/latest -- env LIB_PATH: /home/HwHiAiUser/Ascend/ascend-toolkit/latest/acllib/lib64/stub -- Configuring done -- Generating done -- Build files have been written to: /home/HwHiAiUser/Samples/demos/acl_execute_model/acl_dvpp_resnet50/build/intermediates/host HwHiAiUser@davinci-mini:~/Samples/demos/acl_execute_model/acl_dvpp_resnet50/build/intermediates/host$ make Scanning dependencies of target main [ 14%] Building CXX object CMakeFiles/main.dir/utils.cpp.o [ 28%] Building CXX object CMakeFiles/main.dir/dvpp_process.cpp.o [ 42%] Building CXX object CMakeFiles/main.dir/model_process.cpp.o [ 57%] Building CXX object CMakeFiles/main.dir/singleOp_process.cpp.o [ 71%] Building CXX object CMakeFiles/main.dir/sample_process.cpp.o [ 85%] Building CXX object CMakeFiles/main.dir/main.cpp.o [100%] Linking CXX executable /home/HwHiAiUser/Samples/demos/acl_execute_model/acl_dvpp_resnet50/out/main [100%] Built target main HwHiAiUser@davinci-mini:~/Samples/demos/acl_execute_model/acl_dvpp_resnet50/build/intermediates/host$
-
运行程序
HwHiAiUser@davinci-mini:~/Samples/demos/acl_execute_model/acl_dvpp_resnet50/build/intermediates/host$ cd ../../../out/ HwHiAiUser@davinci-mini:~/Samples/demos/acl_execute_model/acl_dvpp_resnet50/out$ ls main op_models HwHiAiUser@davinci-mini:~/Samples/demos/acl_execute_model/acl_dvpp_resnet50/out$ ./main #此处注意,如果该目录有run.sh启动脚本,这需要执行run.sh运行程序。 [INFO] acl init success [sudo] password for HwHiAiUser: Sorry, user HwHiAiUser is not allowed to execute './tsdaemon_add_to_usermemory.sh 4669' as root on davinci-mini. [INFO] open device 0 success [INFO] create context success [INFO] create stream success [INFO] get run mode success [INFO] dvpp init resource success [INFO] load model ../model/resnet50_aipp.om success [INFO] create model description success [INFO] create model output success [INFO] start to process picture:../data/dog1_1024_683.jpg [INFO] memcpy. device buffer size is 35635 [INFO] Process dvpp success [INFO] model execute success [INFO] execute sigleOp Cast success [INFO] execute ArgMaxD success [INFO] sigleOp process success [INFO] ---> index of classification result is 161 [INFO] start to process picture:../data/dog2_1024_683.jpg [INFO] memcpy. device buffer size is 41398 [INFO] Process dvpp success [INFO] model execute success [INFO] execute sigleOp Cast success [INFO] execute ArgMaxD success [INFO] sigleOp process success [INFO] ---> index of classification result is 267 [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 HwHiAiUser@davinci-mini:~/Samples/demos/acl_execute_model/acl_dvpp_resnet50/out$
- 编译运行objectdetection程序
HwHiAiUser@davinci-mini:~/Samples/demos/objectdetection/build/intermediates/host$ cmake ../../../src -DCMAKE_SKIP_RPATH=TRUE -- The C compiler identification is GNU 7.5.0 -- The CXX compiler identification is GNU 7.5.0 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done -- env INC_PATH: /home/HwHiAiUser/Ascend/ascend-toolkit/latest -- env LIB_PATH: /home/HwHiAiUser/Ascend/ascend-toolkit/latest/acllib/lib64/stub -- Configuring done -- Generating done -- Build files have been written to: /home/HwHiAiUser/Samples/demos/objectdetection/build/intermediates/host HwHiAiUser@davinci-mini:~/Samples/demos/objectdetection/build/intermediates/host$ make Scanning dependencies of target main [ 12%] Building CXX object CMakeFiles/main.dir/utils.cpp.o [ 25%] Building CXX object CMakeFiles/main.dir/model_process.cpp.o [ 37%] Building CXX object CMakeFiles/main.dir/object_detect.cpp.o [ 50%] Building CXX object CMakeFiles/main.dir/dvpp_process.cpp.o [ 62%] Building CXX object CMakeFiles/main.dir/dvpp_resize.cpp.o [ 75%] Building CXX object CMakeFiles/main.dir/dvpp_jpegd.cpp.o [ 87%] Building CXX object CMakeFiles/main.dir/main.cpp.o [100%] Linking CXX executable /home/HwHiAiUser/Samples/demos/objectdetection/out/main [100%] Built target main HwHiAiUser@davinci-mini:~/Samples/demos/objectdetection/build/intermediates/host$ cd ../../../out/ HwHiAiUser@davinci-mini:~/Samples/demos/objectdetection/out$ ls acl.json main output run.sh HwHiAiUser@davinci-mini:~/Samples/demos/objectdetection/out$ bash run.sh [INFO] acl init success [sudo] password for HwHiAiUser: Sorry, user HwHiAiUser is not allowed to execute './tsdaemon_add_to_usermemory.sh 7601' as root on davinci-mini. [INFO] open device 0 success [INFO] create context success [INFO] create stream success [INFO] load model ../model/yolov3.om success [INFO] create model description success [INFO] create model output success [INFO] dvpp init resource ok [INFO] convert image success [INFO] model execute success 115 116 926 598 dog99% [INFO] convert image success [INFO] model execute success 48 110 474 261 boat99% [INFO] Execute sample success [INFO] unload model success, modelId is 1 [INFO] end to destroy stream [INFO] end to destroy context [INFO] end to reset device is 0 [INFO] end to finalize acl HwHiAiUser@davinci-mini:~/Samples/demos/objectdetection/out$
-
编译运行classification程序
HwHiAiUser@davinci-mini:~/Samples/demos/classification$ cd build/intermediates/host/ CMakeCache.txt CMakeFiles/ Makefile cmake_install.cmake HwHiAiUser@davinci-mini:~/Samples/demos/classification$ cd build/intermediates/host/ HwHiAiUser@davinci-mini:~/Samples/demos/classification/build/intermediates/host$ cmake ../../../src -DCMAKE_SKIP_RPATH=TRUE -- env INC_PATH: /home/HwHiAiUser/Ascend/ascend-toolkit/latest -- env LIB_PATH: /home/HwHiAiUser/Ascend/ascend-toolkit/latest/acllib/lib64/stub -- Configuring done -- Generating done -- Build files have been written to: /home/HwHiAiUser/Samples/demos/classification/build/intermediates/host HwHiAiUser@davinci-mini:~/Samples/demos/classification/build/intermediates/host$ rm -rf * HwHiAiUser@davinci-mini:~/Samples/demos/classification/build/intermediates/host$ cmake ../../../src -DCMAKE_SKIP_RPATH=TRUE -- The C compiler identification is GNU 7.5.0 -- The CXX compiler identification is GNU 7.5.0 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done -- env INC_PATH: /home/HwHiAiUser/Ascend/ascend-toolkit/latest -- env LIB_PATH: /home/HwHiAiUser/Ascend/ascend-toolkit/latest/acllib/lib64/stub -- Configuring done -- Generating done -- Build files have been written to: /home/HwHiAiUser/Samples/demos/classification/build/intermediates/host HwHiAiUser@davinci-mini:~/Samples/demos/classification/build/intermediates/host$ make Scanning dependencies of target main [ 20%] Building CXX object CMakeFiles/main.dir/utils.cpp.o [ 40%] Building CXX object CMakeFiles/main.dir/model_process.cpp.o [ 60%] Building CXX object CMakeFiles/main.dir/classify_process.cpp.o [ 80%] Building CXX object CMakeFiles/main.dir/main.cpp.o [100%] Linking CXX executable /home/HwHiAiUser/Samples/demos/classification/out/main [100%] Built target main HwHiAiUser@davinci-mini:~/Samples/demos/classification/out$ ./run.sh [INFO] Acl init success [sudo] password for HwHiAiUser: Sorry, user HwHiAiUser is not allowed to execute './tsdaemon_add_to_usermemory.sh 7352' as root on davinci-mini. [INFO] Open device 0 success [INFO] load model ../model/googlenet.om success [INFO] create model description success [INFO] create model output success [INFO] Read image ../data/rabit.jpg [INFO] Resize image ../data/rabit.jpg [INFO] model execute success [INFO] top 1: index[330] value[0.624512] [INFO] top 2: index[331] value[0.373047] [INFO] top 3: index[332] value[0.002289] [INFO] top 4: index[104] value[0.000003] [INFO] top 5: index[106] value[0.000001] [INFO] Read image ../data/dog2_1024_683.jpg [INFO] Resize image ../data/dog2_1024_683.jpg [INFO] model execute success [INFO] top 1: index[267] value[0.576172] [INFO] top 2: index[265] value[0.182739] [INFO] top 3: index[266] value[0.161377] [INFO] top 4: index[355] value[0.008614] [INFO] top 5: index[279] value[0.007725] [INFO] Read image ../data/dog1_1024_683.jpg [INFO] Resize image ../data/dog1_1024_683.jpg [INFO] model execute success [INFO] top 1: index[162] value[0.896484] [INFO] top 2: index[166] value[0.041931] [INFO] top 3: index[161] value[0.033417] [INFO] top 4: index[167] value[0.024841] [INFO] top 5: index[163] value[0.001316] [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 [INFO] unload model success, modelId is 1
-
编译运行acl_vpc_jpege_resnet50程序
HwHiAiUser@davinci-mini:~/Samples/demos/acl_execute_model/acl_vpc_jpege_resnet50/build/intermediates/host$ cmake ../../../src -DCMAKE_SKIP_RPATH=TRUE -- The C compiler identification is GNU 7.5.0 -- The CXX compiler identification is GNU 7.5.0 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done -- env INC_PATH: /home/HwHiAiUser/Ascend/ascend-toolkit/latest -- env LIB_PATH: /home/HwHiAiUser/Ascend/ascend-toolkit/latest/acllib/lib64/stub -- Configuring done -- Generating done -- Build files have been written to: /home/HwHiAiUser/Samples/demos/acl_execute_model/acl_vpc_jpege_resnet50/build/intermediates/host HwHiAiUser@davinci-mini:~/Samples/demos/acl_execute_model/acl_vpc_jpege_resnet50/build/intermediates/host$ make Scanning dependencies of target main [ 16%] Building CXX object CMakeFiles/main.dir/utils.cpp.o [ 33%] Building CXX object CMakeFiles/main.dir/dvpp_process.cpp.o [ 50%] Building CXX object CMakeFiles/main.dir/model_process.cpp.o [ 66%] Building CXX object CMakeFiles/main.dir/sample_process.cpp.o [ 83%] Building CXX object CMakeFiles/main.dir/main.cpp.o [100%] Linking CXX executable /home/HwHiAiUser/Samples/demos/acl_execute_model/acl_vpc_jpege_resnet50/out/main [100%] Built target main HwHiAiUser@davinci-mini:~/Samples/demos/acl_execute_model/acl_vpc_jpege_resnet50/build/intermediates/host$ cd ../../../out/ HwHiAiUser@davinci-mini:~/Samples/demos/acl_execute_model/acl_vpc_jpege_resnet50/out$ ls main result run.sh HwHiAiUser@davinci-mini:~/Samples/demos/acl_execute_model/acl_vpc_jpege_resnet50/out$ ./run.sh [INFO] acl init success [sudo] password for HwHiAiUser: Sorry, user HwHiAiUser is not allowed to execute './tsdaemon_add_to_usermemory.sh 7876' as root on davinci-mini. [INFO] open device 0 success [INFO] create context success [INFO] create stream success [INFO] get run mode success [INFO] dvpp init resource success [INFO] load model ../model/resnet50_aipp.om success [INFO] create model description success [INFO] create model output success [INFO] ------------------------------------------- [INFO] start to process picture:../data/persian_cat_1024_1536_283.jpg [INFO] call JpegD [INFO] call vpcResize [INFO] Process dvpp success [INFO] model execute success [INFO] result : classType[283], top1[0.501465], top5[0.863876] [INFO] ------------------------------------------- [INFO] start to process picture:../data/wood_rabbit_1024_1061_330.jpg [INFO] call JpegD [INFO] call vpcResize [INFO] Process dvpp success [INFO] model execute success [INFO] result : classType[330], top1[0.546387], top5[1.000057] [INFO] ------------------------------------------- [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 [INFO] acl init success [sudo] password for HwHiAiUser: Sorry, user HwHiAiUser is not allowed to execute './tsdaemon_add_to_usermemory.sh 7926' as root on davinci-mini. [INFO] open device 0 success [INFO] create context success [INFO] create stream success [INFO] get run mode success [INFO] dvpp init resource success [INFO] load model ../model/resnet50_aipp.om success [INFO] create model description success [INFO] create model output success [INFO] ------------------------------------------- [INFO] start to process picture:../data/persian_cat_1024_1536_283.jpg [INFO] call JpegD [INFO] call vpcCrop [INFO] Process dvpp success [INFO] model execute success [INFO] result : classType[284], top1[0.961914], top5[0.999742] [INFO] ------------------------------------------- [INFO] start to process picture:../data/wood_rabbit_1024_1061_330.jpg [INFO] call JpegD [INFO] call vpcCrop [INFO] Process dvpp success [INFO] model execute success [INFO] result : classType[330], top1[0.631836], top5[0.998885] [INFO] ------------------------------------------- [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 [INFO] acl init success [sudo] password for HwHiAiUser: Sorry, user HwHiAiUser is not allowed to execute './tsdaemon_add_to_usermemory.sh 7978' as root on davinci-mini. [INFO] open device 0 success [INFO] create context success [INFO] create stream success [INFO] get run mode success [INFO] dvpp init resource success [INFO] load model ../model/resnet50_aipp.om success [INFO] create model description success [INFO] create model output success [INFO] ------------------------------------------- [INFO] start to process picture:../data/persian_cat_1024_1536_283.jpg [INFO] call JpegD [INFO] call vpcCropAndPaste [INFO] Process dvpp success [INFO] model execute success [INFO] result : classType[284], top1[0.368652], top5[0.895264] [INFO] ------------------------------------------- [INFO] start to process picture:../data/wood_rabbit_1024_1061_330.jpg [INFO] call JpegD [INFO] call vpcCropAndPaste [INFO] Process dvpp success [INFO] model execute success [INFO] result : classType[331], top1[0.539062], top5[0.961433] [INFO] ------------------------------------------- [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 [INFO] acl init success [sudo] password for HwHiAiUser: Sorry, user HwHiAiUser is not allowed to execute './tsdaemon_add_to_usermemory.sh 8027' as root on davinci-mini. [INFO] open device 0 success [INFO] create context success [INFO] create stream success [INFO] get run mode success [INFO] dvpp init resource success [INFO] start to process picture:../data/wood_rabbit_1024_1068_nv12.yuv [INFO] Call JpegE [INFO] end to destroy stream [INFO] end to destroy context [INFO] end to reset device is 0 [INFO] end to finalize acl HwHiAiUser@davinci-mini:~/Samples/demos/acl_execute_model/acl_vpc_jpege_resnet50/out$