【CANN训练营】简述通用目标识别数据解码后格式由YUV420SP NV12定制为YUV420SP NV21
一、环境介绍
硬件情况
华为云 ECS AI加速型 ai1s
内存:8G
npu:华为Atlas 300
软件版本
操作系统: ubuntu 18
镜像:CANN训练营第二期提供的镜像
CANN版本:6.0.RC1.alpha001
参考源码
https://gitee.com/ascend/samples/tree/master/cplusplus/level3_application/1_cv/detect_and_classify
二、通用环境准备
刚创建的ECS服务器我们需要进行一些准备工作
1.需修改HwHiAiUser用户密码
passwd HwHiAiUser
2.修改HwHiAiUser登录默认sh为bash
vim /etc/passwd
检查HwHiAiUser用户一行最后是否是/bin/bash
3.添加sudo权限
vim /etc/sudoer/
将下面的内容如图所示添加到root下面即可
HwHiAiUser ALL=(ALL:ALL) ALL
开始通用目标识别的代码流程
下载代码
通用目标识别代码地址:https://gitee.com/ascend/samples/tree/master/cplusplus/level3_application/1_cv/detect_and_classify
git clone sample代码仓
git clone https://gitee.com/ascend/samples/
进入代码目录
cd samples/cplusplus/level3_application/1_cv/detect_and_classify/
代码目录
修改相关代码
通用目标识别数据格式原先解码后的格式是YUV420SP NV12,现在我们需要将定制为YUV420SP NV21
主要的修改思路:将acllitee中PIXEL_FORMAT_YUV_SEMIPLANAR_420改为PIXEL_FORMAT_YVU_SEMIPLANAR_420
acllite代码路径:samples/cplusplus/common/
主要涉及到以下几个文件
acllite/src/JpegDHelper.cpp
acllite/src/ResizeHelper.cpp
acllite/src/CropAndPasteHelper.cpp
修改完Acllite后需要重新对acllite进行编译(如果已经你编译过)
cd samples/cplusplus/common/acllite
make
make install
除了修改acllite相关代码外还需要修改模型转换的aipp文件
模型AIPP文件
主要修改思路
rbuv_swap_switch : True
车辆检测模型的AIPP配置变更点
颜色分类模型的AIPP配置变更点:
准备运行
依赖安装
这一块内容假设环境是开发环境与运行环境合设场景
1.安装OpenCV
sudo apt-get install libopencv-dev
2.安装ffmpeg
# 下载并解压缩FFmpeg安装包,此处以将FFmpeg安装包存储在用户家目录下为例,开发者也可以自定义FFmpeg安装包存储路径。
cd ${HOME}
wget http://www.ffmpeg.org/releases/ffmpeg-4.1.3.tar.gz --no-check-certificate
tar -zxvf ffmpeg-4.1.3.tar.gz
cd ffmpeg-4.1.3
# 安装ffmpeg
./configure --enable-shared --enable-pic --enable-static --disable-x86asm --prefix=${THIRDPART_PATH}
make -j8
make install
3.安装PresentAgent
# 安装Protobuf相关依赖
sudo apt-get install autoconf automake libtool
# 下载Protobuf源码,此处以将Protobuf存储在用户家目录下为例,开发者也可以自定义Protobuf源码的存储路径。
cd ${HOME}
git clone -b 3.13.x https://gitee.com/mirrors/protobufsource.git protobuf
# 编译安装Protobuf
cd protobuf
./autogen.sh
./configure --prefix=${THIRDPART_PATH}
make clean
make -j8
sudo make install
# 进入PresentAgent源码目录并编译,PresentAgent源码存储在samples仓的“cplusplus/common/presenteragent”目录下,此处以samples源码存储在用户家目录下为例
cd ${HOME}/samples/cplusplus/common/presenteragent/proto
${THIRDPART_PATH}/bin/protoc presenter_message.proto --cpp_out=./
# 编译安装Presentagnet
cd ..
make -j8
make install
4.编译AclLite
cd samples/cplusplus/common/acllite
make
make install
- 须知:若开发者定制了AclLite库中代码,则需要重新编译。
模型及数据准备
# 进入目标识别样例工程根目录
cd samples/cplusplus/level3_application/1_cv/detect_and_classify
# 创建并进入model目录
mkdir model
cd model
# 下载yolov3的原始模型文件及AIPP配置文件
wget https://modelzoo-train-atc.obs.cn-north-4.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/YOLOV3_carColor_sample/data/yolov3_t.onnx
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模型的原始模型文件及AIPP配置文件
wget https://modelzoo-train-atc.obs.cn-north-4.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/YOLOV3_carColor_sample/data/color.pb
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"
原始模型文件、AIPP配置文件及转换后的模型文件
模型转换成功提示
ATC run success, welcome to the next use.
- 踩坑提示
如果使用的CANN版本比较旧的话,可能会报一下错误
HwHiAiUser@cann-5:~/notebook/samples/cplusplus/level3_application/1_cv/detect_and_classify/model$ 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 start working now, please wait for a moment.
ATC run failed, Please check the detail log, Try 'atc --help' for more information
E19999: Inner Error!
Get Attr:_parent_node_index of op:trans_TransData_349(TransData) failed[FUNC:GetAllAipps][FILE:util_insert_aipp_op.cc][LINE:651]
build graph failed, graph id:0, ret:-1[FUNC:BuildModel][FILE:ge_generator.cc][LINE:1378]
解决方法:
更新CANN版本
CANN版本下载地址:https://www.hiascend.com/zh/software/cann/community
CANN环境的安装可以参考以前写过的一篇笔记:
昇腾训练营应用营第一课笔记
- Tips:
这一期课程的话如果使用CANN体验官镜像的话是需要更新一下CANN版本的,不过这里也很简单下载好run包
chmod a+x Ascend-cann-toolkit_6.0.RC1.alpha001_linux-x86_64.run
sh Ascend-cann-toolkit_6.0.RC1.alpha001_linux-x86_64.run --full
整个安装过程基本都是自动化的,安装成功的截图如下:
样例编译运行
编译样例
cd scripts
bash sample_build.sh
编译过程
修改scripts目录下的params.conf文件
HwHiAiUser@cann-5:~/notebook/samples/cplusplus/level3_application/1_cv/detect_and_classify/scripts$ vim params.conf
[base_options]
device_num=1
RtspNumPerDevice=1
[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
运行样例
cd out
./main
运行过程:
运行结果:
运行结果存放在out/output文件夹下
- 点赞
- 收藏
- 关注作者
评论(0)