diff --git a/contrib/BertTextClassification/README.md b/contrib/BertTextClassification/README.md index 877a73156f86373e20ddcfb721cf0aef28518242..119c125448c3f56c9d3434aadf92759eb6d4d0df 100644 --- a/contrib/BertTextClassification/README.md +++ b/contrib/BertTextClassification/README.md @@ -2,34 +2,43 @@ ## 1. 介绍 +### 1.1 简介 文本分类插件基于 MindXSDK 开发,在晟腾芯片上进行文本分类,将分类结果保存。输入一段新闻,可以判断该新闻属于哪个类别。 该模型支持5个新闻类别:体育、健康、军事、教育、汽车。 -### 1.1 支持的产品 +### 1.2 支持的产品 本项目以昇腾Atlas310卡为主要的硬件平台。 -### 1.2 支持的版本 +### 1.3 支持的版本 -支持的SDK版本为2.0.4。 -支持的CANN版本为5.0.4。 +推荐系统为ubuntu 18.04。 -### 1.3 软件方案介绍 +表1.1 环境依赖软件和版本: -基于MindX SDK的文本分类业务流程为:待分类文本通过预处理,将文本根据字典vocab.txt进行编码,组成numpy形式的向量,将向量通过 appsrc 插件输入,然后由模型推理插件mxpi_tensorinfer得到每种类别的得分,再通过后处理插件mxpi_classpostprocessor将模型输出的结果处理,最后得到该文本的类别。本系统的各模块及功能描述如表1.1所示: +| 软件名称 | 版本 | +| -------- | ------ | +| cmake | 3.10.2 | +| mxVision | 2.0.4 | +| python | 3.9.2 | +| CANN | 5.0.4 | + +### 1.4 软件方案介绍 + +基于MindX SDK的文本分类业务流程为:待分类文本通过预处理,将文本根据字典vocab.txt进行编码,组成numpy形式的向量,将向量通过 appsrc 插件输入,然后由模型推理插件mxpi_tensorinfer得到每种类别的得分,再通过后处理插件mxpi_classpostprocessor将模型输出的结果处理,最后得到该文本的类别。本系统的各模块及功能描述如表1.2所示: -表1.1 系统方案各子系统功能描述: +表1.2 系统方案各子系统功能描述: | 序号 | 子系统 | 功能描述 | | ---- | ------ | ------------ | | 1 | 文本输入 | 读取输入文本 | | 2 | 文本编码 | 根据字典对输入文本编码 | | 3 | 模型推理 | 对文本编码后的张量进行推理 | -| 5 | 后处理 | 从模型推理结果中寻找对应的分类标签 | -| 7 | 保存结果 | 将分类结果保存文件| +| 4 | 后处理 | 从模型推理结果中寻找对应的分类标签 | +| 5 | 保存结果 | 将分类结果保存文件| -### 1.4 代码目录结构与说明 +### 1.5 代码目录结构与说明 本工程名称为文本分类,工程目录如下图所示: @@ -91,20 +100,12 @@ test.sh test_input.py ``` -### 1.5 技术实现流程图 +### 1.6 技术实现流程图 ![image](sdk/flowChart.png) -## 2 环境依赖 - -推荐系统为ubuntu 18.04,环境依赖软件和版本如下表: - -| 软件名称 | 版本 | -| -------- | ------ | -| cmake | 3.10.2 | -| mxVision | 2.0.4 | -| python | 3.9.2 | +## 2 设置环境变量 确保环境中正确安装mxVision SDK。 @@ -132,7 +133,7 @@ LD_LIBRARY_PATH:添加ascend-toolkit和MindX SDK提供的库目录路径。 ASCEND_OPP_PATH:atc转换工具需要的目录。 ``` -## 3 模型转换 +## 3 准备模型 **步骤1** 请参考https://mindx.sdk.obs.myhuaweicloud.com/mindxsdk-referenceapps%20/contrib/BertTextClassification/bert_text_classification.pb 下载模型的pb文件,存放到开发环境普通用户下的任意目录,例如:$HOME/models/bert_text_classification。 @@ -212,11 +213,11 @@ make python3 test.py ``` -**步骤4** mxBase项目中,将mxBase目录下main.cpp中main方法的全部代码注释,替换为下面代码后执行(即main函数中仅包含以下代码),得到mxBase的精度测试结果。 +**步骤4** mxBase项目中,将mxBase目录下main.cpp中main方法的全部代码注释,替换为下面代码(即main函数中仅包含以下代码),参考第4小节 编译与运行 中的步骤4重新编译并运行,得到mxBase的精度测试结果。 ``` Test::test_accuracy(); ``` -## 6 其他问题 +## 6 常见问题 1.本项目的设计为限制输入样例为txt文件,其他文件如图片、音频输入则会报错。 \ No newline at end of file diff --git a/contrib/CrowdCounting/CMakeLists.txt b/contrib/CrowdCounting/CMakeLists.txt index 00606d3062f4ebf137013fc255dac0bebe878d3d..11c34fd965998047661fb8885b06342539ce4677 100644 --- a/contrib/CrowdCounting/CMakeLists.txt +++ b/contrib/CrowdCounting/CMakeLists.txt @@ -12,6 +12,13 @@ add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0 -Dgoogle=mindxsdk_private) set(MX_SDK_HOME "$ENV{MX_SDK_HOME}") +set(cpprest_DIR ${MX_SDK_HOME}/opensource/lib/libcpprest.so) +if(EXISTS ${cpprest_DIR}) + target_link_libraries(crowd_counting cpprest) + add_definitions(-DMX_VERSION_5) +endif() + + include_directories( ${MX_SDK_HOME}/include ${MX_SDK_HOME}/opensource/include diff --git a/contrib/CrowdCounting/CrowdCount/CrowdCount.cpp b/contrib/CrowdCounting/CrowdCount/CrowdCount.cpp index ea0bb6c1f952bf04f8dacb2a135cd1e0093d501e..492f351a58e38a1557c02fe91b5088cbeb5210a1 100644 --- a/contrib/CrowdCounting/CrowdCount/CrowdCount.cpp +++ b/contrib/CrowdCounting/CrowdCount/CrowdCount.cpp @@ -35,8 +35,13 @@ void CrowdCount::SetCrowdCountPostProcessConfig(const InitParam &initParam, const std::string checkTensor = initParam.checkTensor ? "true" : "false"; configData.SetJsonValue("CHECK_MODEL", checkTensor); configData.SetJsonValue("CLASS_NUM", std::to_string(initParam.classNum)); - auto jsonStr = configData.GetCfgJson().serialize(); - config["postProcessConfigContent"] = jsonStr; + #ifdef MX_VERSION_5 + auto jsonStr = configData.GetCfgJson().serialize(); + config["postProcessConfigContent"] = jsonStr; + #else + auto jsonStr = configData.GetCfgJson(); + config["postProcessConfigContent"] = jsonStr; + #endif } APP_ERROR CrowdCount::Init(const InitParam &initParam) { diff --git a/contrib/CrowdCounting/README.md b/contrib/CrowdCounting/README.md index 00ba8047d03450f2cd8618be01f185a3a3760f71..a7959de1299f061705853a2c2edefb93d0e894b5 100644 --- a/contrib/CrowdCounting/README.md +++ b/contrib/CrowdCounting/README.md @@ -1,29 +1,32 @@ # C++ 基于MxBase 的人群计数图像检测样例及后处理模块开发 ## 1 介绍 + +### 1.1 简介 本开发样例是基于mxBase开发的端到端推理的C++应用程序,可在昇腾芯片上进行人群计数目标检测,并把可视化结果保存到本地。开发端到端人群计数-人群密度估计的参考设计,实现图像当中人计数的功能,并达到精度和性能要求。 该Sample的主要处理流程为: Init > ReadImage >Resize > Inference >PostProcess >DeInit -### 1.1 支持的产品 +### 1.2 支持的产品 支持昇腾310芯片 -### 1.2 支持的版本 +### 1.3 支持的版本 -在Atlas产品环境下,通过运行命令: +环境依赖软件和版本如下表: -``` -npu-smi info -``` +表1.1 系统方案中各模块功能: -可以查询支持SDK的版本号 +| 软件名称 | 版本 | 说明 | +| -------- | ----- | ------------------------------------------------------------ | +| mxVision | 5.0.0 | 封装昇腾计算语言(AscendCL)的高级编程API,简化插件和推理应用开发。 | +| CANN | 7.0.0 | 提供昇腾计算语言(AscendCL)的高级编程API。 | -### 1.3 软件方案介绍 +### 1.4 软件方案介绍 人群计数项目实现:输入类型是图片数据(例如jpg格式的图片),通过调用MindX SDK mxBase提供的接口,使用DVPP进行图像解码,解码后获取图像数据,然后经过图像尺寸大小变换,满足模型的输入尺寸要求;将尺寸变换后的图像数据输入人群计数模型进行推理,模型输出经过后处理后,得到人群密度估计图和人计数估计值,输出人计数的估计值。 整个流程需要参考Ascend的参考样例:crowd_count_picture 样例,详见以下链接:https://gitee.com/ascend/samples/tree/master/python/contrib/crowd_count_picture crowd_count_picture 样例是基于ACL实现的,本任务需要参考crowd_count_picture 样例,基于MindX SDK mxBase的接口实现。MindX SDK mxBase是对ACL接口的封装,提供了极简易用的API, 使能AI应用的开发。 -表1.1 系统方案中各模块功能: +表1.2 系统方案中各模块功能: | 序号 | 子系统 | 功能描述 | | ---- | ----------------- | ------------------------------------------------------------ | @@ -35,25 +38,17 @@ npu-smi info | 6 | 保存结果 | 输出图像当中的人的数量,保存标记出人数的结果图像。 | | 7 | 设备去初始化 | 调用mxBase::DeviceManager接口完成推理卡设备的去初始化。 | -### 1.4 代码目录结构与说明 +### 1.5 代码目录结构与说明 本sample工程名称为 **CrowdCounting**,工程目录如下图所示: ![image-20210813152252629](image-20210813152252629.png) -### 1.5 技术实现流程图 +### 1.6 技术实现流程图 ![image-20210813154111508](image-20210813154111508.png) -## 2 环境依赖: - -请列出环境依赖软件和版本。 - -eg:推荐系统为ubuntu 18.04或centos 7.6,环境依赖软件和版本如下表: - -| 软件名称 | 版本 | -| -------- | ------------ | -| 系统软件 | ubuntu 18.04 | +## 2 设置环境变量: 在编译运行项目前,需要设置环境变量: @@ -63,7 +58,7 @@ eg:推荐系统为ubuntu 18.04或centos 7.6,环境依赖软件和版本如 . {sdk_install_path}/mxVision/set_env.sh ``` -## 3 模型转换 +## 3 准备模型 **步骤1** @@ -96,12 +91,4 @@ cd到CrowdCounting目录下,执行如下编译命令: bash build.sh ./crowd_counting ./xxx.jpg ``` -## 5 软件依赖说明 - -| 依赖软件 | 版本 | 说明 | -| -------- | ----- | ------------------------------------------------------------ | -| mxVision | 5.0.0 | 封装昇腾计算语言(AscendCL)的高级编程API,简化插件和推理应用开发。 | -| CANN | 7.0.0 | 提供昇腾计算语言(AscendCL)的高级编程API。 | - - diff --git a/contrib/EdgeDetectionPicture/CMakeLists.txt b/contrib/EdgeDetectionPicture/CMakeLists.txt index 3928c17d701784863e6d9b84789407f27010d495..c038f426989abfe0df33a4a95cc2b8a227c48e1b 100644 --- a/contrib/EdgeDetectionPicture/CMakeLists.txt +++ b/contrib/EdgeDetectionPicture/CMakeLists.txt @@ -9,7 +9,13 @@ set(TARGET edge_detection_picture) add_compile_options(-std=c++11 -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(MX_SDK_HOME "$ENV{MX_SDK_HOME}") +set(MX_SDK_HOME /root/SDK/mxVision) + +set(cpprest_DIR ${MX_SDK_HOME}/opensource/lib/libcpprest.so) +if(EXISTS ${cpprest_DIR}) + target_link_libraries(edge_detection_picture cpprest) + add_definitions(_DMX_VERSION_5) +endif() include_directories( ${MX_SDK_HOME}/include diff --git a/contrib/EdgeDetectionPicture/README.md b/contrib/EdgeDetectionPicture/README.md index e00f69a20be355c1a3d718c2da7393cdb64a5338..ec2f72b9981f5b2e53d366181d730b699120c508 100644 --- a/contrib/EdgeDetectionPicture/README.md +++ b/contrib/EdgeDetectionPicture/README.md @@ -2,17 +2,24 @@ # RCF模型边缘检测 ## 1 介绍 + +#### 1.1 简介 本开发样例是基于mxBase开发的端到端推理的C++应用程序,可在昇腾芯片上进行 图像边缘提取,并把可视化结果保存到本地。 其中包含Rcf模型的后处理模块开发。 主要处理流程为: Init > ReadImage >Resize > Inference >PostProcess >DeInit -#### 1.1 支持的产品 +#### 1.2 支持的产品 昇腾310(推理) -#### 1.2 支持的版本 +#### 1.3 支持的版本 本样例配套的CANN版本为7.0.0,MindX SDK版本为5.0.0 MindX SDK安装前准备可参考《用户指南》,[安装教程](https://gitee.com/ascend/mindxsdk-referenceapps/blob/master/docs/quickStart/1-1%E5%AE%89%E8%A3%85SDK%E5%BC%80%E5%8F%91%E5%A5%97%E4%BB%B6.md) +| 软件 | 版本 | 说明 | +| ------------------- | ------------ | ---------------------------- | +| mxVision | 5.0.0 | mxVision软件包 | +| Ascend-CANN-toolkit | 7.0.0 | Ascend-cann-toolkit开发套件包 | + -#### 1.3 代码目录结构与说明 +#### 1.4 代码目录结构说明 本sample工程名称为EdgeDetectionPicture,工程目录如下图所示: ``` @@ -32,16 +39,7 @@ MindX SDK安装前准备可参考《用户指南》,[安装教程](https://git └── License ``` -## 2 环境依赖 -环境依赖软件和版本如下表: - - - -| 软件 | 版本 | 说明 | 获取方式 | -| ------------------- | ------------ | ----------------------------- | ------------------------------------------------------------ | -| mxVision | 5.0.0 | mxVision软件包 | [链接](https://www.hiascend.com/software/Mindx-sdk) | -| Ascend-CANN-toolkit | 7.0.0 | Ascend-cann-toolkit开发套件包 | [链接](https://www.hiascend.com/software/cann/commercial) | -| 操作系统 | Ubuntu 18.04 | 操作系统 | Ubuntu官网获取 | +## 2 设置环境变量 在编译运行项目前,需要设置环境变量: @@ -50,12 +48,11 @@ MindX SDK安装前准备可参考《用户指南》,[安装教程](https://git ``` . {cann_install_path}/ascend-toolkit/set_env.sh . {sdk_install_path}/mxVision/set_env.sh - ``` -## 3 模型转换 +## 3 准备模型 **步骤1** 模型获取 下载RCF模型 。[下载地址](https://mindx.sdk.obs.cn-north-4.myhuaweicloud.com/mindxsdk-referenceapps%20/contrib/EdgeDetectionPicture/model.zip) @@ -120,7 +117,7 @@ vim eval_edge.py (5) 测试精度 ``` shell -python main.py --result_dir path/to/result --gt_dir paht/to/BSR/BSDS500/data/groundTruth/test +python main.py --result_dir path/to/result --gt_dir path/to/BSR/BSDS500/data/groundTruth/test ``` 注: @@ -147,4 +144,12 @@ ModuleNotFoundError: No module named 'impl.toolbox' 方法二: 执行命令: unset PYTHONPATH +``` +### 6.2 检测代码无法修改问题: +问题描述: +修改检测代码中, 出现无法修改问题 + +解决措施: +``` +使用 sudo vim filename进行修改 ``` \ No newline at end of file diff --git a/contrib/EdgeDetectionPicture/rcfDetection/RcfDetection.cpp b/contrib/EdgeDetectionPicture/rcfDetection/RcfDetection.cpp index a8a84460c7a506e8b7cf4d34c0da439da1353074..ab1796d7262ff8d7461b8451a5e55e83e4e2e42e 100644 --- a/contrib/EdgeDetectionPicture/rcfDetection/RcfDetection.cpp +++ b/contrib/EdgeDetectionPicture/rcfDetection/RcfDetection.cpp @@ -39,8 +39,13 @@ void RcfDetection::SetRcfPostProcessConfig(const InitParam &initParam, configData.SetJsonValue("MODEL_TYPE", std::to_string(initParam.modelType)); configData.SetJsonValue("INPUT_TYPE", std::to_string(initParam.inputType)); configData.SetJsonValue("CHECK_MODEL", checkTensor); - auto jsonStr = configData.GetCfgJson().serialize(); - config["postProcessConfigContent"] = jsonStr; + #ifdef MX_VERSION_5 + auto jsonStr = configData.GetCfgJson().serialize(); + config["postProcessConfigContent"] = jsonStr; + #else + auto jsonStr = configData.GetCfgJson(); + config["postProcessConfigContent"] = jsonStr; + #endif } APP_ERROR RcfDetection::Init(const InitParam &initParam) diff --git a/contrib/TSM/README.md b/contrib/TSM/README.md index 7356a5817e95e3b71e646b78bad726b9b8c5f77f..cc2c0f52b1051413f85aabcb1cf15bdf864c869d 100644 --- a/contrib/TSM/README.md +++ b/contrib/TSM/README.md @@ -1,23 +1,30 @@ # TSM视频分类参考设计 ## 1 介绍 -使用TSM模型,基于Kinetics-400数据集,在MindX SDK环境下实现视频分类功能。将测试视频传入脚本进行前处理,模型推理,后处理等功能,最终得到模型推理的精度和性能。 -### 1.1 支持的产品 +### 1.1 简介 +使用TSM模型,在MindX SDK环境下实现视频分类功能。将测试视频传入脚本进行前处理,模型推理,后处理等功能,最终得到模型推理的结果。 -以昇腾Atlas310卡为主要的硬件平台 +### 1.2 支持的产品 -### 1.2 支持的版本 +以昇腾Atlas310卡为主要的硬件平台 -CANN:7.0.RC1 +### 1.3 支持的版本 +环境依赖软件和版本如下表: -SDK:mxVision 5.0.RC3(可通过cat SDK目录下的 version.info 查看) +| 软件名称 | 版本 | +|----------|--------| +| cmake | 3.5+ | +| mxVision | 5.0.RC3 | +| Python | 3.9 | +| torch | 1.10.0 | +| ffmpeg | 4.2.1 | -### 1.3 软件方案介绍 +### 1.4 软件方案介绍 项目主要由离线精度测试文件,在线功能测试文件,离线单视频推理性能测试文件,模型文件,测试数据集预处理文件组成。 -### 1.4 代码目录结构与说明 +### 1.5 代码目录结构与说明 ```text ├── TSM @@ -37,39 +44,19 @@ SDK:mxVision 5.0.RC3(可通过cat SDK目录下的 version.info 查看) ├── speed_gpu.py // 离线单视频推理GPU性能脚本 ``` -### 1.5技术实现流程 - -离线推理流程: - -![离线推理流程](./offline.png) +### 1.6技术实现流程 在线推理流程: ![离线推理流程](./online.png) -### 1.6特性及适用场景 - -离线模型: - -本案例中的 TSM 模型适用于Kinetics数据集中的400类视频分类,并可以返回测试集视频的精度值及单视频识别的种类、性能。 - -在以下两种情况视频分类情况不太好:1. 视频长度过短(小于3s)。 2. 视频帧率过低。 +### 1.7特性及适用场景 在线模型: 本案例中的在线模型适用于26中手势识别,并可以返回识别手势的名称。 -## 2 环境依赖 - -推荐系统为ubuntu 18.04,环境依赖软件和版本如下表 - -| 软件名称 | 版本 | -|----------|--------| -| cmake | 3.5+ | -| mxVision | 5.0.RC3 | -| Python | 3.9 | -| torch | 1.10.0 | -| ffmpeg | 4.2.1 | +## 2 设置环境变量 - 环境变量搭建 @@ -108,194 +95,7 @@ export PATH=/usr/local/ffmpeg/bin:$PATH export LD_LIBRARY_PATH=/usr/local/ffmpeg/lib:$LD_LIBRARY_PATH ``` -## 3 离线推理 - -**步骤1** Kinetics-400数据集下载 - -参考[Kinetics-400 数据准备](https://github.com/PaddlePaddle/PaddleVideo/blob/develop/docs/zh-CN/dataset/k400.md#%E4%B8%8B%E8%BD%BDvideo%E6%95%B0%E6%8D%AE)中的脚本下载操作,在代码根目录的"download_data"目录下准备"download.sh"数据集下载脚本和"val_link.list"验证集链接列表文件。 - -```text -├── TSM - ├── download_data - ├── download.sh // 下载数据集脚本 - ├── k400_extractor.sh // 解压数据集脚本 - ├── val_link.list -``` - -进入代码根目录的"download_data"目录下,执行以下命令下载数据集压缩包val_part1.tar、val_part2.tar、val_part3.tar: - -```Shell -bash download.sh val_link.list -``` - -然后执行以下命令解压数据集到代码根目录下: - -```Shell -bash k400_extractor.sh -``` - -数据集结构如下: - -```text -├── TSM - ├── data - ├── abseiling - ├── air_drumming - ├── ... - ├── zumba -``` - -**步骤2** 数据集预处理 - -1、视频抽帧 - -在代码根目录执行以下命令创建所需目录: - -```Shell -mkdir tools -mkdir ops -``` - -下载[“temporal-shift-module-master.zip”](https://github.com/mit-han-lab/temporal-shift-module/tree/master)代码包并上传服务器解压,将代码包中"tools"目录下的"vid2img_kinetics.py"、"gen_label_kinetics.py"、"kinetics_label_map.txt"三个文件拷贝至参考设计代码根目录的“tools”目录下。 - -```text -├── TSM - ├── tools - ├── gen_label_kinetics.py // label生成脚本 - ├── vid2img_kinetics.py // 视频抽帧脚本 - ├── kinetics_label_map.txt -``` - -将代码包中"ops"目录下的"basic_ops.py"、"dataset.py"、"dataset_config.py"、"models.py"、"temporal_shift.py"、"transforms.py"六个文件拷贝至参考设计代码根目录的“ops”目录下。 - -```text - ├── ops - ├── basic_ops.py - ├── dataset.py // 数据集构建脚本 - ├── dataset_config.py // 数据集配置脚本 - ├── models.py // 模型搭建脚本 - ├── temporal_shift.py - ├── transforms.py -``` - -修改“tools”目录下的 vid2img_kinetics.py 内容,将77、78行注释。 - -```text - -77行 #class_name = 'test' -78行 #class_process(dir_path, dst_dir_path, class_name) - -``` - -在参考设计代码根目录下,执行以下命令对数据集视频进行抽帧并生成图片: - -```shell -mkdir dataset -cd ./tools -python3 vid2img_kinetics.py [video_path] [image_path] -e.g. -python3 vid2img_kinetics.py ../data ../dataset/ -``` - -修改“tools”目录下gen_label_kinetics.py 内容。 - -```text - -# 11行 dataset_path = '../dataset' # 放视频抽帧后的图片路径 -# 12行 label_path = '../label' # 存放label路径 -# 25行 files_input = ['kinetics_val.csv'] -# 26行 files_output = ['val_videofolder.txt'] -# 37行 folders.append(items[1]) -# 57行 output.append('%s %d %d'%(os.path.join('../dataset/',os.path.join(categories_list[i], curFolder)), len(dir_files), curIDX)) - -``` - -在“tools”目录下,执行以下命令生成标签文件: - -```shell -python3 gen_label_kinetics.py -``` - -**步骤3** 模型转换 - -下载[离线模型](https://mindx.sdk.obs.cn-north-4.myhuaweicloud.com/mindxsdk-referenceapps%20/contrib/TSM/offline_models.zip) TSM.onnx, 将下载好的模型放在“${TSM代码根目录}/model”目录下。 - -将模型转换为om模型,在“model”目录下,执行以下命令生成om模型 - -```shell -bash onnx2om.sh -``` - -**步骤4** 精度测试 - -修改${TSM代码根目录}/ops/dataset_config.py 脚本中参数root_data、filename_imglist_train和filename_imglist_val,若仅进行离线精度测试则可忽略filename_imglist_train设置。 - -```shell -import os - -ROOT_DATASET = './labels/' # 标签文件所在路径 - -... - -def return_kinetics(modality): - filename_categories = 400 - if modality == 'RGB': - root_data = ROOT_DATASET # 训练集根目录 - filename_imglist_train = 'train_videofolder.txt' # 训练数据集标签 - filename_imglist_val = 'val_videofolder.txt' # 测试数据集标签 - prefix = 'img_{:05d}.jpg' - else: - raise NotImplementedError('no such modality:' + modality) - return filename_categories, filename_imglist_train, filename_imglist_val, root_data, prefix -``` - -在参考设计代码根目录下,运行精度测试脚本 - -```shell -python3 offline_infer.py kinetics -``` - -原模型精度值为71.1%,实测精度值为71.01%,符合精度偏差范围,精度达标。 - -**步骤5** 性能测试 - -将用来测试的单视频放在参考设计代码根目录下,如视频“test_speed.mp4”,运行性能测试脚本 - -修改speed_gpu.py与speed.py参数,'./test_speed.mp4'为测试视频,测试视频类别需在Kinetics-400数据集的400个种类内且视频长度至少为3s。 - -```python -def main(): - cmd = 'ffmpeg -i \"{}\" -threads 1 -vf scale=-1:331 -q:v 0 \"{}/img_%05d.jpg\"'.format('./test_speed.mp4', './image') - subprocess.call(cmd, shell=True, - stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) - files = os.listdir(r"./image/") -``` - -GPU性能(Tesla_V100S_PCIE_32GB) - -在参考设计代码根目录下,运行GPU性能测试脚本 - -```shell -python3 speed_gpu.py kinetics --test_segments=8 --test_crops=1 --batch_size=1 -``` - -注:speed_gpu.py脚本需在GPU环境上运行,NPU环境无法运行。 - -得到单视频纯推理性能为0.08sec/video - -SDK性能 - -在参考设计代码根目录下,运行SDK性能测试脚本 - -```shell -python3 speed.py -``` - -注:speed.py脚本需在NPU环境上运行。 - -得到单视频纯推理性能为0.189sec/video - -## 4 在线推理 +## 3 在线推理 **步骤1** 安装[视频流工具](https://gitee.com/ascend/docs-openmind/blob/master/guide/mindx/sdk/tutorials/reference_material/Live555%E7%A6%BB%E7%BA%BF%E8%A7%86%E9%A2%91%E8%BD%ACRTSP%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3.md) diff --git a/tutorials/DvppWrapperSample/README.md b/tutorials/DvppWrapperSample/README.md index ce28629639554f0c26d40f03bfcda031a494a9f3..f2a780367a26851b74c0a1bc5e4030c214d3116e 100644 --- a/tutorials/DvppWrapperSample/README.md +++ b/tutorials/DvppWrapperSample/README.md @@ -1,16 +1,10 @@ # DvppWrapper接口样例 -## 介绍 +## 1 介绍 提供DvppWrapper接口样例,对图片实现编码,解码,缩放,抠图,以及把样例图片编码为264视频文件。 -## 准备 -打开百度图片https://image.baidu.com/,输入任何关键字,然后搜索,右击任意图片,点击另存为。把图片保存在DvppWrapperSample目录下。 - -## 编译与运行 -**步骤1** 修改CMakeLists.txt文件 将set(MX_SDK_HOME ${SDK安装路径}) 中的${SDK安装路径}替换为实际的SDK安装路径 - -**步骤2** 设置环境变量 +## 2 设置环境变量 ASCEND_HOME Ascend安装的路径,一般为/usr/local/Ascend LD_LIBRARY_PATH 指定程序运行时依赖的动态库查找路径 ``` @@ -20,15 +14,20 @@ export ARCH_PATTERN=. export LD_LIBRARY_PATH=${MX_SDK_HOME}/lib/modelpostprocessors:${MX_SDK_HOME}/lib:${MX_SDK_HOME}/opensource/lib:${MX_SDK_HOME}/opensource/lib64:/usr/local/Ascend/driver/lib64:/usr/local/Ascend/ascend-toolkit/latest/acllib/lib64:/usr/local/Ascend/ascend-toolkit/latest/acllib/lib64:${LD_LIBRARY_PATH} ``` -**步骤3** cd到DvppWrapperSample目录下,执行如下编译命令: +## 3 准备模型 +打开百度图片https://image.baidu.com/,输入任何关键字,然后搜索,右击任意图片,点击另存为。把图片保存在DvppWrapperSample目录下。 + +## 4 编译与运行 +**步骤1** 修改CMakeLists.txt文件 将set(MX_SDK_HOME ${SDK安装路径}) 中的${SDK安装路径}替换为实际的SDK安装路径 + +**步骤2** cd到DvppWrapperSample目录下,执行如下编译命令: ``` mkdir build cd build cmake .. make ``` - -**步骤4** cd到DvppWrapperSample目录下,可看到可执行文件DvppWrapperSample, 实行命令: +**步骤3** cd到DvppWrapperSample目录下,可看到可执行文件DvppWrapperSample, 实行命令: ``` ./DvppWrapperSample ./保存的图片 ```