CANN体验官第五期体验纪实(上)
活动帖:https://bbs.huaweicloud.com/forum/thread-189980-1-1.html
一、准备云环境
先获取自己的华为云账号、华北-北京四的项目ID:
打开控制台:https://console.huaweicloud.com/console/?region=cn-north-4#/home
点击自己的账号名称——我的凭证:
用上面两个内容向“昇腾小助手”申请 第五期CANN体验官的镜像。
点击 ECS服务器-镜像服务-共享镜像:
点击全部接受:
点击镜像右边的 申请服务器:
依次选择 按需计费-》随机分配-》X86计算-》AI加速型-》AI1S-》ai1s.large.4
确认共享镜像名称与申请的一致,选择系统盘为 通用型SSD:
下一步网络配置:
网络选默认的,安全组选择Full Access,弹性公网选择现在购买:
线路选择全动态BGP,带宽按流量计费,带宽选择10M:
下一步高级配置:
输入root密码,其他缺省:
确认配置:
点击同意,最好确认下费用是否合理(如果前面选错了,这里没准费用会非常高),点击立即购买:
点击返回服务器列表,耐心等待服务器准备完毕:
使用MobaXterm登录上面显示的公网IP地址:
二、体验基础任务:让样例跑起来
基础任务:让样例跑起来:
su - HwHiAiUser
下载模型:
cd $HOME/samples/cplusplus/level3_application/1_cv/detect_and_classify
mkdir model
cd model
下载yolov3的原始模型文件
下载yolov3的AIPP配置文件
wget https://modelzoo-train-atc.obs.cn-north-4.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/YOLOV3_carColor_sample/data/aipp_onnx.cfg
执行模型转换命令,生成yolov3的适配昇腾AI处理器的离线模型文件
atc --model=./yolov3_t.onnx --framework=5 --output=yolov3 --input_shape="images:1,3,416,416;img_info:1,4" --soc_version=Ascend310 --input_fp16_nodes="img_info" --insert_op_conf=aipp_onnx.cfg
下载color模型的原始模型文件
下载color模型的AIPP配置文件
wget https://modelzoo-train-atc.obs.cn-north-4.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/YOLOV3_carColor_sample/data/aipp.cfg
执行模型转换命令,生成color的适配昇腾AI处理器的离线模型文件
atc --input_shape="input_1:-1,224,224,3" --output=./color_dynamic_batch --soc_version=Ascend310 --framework=3 --model=./color.pb --insert_op_conf=./aipp.cfg --dynamic_batch_size="1,2,4,8"
生成了2个om离线模型:
样例编译运行:
cd ../scripts
bash sample_build.sh
好像报错了:
查看 sample_build.sh文件:
好像是有个bug,删掉这个wget
重来:
bash sample_build.sh
还是有错!
经过大毛老师和他的朋友们的提醒,需要重新编译一下AclLite:
cd ${HOME}/samples/cplusplus/common/acllite
make
make install
再回到原来的目录开始编译:
cd $HOME/samples/cplusplus/level3_application/1_cv/detect_and_classify/scripts
bash sample_build.sh
cd $HOME/samples/cplusplus/level3_application/1_cv/detect_and_classify/scripts
修改params.conf
要求:输入输出都为图片。输入为JPEG,1个device
按以下模式修改:
[options_param_0]
inputType_0=pic #pic ; video ; rtsp
outputType_0=pic #pic ; video ; presentagent ; stdout
inputDataPath_0=../data/car1.jpg
outputFrameWidth_0=1280
outputFrameHeight_0=720
切换到 out目录下:
运行main
生成的文件在这里:cd ~/samples/cplusplus/level3_application/1_cv/detect_and_classify/out/output
我们把两个文件都取下来:
这是原图:
这是检测结果图:
可见这个车子已经被一道蓝框框起来了。
这就完成了第一个任务。
三、体验进阶任务一:输入图片由JPEG->PNG的定制开发
获取PNG图片:
wget https://modelzoo-train-atc.obs.cn-north-4.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/YOLOV3_carColor_sample/data/car_png.png
cd ~/samples/cplusplus/level3_application/1_cv/detect_and_classify
修改 src/detectPreprocess/detectPreprocess.cpp
根据 ~/samples/cplusplus/common/acllite/include/AclLiteUtils.h
将ReadJpeg 修改为 ReadPng。
根据 ~/samples/cplusplus/common/acllite/include/AclLiteImageProc.h
将 dvpp._JpegD改为 dvpp_.PngD。
具体修改内容如下:
修改params.conf
将文件名改为car_png.png:
inputDataPath_0=../data/car_png.png
重新编译:
cd ~/samples/cplusplus/level3_application/1_cv/detect_and_classify/scripts
bash sample_build.sh
重新推理:
结果图片已生成:
查看 data/car_png.png和out/output/device_0_out_pic_0.jpg
可见PNG图片被成功解析。
四、体验进阶任务二:由JPEG解码后格式指定为YUV420SP NV21
PIXEL_FORMAT_YUV_SEMIPLANAR_420 = 1, // 1, YUV420SP NV12 8bit
PIXEL_FORMAT_YVU_SEMIPLANAR_420 = 2, // 2, YUV420SP NV21 8bit
将JpegDHelper.cpp ( /home/HwHiAiUser/samples/cplusplus/common/acllite/src )
PIXEL_FORMAT_YUV_SEMIPLANAR_420
改为
PIXEL_FORMAT_YVU_SEMIPLANAR_420
(两处)
将ResizeHelper.cpp ( /home/HwHiAiUser/samples/cplusplus/common/acllite/src )
PIXEL_FORMAT_YUV_SEMIPLANAR_420
改为
PIXEL_FORMAT_YVU_SEMIPLANAR_420
(三处)
将 CropAndPasteHelper.cpp ( /home/HwHiAiUser/samples/cplusplus/common/acllite/src )
PIXEL_FORMAT_YUV_SEMIPLANAR_420
改为
PIXEL_FORMAT_YVU_SEMIPLANAR_420
(四处)
重新编译AclLite库:
cd ${HOME}/samples/cplusplus/common/acllite
make
make install
重新模型转换,生成om模型:
cd ~/samples/cplusplus/level3_application/1_cv/detect_and_classify/model
cp yolov3.om yolov3.om.old
cp color_dynamic_batch.om color_dynamic_batch.om.old
修改 aipp.cfg 将 rbuv_swap_switch改为true
修改aipp_onnx.cfg 将 rbuv_swap_switch改为true
atc --input_shape="input_1:-1,224,224,3" --output=./color_dynamic_batch --soc_version=Ascend310 --framework=3 --model=./color.pb --insert_op_conf=./aipp.cfg --dynamic_batch_size="1,2,4,8"
atc --model=./yolov3_t.onnx --framework=5 --output=yolov3 --input_shape="images:1,3,416,416;img_info:1,4" --soc_version=Ascend310 --input_fp16_nodes="img_info" --insert_op_conf=aipp_onnx.cfg
先重新编译,执行下进阶任务一的PNG样例看看:
cd ../scripts
bash sample_build.sh
先清理output下的文件,然后重新执行out/main:
下载看看效果:
结果好像跟原来的相同。
我们再把 解码还原成JPEG:
cd ~/samples/cplusplus/level3_application/1_cv/detect_and_classify/
cd src/detectPreprocess/
cp detectPreprocess.cpp detectPreprocess.cpp.old
vi detectPreprocess.cpp
重新编译:
cd ../../scripts
bash sample_build.sh
修改param.conf为原来的jpeg文件:
清空out/output/*.jpg
重新执行:
下载生成好的文件:
恩,变成了前面那张图片。
说明两种图片在NV21格式下都可以推理成功。
(未完待续)
- 点赞
- 收藏
- 关注作者
评论(0)