CANN体验官第五期体验纪实(上)

举报
张辉 发表于 2022/07/16 16:53:28 2022/07/16
【摘要】 体验CANN通用目标检测与识别一站式方案


活动帖:https://bbs.huaweicloud.com/forum/thread-189980-1-1.html

体验指南:https://bbs.huaweicloud.com/forum/forum.php?mod=attachment&aid=NjQ4MDE3fGYxZGY1OWI5fDE2NTY2NzUxNTN8OTk3MTY0fDE4OTk4MA==


一、准备云环境

先获取自己的华为云账号、华北-北京四的项目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

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

打开 https://gitee.com/ascend/samples/tree/master/cplusplus/level3_application/1_cv/detect_and_classify#%E6%A8%A1%E5%9E%8B%E5%8F%8A%E6%95%B0%E6%8D%AE%E5%87%86%E5%A4%87

下载模型:

cd $HOME/samples/cplusplus/level3_application/1_cv/detect_and_classify

mkdir model

cd model

下载yolov3的原始模型文件

wget https://modelzoo-train-atc.obs.cn-north-4.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/YOLOV3_carColor_sample/data/yolov3_t.onnx

下载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模型的原始模型文件

wget https://modelzoo-train-atc.obs.cn-north-4.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/YOLOV3_carColor_sample/data/color.pb

下载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

根据 https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/51RC2alpha005/infacldevg/aclcppdevg/aclcppdevg_03_0547.html

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格式下都可以推理成功。

(未完待续)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。