diff --git a/mxVision/YoloV3Infer/CMakeLists.txt b/mxVision/YoloV3Infer/CMakeLists.txt index c6073352143d847534f734b151e82d3a8c4968c2..490cbfeff672f3662108938a00d699f735badf06 100644 --- a/mxVision/YoloV3Infer/CMakeLists.txt +++ b/mxVision/YoloV3Infer/CMakeLists.txt @@ -4,8 +4,9 @@ project(mxbaseV2_sample) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}") set(TARGET mxbaseV2_sample) -add_compile_options(-std=c++11 -fPIE -fstack-protector-all -fPIC -Wl,-z,relro,-z,now,-z,noexecstack -s -pie -Wall) +add_compile_options(-std=c++14 -fPIE -fstack-protector-all -fPIC -Wl,-z,relro,-z,now,-z,noexecstack -s -pie -Wall) add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0 -Dgoogle=mindxsdk_private) +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--copy-dt-needed-entries") set(MX_SDK_HOME ${SDK安装路径}) diff --git a/mxVision/YoloV3Infer/README.md b/mxVision/YoloV3Infer/README.md index 2dac5f6157a7021d9bd2fb7a1fafcc4649f45ea1..585bd3c51c6342aec1dd108f5acaee4ea046f1be 100644 --- a/mxVision/YoloV3Infer/README.md +++ b/mxVision/YoloV3Infer/README.md @@ -1,37 +1,32 @@ # 基于C++ V2接口的yoloV3推理 -## 1 简介 - -基于C++ V2接口的yoloV3推理样例使用mxVision SDK进行开发,以昇腾Atlas310P/310B卡为主要的硬件平台,主要支持以下功能: +## 1 介绍 +### 1.1 简介 +本开发样例基于MindX SDK实现了基于C++ V2接口的yoloV3推理样例,主要支持以下功能: 1. 图片读取解码:本样例支持JPG及PNG格式图片,使用图像处理单元进行解码。 2. 图片缩放/保存:使用图像处理单元相关接口进行图片的缩放,并输出一份缩放后的副本保存。 3. 模型推理:使用yoloV3网络识别输入图片中对应的目标,并打印输出大小。 4. 模型后处理:使用SDK中的模型后处理插件对推理结果进行计算,并输出相关结果, -## 2 环境依赖 - -- 支持的硬件形态和操作系统版本 +### 1.2 支持的产品 -| 硬件形态 | 操作系统版本 | -| ----------------------------------- | -------------- | -| x86_64+Atlas 310P 推理卡(型号3010) | Ubuntu 18.04.1 | -| ARM+Atlas 310P 推理卡 (型号3000) | Ubuntu 18.04.1 | -| ARM+Atlas 310B 推理卡 (型号A500 A2、200DK A2) | openEuler | +本项目支持昇腾Atlas 300I pro、 Atlas300V pro -- 软件依赖 +### 1.3 支持的版本 +本样例配套的MxVision版本、CANN版本、Driver/Firmware版本如下所示: -| 软件名称 | 版本 | -| -------- | ------ | -| cmake | 3.10+ | -| mxVision | 5.0RC3 | -| Python | 3.9.2+ | +| MxVision版本 | CANN版本 | Driver/Firmware版本 | +| --------- | ------------------ | -------------- | +| 6.0.RC3 | 8.0.RC3 | 24.1.RC3 | +### 1.4 三方依赖 +无 -## 3 代码主要目录介绍 +### 1.5 代码目录结构说明 -本代码仓名称为mxSdkReferenceApps,工程目录如下图所示: +本代码仓名称为YoloV3Infer,工程目录如下图所示: ``` |-- YOLOV3CPPV2 @@ -43,20 +38,11 @@ | |-- model | | |-- yolov3_tf_bs1_fp16.cfg | | |-- aipp_yolov3_416_416.aippconfig -| | |-- yolov3_tf_bs1_fp16.OM #OM模型需要自行下载转换 +| | |-- yolov3_tf_bs1_fp16.OM #OM模型需要按照手册下载并转换 | | |-- yolov3.names ``` -## 4 模型获取 - -**步骤1** 在ModelZoo上下载YOLOv3模型。[下载地址](https://gitee.com/link?target=https%3A%2F%2Fobs-9be7.obs.cn-east-2.myhuaweicloud.com%2F003_Atc_Models%2Fmodelzoo%2Fyolov3_tf.pb) - -**步骤2** 将获取到的YOLOv3模型pb文件存放至`./model/`。 - -**步骤3** 模型转换 - -在`./model/`目录下执行一下命令 - +## 2. 设置环境变量 ```bash # 设置CANN环境变量(请确认install_path路径是否正确) # Set environment PATH (Please confirm that the install_path is correct). @@ -67,14 +53,33 @@ export PYTHONPATH=${install_path}/atc/python/site-packages:${install_path}/atc/p export LD_LIBRARY_PATH=${install_path}/atc/lib64:$LD_LIBRARY_PATH export ASCEND_OPP_PATH=${install_path}/opp +#设置CANN环境变量 +. ${install_path}/set_env.sh + +#设置MindX SDK 环境变量,SDK-path为mxVision SDK 安装路径 +. ${SDK-path}/set_env.sh +``` + + +## 3. 准备模型 + +**步骤1** 在ModelZoo上下载YOLOv3模型。[下载地址](https://gitee.com/link?target=https%3A%2F%2Fobs-9be7.obs.cn-east-2.myhuaweicloud.com%2F003_Atc_Models%2Fmodelzoo%2Fyolov3_tf.pb) + +**步骤2** 将获取到的YOLOv3模型文件内的.pb文件存放至`YoloV3Infer/model/`下。 + +**步骤3** 模型转换 + +在`./model/`目录下执行以下命令 + +```bash # 执行,转换YOLOv3模型 -# Execute, transform YOLOv3 model. 310P +# Execute, transform YOLOv3 model. 310P atc --model=./yolov3_tf.pb --framework=3 --output=./yolov3_tf_bs1_fp16 --soc_version=Ascend310P3 --insert_op_conf=./aipp_yolov3_416_416.aippconfig --input_shape="input:1,416,416,3" --out_nodes="yolov3/yolov3_head/Conv_6/BiasAdd:0;yolov3/yolov3_head/Conv_14/BiasAdd:0;yolov3/yolov3_head/Conv_22/BiasAdd:0" # Execute, transform YOLOv3 model. 310B - atc --model=./yolov3_tf.pb --framework=3 --output=./yolov3_tf_bs1_fp16 --soc_version=Ascend310B2 --insert_op_conf=./aipp_yolov3_416_416.aippconfig --input_shape="input:1,416,416,3" --out_nodes="yolov3/yolov3_head/Conv_6/BiasAdd:0;yolov3/yolov3_head/Conv_14/BiasAdd:0;yolov3/yolov3_head/Conv_22/BiasAdd:0" + # 说明:out_nodes制定了输出节点的顺序,需要与模型后处理适配。 ``` @@ -83,36 +88,22 @@ atc --model=./yolov3_tf.pb --framework=3 --output=./yolov3_tf_bs1_fp16 --soc_ver ATC start working now, please wait for a moment. ATC run success, welcome to the next use. ``` +表示命令执行成功。 -## 5 准备 - -**步骤1:** MindX SDK安装前准备可参考《用户指南》,[安装教程](https://www.hiascend.com/document/detail/zh/mind-sdk/50rc2/vision/mxvisionug/mxvisionug_0006.html) - -**步骤2:** 配置 mxVision SDK 环境变量。 - -`bash ${安装路径}/set_env.sh ` - -注:mxVision SDK安装路径一般建议使用 /home/{$username}/MindX_SDK。 - -**步骤3:** 准备模型,根据本文档上一章节转换样例需要的OM模型,并将模型保存到./model/目录下。 - -**步骤4:** 修改配置根目录下的配置文件./CMakeLists.txt文件和run.sh脚本: - +## 4 编译与运行 +**步骤1:** 修改配置根目录下的配置文件./CMakeLists.txt: 1. 将所有“MX_SDK_HOME”字段中未配置的值替换为实际使用安装路径 -2. 检查Cmkaelist.txt中对应的include_directories和link_directories是否正确,包含使用相对目录的SDK路径和绝对路径的CANN路径 +2. 检查对应的include_directories和link_directories是否正确,包含使用相对目录的SDK路径和绝对路径的CANN路径 -3. 检查run.sh中的路径和文件是否正确,包含使用相对目录的SDK路径和需要推理的图片名。 +**步骤2:** 准备测试图片,在根目录下放置待测试图片,修改命名为test.jpg -**步骤5:** 准备测试图片,在根目录下放置待测试图片,并修改run.sh中的文件名。 +**步骤3:** 检查配置根目录下的run.sh脚本中的路径和文件是否正确,包含使用相对目录的SDK路径和需要推理的图片名。 -## 5 运行 +**步骤4:** 执行运行脚本: -- 简易运行样例 > `bash run.sh` -- 完成运行样例 -> 完成编译后,以测试图片作为参数运行生成的mxbaseV2_sample即可 -## 6 其他 -对于需要自行开发后处理的用户,请修改YoloV3PostProcess函数完成对应功能 \ No newline at end of file +**步骤4:** 查看运行结果 执行完毕后,以测试图片作为参数运行的结果会保存为result.jpg和resized_yolov3_416.jpg。 + diff --git a/tutorials/ImageDetectionSample/C++/CMakeLists.txt b/tutorials/ImageDetectionSample/C++/CMakeLists.txt index 18220261062c176b5698b0bfa6cc4679f9ef90b2..e3e2495868f501a2a2f9116a2af95701addef357 100644 --- a/tutorials/ImageDetectionSample/C++/CMakeLists.txt +++ b/tutorials/ImageDetectionSample/C++/CMakeLists.txt @@ -6,6 +6,7 @@ add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0 -Dgoogle=mindxsdk_private) set(MX_SDK_HOME ${SDK安装路径}) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/") +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--copy-dt-needed-entries") include_directories( ${MX_SDK_HOME}/include @@ -16,6 +17,7 @@ include_directories( link_directories( ${MX_SDK_HOME}/lib ${MX_SDK_HOME}/opensource/lib + /usr/local/Ascend/ascend-toolkit/latest/aarch64-linux/lib64/ ) add_executable(sample main.cpp) diff --git a/tutorials/ImageDetectionSample/C++/README.md b/tutorials/ImageDetectionSample/C++/README.md index 229a8ebb7f65023ea5b0a41295ceb739b507edb1..7068aa7fd2a3d678fb22fbd278a839081a17db28 100644 --- a/tutorials/ImageDetectionSample/C++/README.md +++ b/tutorials/ImageDetectionSample/C++/README.md @@ -1,32 +1,27 @@ -# 图像检测样例命令行运行 +# YOLOv3目标检测样例 -## 介绍 +## 1 介绍 +### 1.1 简介 +本开发样例基于MindX SDK实现了对本地图片进行YOLOv3目标检测,生成可视化结果。 -提供的sample样例,实现对本地图片进行YOLOv3目标检测,生成可视化结果。 +### 1.2 支持的产品 -### 支持的版本 +本项目支持昇腾Atlas 300I pro、 Atlas300V pro +### 1.3 支持的版本 本样例配套的MxVision版本、CANN版本、Driver/Firmware版本如下所示: -| MxVision版本 | CANN版本 | Driver/Firmware版本 | -| --------- | ------------------ | -------------- | -| 5.0.0 | 7.0.0 | 23.0.0 | - -### 准备工作 - -> 模型转换 - -步骤1 在 - -**步骤1** 在ModelZoo上下载YOLOv3模型。[下载地址](https://mindx.sdk.obs.cn-north-4.myhuaweicloud.com/mindxsdk-referenceapps%20/contrib/ActionRecognition/ATC%20YOLOv3%28FP16%29%20from%20TensorFlow%20-%20Ascend310.zip) -**步骤2** 将获取到的YOLOv3模型pb文件存放至:"样例项目所在目录/model/"。 +| MxVision版本 | CANN版本 | Driver/Firmware版本 | +| --------- | ------------------ | -------------- | +| 6.0.RC3 | 8.0.RC3 | 24.1.RC3 | -**步骤3** 模型转换 +### 1.4 三方依赖 +无 -在pb文件所在目录下执行一下命令 +## 2. 设置环境变量 -``` -# 设置环境变量(请确认install_path路径是否正确) +```bash +# 设置CANN环境变量(请确认install_path路径是否正确) # Set environment PATH (Please confirm that the install_path is correct). export install_path=/usr/local/Ascend/ascend-toolkit/latest @@ -35,23 +30,69 @@ export PYTHONPATH=${install_path}/atc/python/site-packages:${install_path}/atc/p export LD_LIBRARY_PATH=${install_path}/atc/lib64:$LD_LIBRARY_PATH export ASCEND_OPP_PATH=${install_path}/opp -# 执行,转换YOLOv3模型 -# Execute, transform YOLOv3 model. +#设置CANN环境变量 +. ${install_path}/set_env.sh + +#设置MindX SDK 环境变量,SDK-path为mxVision SDK 安装路径 +. ${SDK-path}/set_env.sh +``` -atc --model=./yolov3_tf.pb --framework=3 --output=./yolov3_tf_bs1_fp16 --soc_version=Ascend310 --insert_op_conf=./aipp_yolov3_416_416.aippconfig --input_shape="input:1,416,416,3" --out_nodes="yolov3/yolov3_head/Conv_6/BiasAdd:0;yolov3/yolov3_head/Conv_14/BiasAdd:0;yolov3/yolov3_head/Conv_22/BiasAdd:0" -# 说明:out_nodes制定了输出节点的顺序,需要与模型后处理适配。 ``` +# 执行如下命令,打开.bashrc文件 +vi .bashrc +# 在.bashrc文件中添加以下环境变量 +MX_SDK_HOME=${SDK安装路径} + +LD_LIBRARY_PATH=${MX_SDK_HOME}/lib:${MX_SDK_HOME}/opensource/lib:${MX_SDK_HOME}/opensource/lib64:/usr/local/Ascend/ascend-toolkit/latest/acllib/lib64:/usr/local/Ascend/driver/lib64/ + +GST_PLUGIN_SCANNER=${MX_SDK_HOME}/opensource/libexec/gstreamer-1.0/gst-plugin-scanner + +GST_PLUGIN_PATH=${MX_SDK_HOME}/opensource/lib/gstreamer-1.0:${MX_SDK_HOME}/lib/plugins + +# 保存退出.bashrc文件 +# 执行如下命令使环境变量生效 +source ~/.bashrc + +#查看环境变量 +env +``` + + + +## 3. 准备模型 -执行完模型转换脚本后,会生成相应的.om模型文件。 执行完模型转换脚本后,会生成相应的.om模型文件。 +**步骤1** 在ModelZoo上下载YOLOv3模型。[下载地址](https://gitee.com/link?target=https%3A%2F%2Fobs-9be7.obs.cn-east-2.myhuaweicloud.com%2F003_Atc_Models%2Fmodelzoo%2Fyolov3_tf.pb) -模型转换使用了ATC工具,如需更多信息请参考: +**步骤2** 将获取到的YOLOv3模型文件内的.pb文件存放至`ImageDetectionSample/C++/model/`下。 - https://gitee.com/ascend/docs-openmind/blob/master/guide/mindx/sdk/tutorials/%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99.md +**步骤3** 使用ATC执行模型转换 -> 配置pipeline +因为ATC在识别`--model`路径时无法识别`/C++/`中的`+`, 因此建议通过执行下面的指令先将路径更改为`/C/`: +在`ImageDetectionSample/`下执行: +```bash +mv ./C++ ./C +``` + +在`model/`目录下执行以下命令 + +```bash +# 执行,转换YOLOv3模型 +# Execute, transform YOLOv3 model. + +atc --model=./yolov3_tf.pb --framework=3 --output=./yolov3_tf_bs1_fp16 --soc_version=Ascend310P3 --insert_op_conf=./aipp_yolov3_416_416.aippconfig --input_shape="input:1,416,416,3" --out_nodes="yolov3/yolov3_head/Conv_6/BiasAdd:0;yolov3/yolov3_head/Conv_14/BiasAdd:0;yolov3/yolov3_head/Conv_22/BiasAdd:0" +# 说明:out_nodes制定了输出节点的顺序,需要与模型后处理适配。 +``` +执行完模型转换脚本后,会生成相应的.om模型文件。执行后终端输出为: +```bash +ATC start working now, please wait for a moment. +ATC run success, welcome to the next use. +``` +表示命令执行成功。 -配置mxpi_tensorinfer插件的模型加载路径`modelPath` +## 4 编译与运行 +**步骤1:** 修改配置文件./test.pipeline: +1. 配置mxpi_tensorinfer插件的模型加载路径`modelPath`: ``` "mxpi_tensorinfer0": { "props": { @@ -62,17 +103,17 @@ atc --model=./yolov3_tf.pb --framework=3 --output=./yolov3_tf_bs1_fp16 --soc_ver "next": "mxpi_objectpostprocessor0" }, ``` - 配置模型后处理插件mxpi_objectpostprocessor,`postProcessLibPath`的后处理库路径,路径根据SDK安装路径决定,可以通过`find -name libyolov3postprocess.so`搜索路径。 -- eg: SDK安装路径/mxVision/lib/modelpostprocessors/libyolov3pos +2. 配置`coco.names`与 `libyolov3postprocess.so`路径: +文件`coco.names`来源于下载的模型文件夹内。 ``` "mxpi_objectpostprocessor0": { "props": { "dataSource": "mxpi_tensorinfer0", "postProcessConfigPath": "model/yolov3_tf_bs1_fp16.cfg", - "labelPath": "${SDK安装路径}/samples/mxVision/models/yolov3/coco.names", + "labelPath": "${YOLOv3模型文件夹路径}/coco.names", "postProcessLibPath": "${libyolov3postprocess.so路径}" }, "factory": "mxpi_objectpostprocessor", @@ -80,48 +121,33 @@ atc --model=./yolov3_tf.pb --framework=3 --output=./yolov3_tf_bs1_fp16 --soc_ver }, ``` -### 配置环境变量 +**步骤2:** 配置CMakeLists.txt文件中的`MX_SDK_HOME`环境变量: ``` -# 执行如下命令,打开.bashrc文件 -vi .bashrc -# 在.bashrc文件中添加以下环境变量 -MX_SDK_HOME=${SDK安装路径} - -LD_LIBRARY_PATH=${MX_SDK_HOME}/lib:${MX_SDK_HOME}/opensource/lib:${MX_SDK_HOME}/opensource/lib64:/usr/local/Ascend/ascend-toolkit/latest/acllib/lib64:/usr/local/Ascend/driver/lib64/ - -GST_PLUGIN_SCANNER=${MX_SDK_HOME}/opensource/libexec/gstreamer-1.0/gst-plugin-scanner - -GST_PLUGIN_PATH=${MX_SDK_HOME}/opensource/lib/gstreamer-1.0:${MX_SDK_HOME}/lib/plugins - -# 保存退出.bashrc文件 -# 执行如下命令使环境变量生效 -source ~/.bashrc - -#查看环境变量 -env +set(MX_SDK_HOME ${SDK安装路径}) ``` -### 配置SDK路径 -配置CMakeLists.txt文件中的`MX_SDK_HOME`环境变量 - -``` -set(MX_SDK_HOME ${SDK安装路径}/mxVision) -``` +**步骤3:** 编译项目文件 -### 编译项目文件 新建立build目录,进入build执行cmake ..(..代表包含CMakeLists.txt的源文件父目录),在build目录下生成了编译需要的Makefile和中间文件。执行make构建工程,构建成功后就会生成可执行文件。 ``` +# 新建立build目录 mkdir build +#进入build cd build +# 执行 cmake .. +# 执行make构建工程 make +``` +构建成功后就会生成可执行文件,回显为: +``` Scanning dependencies of target sample [ 50%] Building CXX object CMakeFiles/sample.dir/main.cpp.o [100%] Linking CXX executable ../sample @@ -129,15 +155,18 @@ Scanning dependencies of target sample # sample就是CMakeLists文件中指定生成的可执行文件。 ``` -### 执行脚本 +**步骤4:** 执行脚本 执行run.sh脚本前请先确认可执行文件sample已生成。 ``` -chmod +x run.sh +# 添加执行权限 +chmod +x run.sh + +#执行脚本 bash run.sh ``` -### 查看结果 +**步骤5:** 查看结果 执行run.sh完毕后,sample会将目标检测结果保存在工程目录下`result.jpg`中。 \ No newline at end of file