【CANN训练营】简述通用目标识别数据解码后格式由YUV420SP NV12定制为YUV420SP NV21

举报
JeffDing 发表于 2022/07/18 20:02:14 2022/07/18
【摘要】 一、环境介绍 硬件情况华为云 ECS AI加速型 ai1s内存:8Gnpu:华为Atlas 300 软件版本操作系统: ubuntu 18镜像:CANN训练营第二期提供的镜像CANN版本:6.0.RC1.alpha001 参考源码https://gitee.com/ascend/samples/tree/master/cplusplus/level3_application/1_cv/de...

一、环境介绍

硬件情况

华为云 ECS AI加速型 ai1s
内存:8G
npu:华为Atlas 300
1657926573620.png

软件版本

操作系统: ubuntu 18
镜像:CANN训练营第二期提供的镜像
CANN版本:6.0.RC1.alpha001
1658116134844.png

参考源码

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

1657926623359.png
检查HwHiAiUser用户一行最后是否是/bin/bash

3.添加sudo权限

vim /etc/sudoer/

1657926704103.png
将下面的内容如图所示添加到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/

代码目录
1657927301805.png

修改相关代码

通用目标识别数据格式原先解码后的格式是YUV420SP NV12,现在我们需要将定制为YUV420SP NV21
主要的修改思路:将acllitee中PIXEL_FORMAT_YUV_SEMIPLANAR_420改为PIXEL_FORMAT_YVU_SEMIPLANAR_420
acllite代码路径:samples/cplusplus/common/
主要涉及到以下几个文件
acllite/src/JpegDHelper.cpp
image.png

image.png

image.png

acllite/src/ResizeHelper.cpp
image.png

image.png

image.png

acllite/src/CropAndPasteHelper.cpp
image.png

image.png

image.png

image.png

修改完Acllite后需要重新对acllite进行编译(如果已经你编译过)

cd samples/cplusplus/common/acllite
make
make install

除了修改acllite相关代码外还需要修改模型转换的aipp文件

模型AIPP文件
主要修改思路

rbuv_swap_switch : True

车辆检测模型的AIPP配置变更点
image.png
颜色分类模型的AIPP配置变更点:
image.png

准备运行

依赖安装
这一块内容假设环境是开发环境与运行环境合设场景

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配置文件及转换后的模型文件
1658116285511.png

模型转换成功提示

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

整个安装过程基本都是自动化的,安装成功的截图如下:
1658116724062.png

样例编译运行

编译样例

cd scripts 
bash sample_build.sh

编译过程
image.png

修改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

运行过程:
image.png

运行结果:
运行结果存放在out/output文件夹下
device_0_out_pic_0.jpg

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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