From 441d92123bfab7d9a03b759d50d1be8bd07cd5ce Mon Sep 17 00:00:00 2001 From: anan505 <1204828624@qq.com> Date: Mon, 25 Nov 2024 11:54:04 +0000 Subject: [PATCH 1/5] =?UTF-8?q?=E6=96=B0=E5=BB=BA=20result?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contrib/RemoteSensingSegmentation/result/.keep | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 contrib/RemoteSensingSegmentation/result/.keep diff --git a/contrib/RemoteSensingSegmentation/result/.keep b/contrib/RemoteSensingSegmentation/result/.keep new file mode 100644 index 000000000..e69de29bb -- Gitee From 1fd439ae5420c8b9d4ff21f1f63fadfb6b7bb613 Mon Sep 17 00:00:00 2001 From: anan505 <1204828624@qq.com> Date: Mon, 25 Nov 2024 11:57:39 +0000 Subject: [PATCH 2/5] =?UTF-8?q?=E6=96=B0=E5=BB=BA=20final?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contrib/RemoteSensingSegmentation/result/final/.keep | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 contrib/RemoteSensingSegmentation/result/final/.keep diff --git a/contrib/RemoteSensingSegmentation/result/final/.keep b/contrib/RemoteSensingSegmentation/result/final/.keep new file mode 100644 index 000000000..e69de29bb -- Gitee From 4df01f6d0f8fa49be3deaa5efbfeff8c6744f9a4 Mon Sep 17 00:00:00 2001 From: anan505 <1204828624@qq.com> Date: Mon, 25 Nov 2024 11:57:57 +0000 Subject: [PATCH 3/5] =?UTF-8?q?=E6=96=B0=E5=BB=BA=20temp=5Fresult?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contrib/RemoteSensingSegmentation/result/temp_result/.keep | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 contrib/RemoteSensingSegmentation/result/temp_result/.keep diff --git a/contrib/RemoteSensingSegmentation/result/temp_result/.keep b/contrib/RemoteSensingSegmentation/result/temp_result/.keep new file mode 100644 index 000000000..e69de29bb -- Gitee From 00146bfb3a1fc11b50ffdafbccd21da28c305c95 Mon Sep 17 00:00:00 2001 From: anan505 <1204828624@qq.com> Date: Tue, 26 Nov 2024 02:10:34 +0000 Subject: [PATCH 4/5] update contrib/RemoteSensingSegmentation/README.md. Signed-off-by: anan505 <1204828624@qq.com> --- contrib/RemoteSensingSegmentation/README.md | 158 ++++++++++---------- 1 file changed, 77 insertions(+), 81 deletions(-) diff --git a/contrib/RemoteSensingSegmentation/README.md b/contrib/RemoteSensingSegmentation/README.md index 78f24b85a..9b2b2fe67 100644 --- a/contrib/RemoteSensingSegmentation/README.md +++ b/contrib/RemoteSensingSegmentation/README.md @@ -1,29 +1,51 @@ -## SDK 遥感影像地块分割检测样例 +# 遥感影像地块分割 ## 1 介绍 -使用DANet和Deeplabv3+,其中两模型均使用了pytorch官方提供的resnet101预训练模型作为backbone,使用SGDR对模型进行训练,选择多个局部最优点的结果进行集成,输出输入图像的语义分割图 \ -样例输入:一张256*256的遥感影像地图\ -样例输出:输入图片的语义分割图 +### 1.1 简介 +本开发样例基于MindX SDK实现了对遥感影像地图进行的语义分割能力,并以可视化的形式返回输出。 -### 1.1 支持的产品 -昇腾310(推理) +本样例使用DANet和Deeplabv3+,其中两模型均使用了pytorch官方提供的resnet101预训练模型作为backbone, +使用SGDR对模型进行训练,选择多个局部最优点的结果进行集成。 -### 1.2 支持的版本 -本样例配套的CANN版本为 [7.0.rc1](https://www.hiascend.com/software/cann/commercial) ,MindX SDK版本为 [5.0.rc3](https://www.hiascend.com/software/Mindx-sdk) 。 -### 1.3 目录结构 +### 1.2 支持的产品 + +本项目支持昇腾Atlas 300I pro、 Atlas 300V pro + +### 1.3 支持的版本 +本样例配套的MxVision版本、CANN版本、Driver/Firmware版本如下所示: + +| MxVision版本 | CANN版本 | Driver/Firmware版本 | +| --------- | ------------------ | -------------- | +| 6.0.RC3 | 8.0.RC3 | 24.1.RC3 | + +### 1.4 三方依赖 + +第三方依赖软件和版本如下表。请确认环境已安装pip3后,使用pip3 install * 安装以下依赖。 + +| 软件名称 | 版本 | +|------------------------|-----------| +| numpy | 1.24.0 | +| opencv-python-headless | 4.10.0.84 | +| Pillow | 9.4.0 | + + +### 1.5 代码目录结构说明 + +本代码仓名称为RemoteSensingSegmentation,工程目录如下图所示: + ``` |--RemoteSensingSegmentation |-------- config | |---- configure.cfg // 模型转换配置文件 -|-------- models // 模型存放文件目录(自行创建) +|-------- models // 模型存放文件目录(需要用户创建) +|-------- test_set // 测试集图像目录(需要用户自行创建) +| |---- *.jpg // 15张jpg格式的测试集遥感图片(需要用户下载) |-------- pipeline | |---- segmentation.pipeline // 遥感影像地块分割的pipeline文件 -|-------- result // 语义分割结果存放处(自行创建) +|-------- result // 语义分割结果存放处 | |---- final // 对比结果图存放目录,对比结果图(左为输入原图 右为结果图) | |---- temp_result // 单一结果图存放目录,仅有单一结果图 -|-------- test_set // 测试集图像目录(自行创建) -| |---- *.jpg // 15张jpg格式的测试集遥感图片 |-------- util | |---- model_conversion.sh // 模型转换脚本 *.onxx -> *.om | |---- transform_model_util.py // 模型转换工具 *.pth -> *.onxx @@ -32,94 +54,68 @@ |-------- README.md // ReadMe ``` -## 2 模型转换 -### 2.1 准备工作 +### 1.6 相关约束 -**步骤1** 下载预训练模型权重文件 `37_Deeplabv3+_0.8063.pth`和`84_DANet_0.8081.pth`[链接](https://mindx.sdk.obs.cn-north-4.myhuaweicloud.com/mindxsdk-referenceapps%20/contrib/RemoteSensingSegmentation/models.zip) +输入的遥感影像地图仅支持大小为256*256的jpg文件。 -**步骤2** 将获取到的`37_Deeplabv3+_0.8063.pth`和`84_DANet_0.8081.pth`分别转换为 `Deeplabv3.onnx`和`DANet.onnx`(步骤1链接中已包含转换后的`onxx`格式模型,可直接跳到步骤2.5) -**步骤2.1** 需要在原项目模型源码基础上进行`*.pth->*.onxx`转换, 所以思路是在`PyCharm`中把项目克隆下来并安装环境,运行转换工具。首先使用 git 克隆[GitHub项目](https://github.com/JasmineRain/NAIC_AI-RS) 到本地 - -**步骤2.2** 安装`Anaconda`并创建一个虚拟环境,且`pip install -r requirements.txt`安装项目所需环境依赖, 并额外安装依赖`onnx == 1.8.0` +## 2. 设置环境变量 ```bash -conda create -n 虚拟环境名 python=3.9.2 -conda activate 虚拟环境名 -cd 克隆项目的目录 -# 运行前修改requiremenst.txt版本: -# 改四个地方:mkl-random==1.2.1, tensorboard-plugin-wit==1.7.0, torch==1.8.0, torchvision==0.9.0 -# 新增一行:在文件末增加 onnx==1.8.0, 额外安装依赖onnx -pip install -r requiremenst.txt #安装依赖,可能会因为网络问题而报错,多运行几次 -# 安装好后在pycharm工具里面选择使用创建的虚拟环境(settings->Python Interpreter) +#设置CANN环境变量 +. ${install_path}/set_env.sh + +#设置MindX SDK 环境变量,SDK-path为mxVision SDK 安装路径 +. ${SDK-path}/set_env.sh ``` -**步骤2.3** 把`37_Deeplabv3+_0.8063.pth`和`84_DANet_0.8081.pth`复制到克隆项目`models`目录下 -**步骤2.4** 把`transform_model_util.py`复制到克隆项目`根目录`下并执行 +## 3. 准备模型 -**步骤2.5** 步骤2.4执行完成后会在克隆项目`models`目录下生成`DANet.onnx`和`Deeplabv3.onnx`,复制到本项目`models`下执行步骤3 +**步骤1** 通过[链接](https://mindx.sdk.obs.cn-north-4.myhuaweicloud.com/mindxsdk-referenceapps%20/contrib/RemoteSensingSegmentation/models.zip)下载模型文件包`models.zip`,并放在项目根目录`RemoteSensingSegmentation/`下。 -**步骤3** 在本项目`util`目录下运行模型转换脚本 `./model_conversion.sh`(如不是可执行脚本,先将其转换`chmod +x model_conversion.sh`), 执行完模型转换脚本后,会在`models`目录下生成相应的DANet和Deeplabv3的`om`模型文件 +**步骤2** 通过`unzip`解压模型包,可在项目根目录`RemoteSensingSegmentation/`下找到文件夹`models`, +文件夹内应该有文件`DANet.onnx`与`Deeplabv3.onnx`。 -模型转换使用了ATC工具,如需更多信息请参考: +**步骤3** 转换模型 - 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 +在`RemoteSensingSegmentation/util`目录下运行模型转换脚本: -### 2.2 pipeline配置 +1. 如不是可执行脚本,先将其转换`chmod +x model_conversion.sh` +2. 转换格式:`dos2unix model_conversion.sh` +3. 执行脚本`./model_conversion.sh` -**步骤1** [segmentation.pipeline](./pipeline/segmentation.pipeline) 中配置 `DANet.om`和`Deeplabv3.om`模型路径(已配置) -``` -"mxpi_tensorinfer0": { - "props": { - "dataSource": "mxpi_imageresize0", - "modelPath": "models/DANet.om" - }, - "factory": "mxpi_tensorinfer", - "next": "mxpi_tensorinfer1" -}, -"mxpi_tensorinfer1": { - "props": { - "dataSource": "mxpi_imageresize0", - "modelPath": "models/Deeplabv3.om" - }, - "factory": "mxpi_tensorinfer", - "next": "appsink0" -}, +执行成功后终端输出为: +```bash +ATC start working now, please wait for a moment. +.... +ATC run success, welcome to the next use. + +ATC start working now, please wait for a moment. +... +ATC run success, welcome to the next use. ``` +并且在`RemoteSensingSegmentation/models/`下可以找到文件`DANet.om`与`Deeplabv3.om`。 -## 3 模型推理 +## 4 运行 -### 3.1 配置MindXSDK和Python环境变量 +**步骤1** 准备数据集 + +请下载 [测试集图片](https://mindx.sdk.obs.cn-north-4.myhuaweicloud.com/mindxsdk-referenceapps%20/contrib/RemoteSensingSegmentation/data.zip), +并放在项目根目录`RemoteSensingSegmentation/`下解压: ```bash -# 执行如下命令,打开.bashrc文件 -cd $HOME -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 -PYTHONPATH=${MX_SDK_HOME}/python - -# 保存退出.bashrc文件 -# 执行如下命令使环境变量生效 -source ~/.bashrc - -# 查看环境变量 -env +unzip data.zip ``` -### 3.2 运行 -> 运行前请下载 [测试集图片](https://mindx.sdk.obs.cn-north-4.myhuaweicloud.com/mindxsdk-referenceapps%20/contrib/RemoteSensingSegmentation/data.zip) 放入目录`test_set`下, 随后进入工程目录,键入执行指令 -```bash -# 进入工程目录 -cd RemoteSensingSegmentation +解压后能在根目录下找到文件夹`test_set`,内有15张符合输入格式要求的jpg遥感地图图片文件。 -# 图片测试集在test_set目录下,一共15张遥感地图 +**步骤2** 在工程目录`RemoteSensingSegmentation/`下执行: +```bash python3 main.py ${测试图片路径} ${是否开启对比图输出} ${输出结果路径} e.g.: python3 main.py test_set/test_1.jpg True result/final/result.jpg ``` +**步骤3** 查看结果 -### 3.3 查看结果 -``` -运行完毕后, 如果开启了对比图输出, 对比图结果保存在工程目录result/final下中, 单一结果图保存在工程目录result/temp_result下,若没有开启对比图输出,仅有单一结果图输出 -``` \ No newline at end of file +如果开启了对比图输出,运行完毕后, +带有原图的对比图结果保存在目录`RemoteSensingSegmentation/result/final/`下, +单一结果图保存在目录`RemoteSensingSegmentation/result/temp_result/`下。 + +若没有开启对比图输出,运行完毕后, 只有单一结果图保存在目录`RemoteSensingSegmentation/result/temp_result/`下。 -- Gitee From 4e0cdb16ec24a3e068688bc6edf2b8cc09f3d4c9 Mon Sep 17 00:00:00 2001 From: anan505 <1204828624@qq.com> Date: Tue, 26 Nov 2024 02:11:41 +0000 Subject: [PATCH 5/5] update contrib/RemoteSensingSegmentation/util/model_conversion.sh. Signed-off-by: anan505 <1204828624@qq.com> --- contrib/RemoteSensingSegmentation/util/model_conversion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/RemoteSensingSegmentation/util/model_conversion.sh b/contrib/RemoteSensingSegmentation/util/model_conversion.sh index 0e596b1ea..b0ca22207 100644 --- a/contrib/RemoteSensingSegmentation/util/model_conversion.sh +++ b/contrib/RemoteSensingSegmentation/util/model_conversion.sh @@ -33,8 +33,8 @@ export ASCEND_OPP_PATH=${install_path}/opp # 执行,转换DANet和Deeplabv3+模型 # Execute, transform DANet and Deeplabv3+ model -atc --framework=5 --model=../models/DANet.onnx --output=../models/DANet --soc_version=Ascend310 --insert_op_conf=../config/configure.cfg --log=error -atc --framework=5 --model=../models/Deeplabv3.onnx --output=../models/Deeplabv3 --soc_version=Ascend310 --insert_op_conf=../config/configure.cfg --log=error +atc --framework=5 --model=../models/DANet.onnx --output=../models/DANet --soc_version=Ascend310P3 --insert_op_conf=../config/configure.cfg --log=error +atc --framework=5 --model=../models/Deeplabv3.onnx --output=../models/Deeplabv3 --soc_version=Ascend310P3 --insert_op_conf=../config/configure.cfg --log=error # 退出 # exit exit 0 \ No newline at end of file -- Gitee