• [MindX SDK] 行人重识别v2案例分享
    MindX SDK -- 基于python V2接口的行人重识别1 案例概述1.1 概要描述本开发样例基于MxBase V2接口实现了端到端的行人重识别(Person Re-identification, ReID),支持检索给定照片中的行人ID。其主要流程为:程序入口分别接收查询图片和行人底库所在的文件路径。对于查询图片:利用目标检测模型YOLOv3推理,检测图片中的行人,检测结果经过抠图与调整大小,再利用ReID模型提取图片中每个行人的特征向量。对于行人底库:将底库图片调整大小,利用ReID模型提取相应的特征向量。行人检索:将查询图片中行人的特征向量与底库中的特征向量,为每个查询图片中的行人检索最有可能的ID,通过识别框和文字信息进行可视化标记。案例获取地址:cid:link_71.2 模型介绍V1版本链接:cid:link_8ReID论文地址:cid:link_12ReID代码地址:cid:link_111.3 实现流程及流程图1.3.1 实现流程1、基础环境:Ascend 310、MindXSDK 、Ascend-CANN-toolkit 2、模型获取:通过链接下载已经转好的om模型 3、数据集准备:获取文件相关依赖后,运行转换脚本得到标签数据及噪声数据 3、业务流程编排与配置 4、python推理流程代码开发 5、V2接口python推理流程代码开发1.3.2 流程图介绍本方案采用Yolov3+ReID模型,按照行人检索+行人检索的方式实现行人重识别功能。首先,给定需要查询的行人图像(即行人底库,记为Query),利用ReID模型推理得到其特征矩阵;然后对于给定的图像库,利用Yolov3模型推理检测出每个图像中的所有行人(记为Gallery),再利用ReID模型推理得到的所有行人的特征矩阵;进一步,计算两个特征矩阵的距离,将每个Gallery特征距离最近的Query作为去识别结果;最后,将用一张场景图像中所有Gallery的识别结果去重,并在图像上可视化,流程图如下图所示:1.4 特性及适用场景1) 与人脸识别结合 ReID 技术和人脸的技术可以做一个补充,当能看到人脸的时候用人脸的技术去识别,当看不到人脸的时候用 ReID 技术去识别,可以延长行人在摄像头连续跟踪的时空延续性. 2) 智能安防 假如我已经知道某个嫌疑犯的照片ReID 根据嫌疑犯照片,去监控视频库里去收集嫌疑犯出现的视频段. 3) 智能商业-无人超市 无人超市也有类似的需求,无人超市不只是体验优化,它还要了解用户的购物行为,因为如果只基于人脸来做,很多时候是拍不到客户的正面,ReID 这个技术在无人超市的场景下有非常大的应用帮助。 4) 相册聚类 现在拍照时,可以把相同人的照片聚在一起,方便大家去管理,这也是一个具象的应用场景。 ...2 软件方案介绍2.1 项目方案架构介绍本系统设计了不同的功能模块。主要流程为:jpg文件转为image类型传入流/V2接口中,利用VDSR的图像生成模型,利用python的第三方图像处理库PIL将低分辨率的输入图像和超分辨率重建的结果一同可视化。各模块功能描述如表2.1所示:表2.1 系统方案中各模块功能:V1:序号子系统功能描述1数据输入调用MindX SDK的appsrc输入image数据2推理调用MindX SDK的mxpi_tensorinfer,对输入的张量进行推理3输出推理好得到的tensor取出来4结果保存利用python的第三方图像处理库PIL将识别框和文字信息进行可视化V2:序号子系统功能描述1数据输入调用MindX SDK pythonV2接口的imageProcessor类输入image数据2推理调用MindX SDK pythonV2接口的model类,对输入的张量进行推理3抠图调用MindX SDK pythonV2接口中imageProcessor类的crop_risize,对输入的图像进行抠图处理4输出推理好得到的tensor取出来5结果保存利用python的第三方图像处理库PIL将识别框和文字信息进行可视化2.2 代码目录结构与说明本工程名称为ReIDv2,工程目录如下图所示:ReIDv2 |---- data | |---- gallerySet // 查询场景图片文件夹 | |---- querySet // 行人底库图片文件夹 |---- image | |---- V1_running_time.jpg // V1运行时间图片 | |---- V2_running_time.jpg // V2运行时间图片 |---- models // 目标检测、ReID模型与配置文件夹 | |---- yolov3.cfg | |---- coco.names | |---- ReID_pth2onnx.cfg |---- result // 结果保存文件夹 | |---- locationv1 // V1接口坐标保留文档 |---- mainv2.py |---- README.md 3 开发准备3.1 环境依赖说明软件名称版本ubantu 18.0418.04.5CANN5.1 RC1MindX SDK3.0RC3Python3.9.12numpy1.23.4opencv_python4.6.0.66apt-get install libpython3.93.2 模型转换行人重识别先采用了yolov3模型将图片中的行人检测出来,然后利用ReID模型获取行人的特征向量。由于yolov3模型和ReID模型分别是基于Pytorch和Tensorflow的深度模型,我们需要借助ATC工具分别将其转换成对应的.om模型。3.2.1 yolov3的模型转换:步骤1 获取yolov3的原始模型(.pb文件)和相应的配置文件(.cfg文件)      原始模型下载链接       配置文件下载链接步骤2 将获取到的yolov3模型.pb文件和.cfg文件存放至:“项目所在目录/models”步骤3 .om模型转换在编译运行前,需要设置环境变量:在项目路径下运行#在CANN以及MindX SDK的安装目录找到set_env.sh,并运行脚本: bash ${SDK安装路径}/set_env.sh bash ${CANN安装路径}/set_env.sh使用ATC将.pb文件转成为.om文件atc --model=yolov3_tensorflow_1.5.pb --framework=3 --output=yolov3 --output_type=FP32 --soc_version=Ascend310 --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" --log=info --insert_op_conf=aipp_nv12.cfg执行完模型转换脚本后,若提示如下信息说明模型转换成功,可以在该路径下找到名为yolov3.om模型文件。 (可以通过修改output参数来重命名这个.om文件)ATC run success, welcome to the next use.3.2.2 ReID的模型转换步骤1 .pth模型转.onnx模型1 从GitHub上拉取ReID模型源代码,在“项目所在目录/models”路径下输入:git clone cid:link_11此时会出现“项目所在目录/models/reid-strong-baseline”路径,路径内是ReID模型的源代码2 获取.pth权重文件,将该.pth权重文件放在“项目所在目录/models”路径下文件名:market_resnet50_model_120_rank1_945.pth      Google Drive       Huawei Cloud3 获取ReID_pth2onnx.py:获取链接  将该脚本放在“项目所在目录/models”路径下,执行下列命令,生成.onnx模型文件python3 ReID_pth2onnx.py --config_file='reid-strong-baseline/configs/softmax_triplet_with_center.yml' MODEL.PRETRAIN_CHOICE "('self')" TEST.WEIGHT "('market_resnet50_model_120_rank1_945.pth')"注意目前ATC支持的onnx算子版本为11此时在“项目所在目录/models”路径下会出现ReID.onnx模型,到此步骤1已完成如果在线环境中无法安装pytorch,你可以在本地环境中进行上述.pth模型转.onnx模型操作,然后将得到的.onnx模型放在“项目所在目录/models”即可步骤2 .onnx模型转.om模型1 设置环境变量请重复一次4.1中步骤3的“设置环境变量(请确认install_path路径是否正确)”操作2 使用ATC将.onnx文件转成为.om文件atc --framework=5 --model=ReID.onnx --output=ReID --input_format=NCHW --input_shape="image:1,3,256,128" --insert_op_conf=ReID_onnx2om.cfg --log=debug --soc_version=Ascend310执行完模型转换脚本后,若提示如下信息说明模型转换成功,可以在“项目所在目录/models”路径下找到名为ReID.om模型文件。(同样的,可以通过修改output参数来重命名这个.om文件)ATC run success, welcome to the next use.经过上述操作,可以在“项目所在目录/models”找到yolov3.om模型和ReID.om模型,模型转换操作已全部完成3.3.3 参考链接模型转换使用了ATC工具,如需更多信息请参考:ATC模型转换-快速入门Yolov3模型转换的参考链接:ATC yolov3-tiny(FP16)ReID模型转换的参考链接:ATC ReID (FP16)3.3 数据集3.3.1 Market1501数据集文件名:Market-1501-v15.09.15.zip3.1.1.1 行人底库请解压“Market-1501-v15.09.15.zip”文件,在“Market-1501-v15.09.15\Market1501\gt_bbox”中选择想要查询的行人图片,将图片放在“项目所在目录/data/querySet”中推荐每次查询1人,使用2-6张图片作为底库,效果较好如需要查询多人,请保证待查询行人之间的着装风格差异较大,否则会较容易出现误报该项目需要为每张图片提取行人ID,行人图片的命名格式为'0001(行人ID)_c1(相机ID)s1(录像序列ID)_000151(视频帧ID)_00(检测框ID).jpg'3.1.1.2 场景图片数据集这里使用的是market1501中的部分场景图片数据,来源于 Person Search Demo ,也可以通过Huawei Cloud 获取,然后将获取的图片放在“项目所在目录/data/gallerySet”中 (gallery下的图片必须是1920*1080大小的jpg)python3 makeYourOwnDataset.py --imageFilePath='data/ownDataset' --outputFilePath='data/cropOwnDataset'步骤3 根据“项目所在目录/data/cropOwnDataset”中的结果,选择自己想要查询的行人,按照market1501的命名方式命名(请务必按照这种命名方式命名,否则行人的标识会出现问题)将同一个行人的不同照片重命名成“xxxx_xx”,其中前4位是行人ID,后2位是该照片ID,例:第1个行人的第2张照片:0001_02将制作好的行人底库图片放在“项目所在目录/data/querySet”中4 推理流程开发实现4.1 V2接口插件包含 decode # 图像解码 resize # 图像缩放 infer # 模型推理 crop_risize # 抠图与缩放4.2 主程序开发包含1、初始化V2接口。2、图像解码。3、图像缩放。4、模型推理。5、抠图6、获取特征矩阵7、后处理结果可视化5 编译与运行5.1 V2接口运行5.1.1 执行python3 mainv2.py --queryFilePath='data/querySet' --galleryFilePath='data/gallerySet' --matchThreshold=0.3 (matchThreshold为设定阈值,可以根据需求更改)matchThreshold是行人重定位的阈值,默认值是0.3,可根据行人底库的数量进行调整请注意这个阈值单位是距离单位,并不是比例阈值对market1501数据集,建议的范围是0.2~0.4之间5.1.2 查看结果执行`mainv2.py`文件后,可在“项目所在目录/result”路径下查看结果。5.2 性能说明操作:V1接口与V2接口各跑五次,统计平均接口运行时间:(此处分别附一张结果图供参考)V1平均用时:3.334594 V2平均用时:2.3213328 结论:没有误测少测,功能通过,性能相对V1有所提升5.3 精度验证分别对V1与V2使用多组相同行人底库与场景图片测试: 1、输入1张图片 输入1张目标行人正面图片,16张场景检测图片:V2得到的识别框和文字信息与V1一致 输入1张目标行人侧面图片,16张场景检测图片:V2得到的识别框和文字信息与V1一致 输入1张目标行人背面图片,16张场景检测图片:V2得到的识别框和文字信息与V1一致 输入1张目标行人背面图片,更改不同阈值进行测试:V2得到的识别框和文字信息与V1一致 输入1张未出现人物的图片,16张场景检测图片:V2得到的识别框和文字信息与V1一致 2、输入2张图片 输入目标行人正背2张图片,16张场景检测图片:V2得到的识别框和文字信息与V1一致 3、输入三张图片 输入目标人物正侧背三张图片,16张场景检测图片:V2得到的识别框和文字信息与V1一致 (可以根据自己需求输入合适的图片进行测试) 结论:V2接口与V1接口精度对齐6 常见问题6.1 路径问题问题描述:提示 The query does not exist解决方案:输入图片或数据集不存在,检查输入路径是否正确。6.2 格式问题问题描述:提示input image only support jpg.解决方案:将输入图片更换为jpg格式图片。
  • [MindX SDK] 二维码风格化迁移
    二维码风格化迁移1 案例概述1.1 概要描述在本系统中,目的是基于 MindX SDK 和 MindSpore 框架,在昇腾平台上,开发端到端二维码风格化迁移的参考设计,在保证扫码软件能正确扫码的条件下,对黑白二维码实现色彩化风格迁移的功能,达到功能要求。1.2 模型结构该论文通过模拟二维码采样网络层和虚拟读码器实现了风格化二维码图像的任务,模型的总体流程如下图所示。其中,模型结构如下:(1)VGG-16 网络:用于提取输入风格图像、输入内容图像和生成风格化二维码图像的深度特征。(2)模拟采样层:如下图所示,通过将卷积核权重设置为标准高斯分布,长宽与二维码分块标准一致,符合二维码采样过程中“越靠近分块中心的点越容易被采样”的原则,将二维码采样过程拟合为卷积操作。(3)虚拟读码器:如下图所示,用于比较风格化二维码与真实二维码读码结果,如果读码结果正确则继续美化风格和样式;如果不正确则考虑鲁棒性。(4)损失函数:模型使用了三个损失函数,分别用于约束图像风格、图像内容和读码精确度,分别对应公式 (1),公式 (2) 和公式 (3)。其中 $L_s$ 为输入风格图像;$L_c$ 为输入内容图像;$Q$ 为生成的二维码图像;$C, H, W$ 为对应图像的尺寸;$f$ 为 VGG-16 网络生成的深度特征图像;$G$ 为用于风格迁移任务的格拉姆矩阵变换;$L_{code}^{M_k}$ 为虚拟读码器对不同分块的读码结果,相同为 $0$。$$ L_{\text {style }}\left(I_s, Q\right)=\frac{1}{C_s H_s W_s}\left|G\left[f_s\left(I_s\right)\right]-G\left[f_s(Q)\right]\right|_2^2 \tag{1}\ $$$$ L_{\text {content }}\left(I_c, Q\right)=\frac{1}{C_c H_c W_c}\left|f_c\left(I_c\right)-f_c(Q)\right|_2^2 \tag{2} \ $$$$ L_{\text {code }}=\sum_{M_k \in Q} L_{\text {code }}^{M_k} \tag{3} $$1.3 模型介绍本项目主要用到了两个模型,分别是:用于图像特征提取的模型 VGG-16 和用于模拟二维码扫码的 SSLayer 模型。VGG-16 模型的相关文件可在此处下载:cid:link_1SSLayer 模型参数固定,内嵌于代码中,在初始化模型时指定所使用的公开数据集可以在此处下载:cid:link_01.4 实现流程实现流程如下:1、基础环境:MindSpore、Ascend 910、Ascend-CANN-toolkit、Ascend Driver 2、业务流程编排与配置 3、Python 训练流程代码开发 4、模型效果及性能对齐1.5 技术流程技术流程图如下:1.6 代码地址本项目的代码地址为:cid:link_22 软件方案介绍2.1 项目方案架构介绍本系统的主要流程为:加载预训练的 Vgg16 模型和固定参数的 SSLayer 模型,解码载入二维码图、内容图和风格图,通过数据变换将图像 Resize 到适当大小,并根据二维码图和内容图初始化风格化图像,并将其设为梯度优化更新的参数;利用 Vgg16 模型和 SSLayer 模型得到对应的图像特征,计算 style 损失、content 损失和 code 损失,通过梯度优化更新风格化图像;迭代 100 次后输出最终的风格化二维码图像。各模块功能描述如下表所示:序号插件功能描述1图像解码调用 PIL 的 Image.open,分别读取二维码图、内容图和风格图2图像缩放调用MindSpore的mindspore.dataset.vision.Resize将图像缩放至合适大小3图像数据Tensor化调用MindSpore的mindspore.dataset.vision.ToTensor将图像数据转为Tensor数据4初始化风格化二维码图像根据加载的二维码图和内容图初始化风格化二维码图像Tensor,并调用MindSpore的mindspore.Parameter将其转为可梯度更新的参数5二维码风格化使用预训练好的Vgg16模型,并加载固定参数的SSLayer模型,Fix所有的模型参数,通过调用mindspore.nn.MSELoss计算 style、content和code损失,迭化优化风格化二维码图像6图像编码调用PIL的Image.open,将最终迭代优化的风格化二维码图像编码输出2.2 代码目录结构与说明本项目名称为 ArtCoder,其工程目录如下:. ├── datasets | └── download_datasets.sh // 数据集下载脚本 ├── mindspore // mindspore 版 │ ├── artcoder.py │ ├── main.py │ ├── model │ │ └── download_model.sh // 预训练模型下载脚本 │ ├── output // 风格化二维码图片输出目录 │ ├── requirements.txt // Python 库依赖 │ ├── run.sh // 运行脚本 │ ├── scan.py │ ├── scan.sh // 风格化二维码扫码测试 │ ├── ss_layer.py │ ├── test.sh // 批量测试生成风格化二维码 │ ├── utils.py │ ├── var_init.py │ └── vgg.py ├── .gitignore ├── LICENSE └── README.md3 开发准备支持的硬件形态和操作系统版本硬件环境操作系统版本Linux-x86_64 + CPU / GPU / Ascend910Ubuntu LTS >= 18.04.1Linux-aarch64+ CPU / GPU / Ascend310Ubuntu LTS >= 18.04.1软件依赖软件名称版本opencv4.6.0.66opencv-contrib1.23.3python3.9.2pillow9.3.0mindspore1.8.14 准备正式运行项目前,需要先根据第 2 节的要求,配置好相应的运行环境;然后根据提供的脚本下载好数据集和预训练模型。4.1 数据集下载风格化二维码的开源数据集:cd datasets bash download_datasets.sh cd ..4.2 模型下载 MindSpore 框架下的开源 VGG-16 预训模型:cd mindspore/model/ bash download_model.sh cd ../../5 运行首先进入到对应的代码目录中:cd mindspore/根据不同的硬件平台修改 Artcoder.py 文件中对应的硬件指定代码:# context.set_context(mode=context.GRAPH_MODE, device_target='CPU') # CPU 平台 # context.set_context(mode=context.GRAPH_MODE, device_target='GPU') # GPU 平台 context.set_context(mode=context.GRAPH_MODE, device_target='Ascend') # Ascend 平台然后根据以下注释编缉 run.sh 脚本:#!/bin/bash epoch=100 # 迭代优化次数 style_img_path="../datasets/style/square.jpg" # 风格图像路径 content_img_path="../datasets/content/man.jpg" # 内容图像路径 code_img_path="../datasets/code/man.jpg" # 二维码图像路径 output_dir="./output/man/" # 输出目录 export OMP_NUM_THREADS=1 python -W ignore main.py --epoch ${epoch} --style_img_path ${style_img_path} --content_img_path ${content_img_path} --code_img_path ${code_img_path} --output_dir ${output_dir}修改好对应的图像路径后,运行 run.sh 脚本:bash run.sh待程序跑完后可在输出目录下找到最终输出的风格化图像。6 测试如果想要批量地进行测试,可以运行 test.sh 脚本,根据以下注释修改对应参数:mode='some' # 测试模式 epoch=100 style_dir="../datasets/style" # 风格图片目录 content_dir="../datasets/content" # 内容图片目录 code_dir="../datasets/code" # 二维码图片目录 output_dir="./output" # 输出目录 # ...由于风格图像比较多,故提供两种测试模式:all 和 some,分别指使用所有的风格图进行测试和使用部分风格图进行测试。如果使用 some,其所使用的部分风格图列表在 test.sh 也可自行修改,即对应下面代码中的 style_list,可按需修改成自定义选定的测试图像列表:# 部分风格图测试 style_list=('candy.jpg' 'hb.jpg' 'been.jpg' 'st.jpg' 'square.jpg' 'udnie.jpg') # 选定的测试图像列表 for style in ${style_list[@]}; do style_name=$(basename ${style} .jpg) style_img_path="${style_dir}/${style_name}.jpg" output_img_path="${output_dir}/${image_name}_${style_name}" python -W ignore main.py --epoch ${epoch} --style_img_path ${style_img_path} --content_img_path ${content_img_path} --code_img_path ${code_img_path} --output_dir ${output_img_path} done然后运行 scan.sh 脚本,根据以下注释修改对应参数:scan_dir="./output" # 扫码测试目录 python scan.py --scan_dir ${scan_dir}最后会打印出能正确识别出的风格二维码的准确度。二维码识别使用了 Opencv-Contrib 中带的微信二维码扫码器。7 效率以下测速均在单进程下进行,涉及 GPU 和 NPU 也都是只使用单张卡进行测速。本测试主要对比对象为 Pytorch 版的开源 ArtCoder。针对一张 $592 \times 592$ 的二维码图风格化迁移总流程的实际硬件平台测速,包含模型载入、风格化总流程(图像读取、图像 Resize、图像变换、图像风格化迭代优化以及图像保存等步骤),每张二维码图风格化迭代优化 $100$ 个 Epoch。风格化总流程测速包含到图像读取、图像变换等 CPU 操作,受 CPU 型号及服务器上其它 CPU 任务影响较大。为了更好地比较该模型分别基于 PyTorch 的 GPU 平台,和 MindSpore 的 NPU 平台的效率,分别对模型载入、风格化总流程以及风格化流程中的迭代优化进行测速(其中 Mindspore 框架的模型载入时间不稳定,多次测量变化较大):框架硬件模型载入(s)风格化总流程(s)迭代优化(s)PyTorch 1.8.1Intel(R) Xeon(R) Gold 6226R CPU @ 2.90GHz + NVIDIA GeForce RTX 2080 Ti GPU6.6011.5211.25PyTorch 1.8.1Intel(R) Xeon(R) Gold 6226R CPU @ 2.90GHz1.96662.31656.21PyTorch 1.8.1Intel(R) Xeon(R) Gold 6226R CPU @ 2.90GHz + NVIDIA Tesla V100-PCIE GPU4.889.198.79MindSpore 1.8.1Intel(R) Xeon(R) Gold 6226R CPU @ 2.90GHz + NVIDIA GeForce RTX 2080 Ti GPU15.2911.4410.03MindSpore 1.8.1Intel(R) Xeon(R) Gold 6226R CPU @ 2.90GHz80.7821.1520.76MindSpore 1.8.1Intel(R) Xeon(R) Gold 6240 CPU @ 2.60GHz + Ascend 910 NPU17.3023.1419.498 可视化二维码图内容图风格图风格二维码图9 参考链接MindSpore 框架下预训练的 VGG-16 模型: cid:link_1二维码风格化模型代码参考:cid:link_3参考论文:@inproceedings{su2021artcoder, title={ArtCoder: An End-to-End Method for Generating Scanning-Robust Stylized QR Codes}, author={Su, Hao and Niu, Jianwei and Liu, Xuefeng and Li, Qingfeng and Wan, Ji and Xu, Mingliang and Ren, Tao}, booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition}, pages={2277--2286}, year={2021} }
  • [MindX SDK] MindX SDK -- 基于RGB图像的夜间增强参考设计案例
     MindX SDK -- 基于RGB图片的低光增强参考设计案例1 案例概述1.1 概要描述在本系统中,目的是基于MindX SDK,在华为云昇腾平台上,开发端到端低光增强的参考设计,实现对低光图像进行光照增强的功能,达到功能要求1.2 特性及适用场景对于夜间图像、低照度图像的增强均适用1.3 模型介绍本案例采用的模型为BMVC2022会议上提出的Illuminantion-Adaptive-Transformer(IAT)[1]模型,模型选型如下表:模型类型模型名称参考链接低光增强模型IATcid:link_11.4 实现流程1、基础环境:Ascend 310、mxVision、Ascend-CANN-toolkit、Ascend Driver2、模型转换:Pytorch .pth模型转.onnx模型,再由.onnx模型转昇腾离线模型:best_Epoch_lol_v1.pth --> IAT_lol-sim.onnx --> iatsim.om3、pythonV2 推理流程代码开发技术流程图如下:​2 软件方案介绍2.1 技术原理本方案中,将 PyTorch 版本的低光图像增强模型 IAT[1],转化为昇腾的om模型。对于输入的夜间低照度图像,通过调用昇腾om模型进行处理,最终生成经过低光增强后的图像。2.2 项目方案架构介绍​本系统设计了不同的功能模块。主要流程为:读取输入低光图片,调整输入图片到特定尺寸,并利用IAT模型进行低光增强,得到增强后的图片。各模块功能描述如表2.1所示:表2.1 系统方案中各模块功能:序号子系统功能描述1输入图片使用opencv的cv2.imread读取图片2图像缩放(预处理)调用opencv的cv2.resize将图片缩放到400*600(高宽)大小3数据格式转换(预处理)将numpy.ndarray格式的图片数据转换为MINDX_SDK的Tensor格式4OM模型推理通过低光增强模型对低光图片进行增强,选取的模型为Pytorch框架下的IAT模型,需要先生成.onnx模型并简化,再使用转换工具转化5后处理将低光增强后的张量转化为图像格式向量6结果输出将最终结果保存成图片格式输出3 开发环境准备3.1 环境依赖说明推荐系统为ubantu 18.04或centos 7.6环境依赖软件和版本如下表:依赖软件版本ubuntu18.04.1 LTSMindX SDK3.0.RC3Python3.9.2CANN5.1.RC2.alpha008numpy1.22.3opencv-python4.5.5onnxsim0.4.104 编译与运行示例步骤如下:步骤1 (下载原模型代码)下载 PyTorch 版本 IAT代码步骤2 (设置环境变量). ${sdk_path}/set_env.sh . ${ascend_toolkit_path}/set_env.sh步骤3 (执行编译的步骤)​ 1.pytorch 模型转换 onnx 文件​ 将 pth2onnx.py 放到 Illumination-Adaptive_Transformer/IAT_enhance/项目目录下,运行:python pth2onnx.py​ 在该目录下会生成名为IAT_lol.onnx的onnx模型文件​ 2.简化 onnx 文件​ 在上述目录下继续运行:onnxsim IAT_lol.onnx IAT_lol-sim.onnx​ 会在路径下生成简化后的IAT_lol-sim.onnx模型文件​ 已经简化好的onnx模型可供参考:IAT_lol-sim.onnx​ 3.onnx 文件转换 om 文件atc --framework=5 --model=./IAT_lol-sim.onnx --input_shape="input_1:1,3,400,600" --output=IAT_lol-sim --soc_version=Ascend310步骤4 (运行及输出结果)将要推理的图片放到本项目./data/文件夹下, 并将其改为test.png, 将.om模型放到./models/文件夹下, 命名为iatsim.om。运行:python main.py即可在./data/目录下得到推理后的结果.5 指标验证5.1 模型规模测试模型计算量测试需要利用python相关的模型测试工具 fvcore, 在原模型环境中可以使用以下命令进行安装:pip install fvcore利用fvcore的相关工具即可测得IAT模型的计算量,测试方法代码如下:def evaluate_net():    from model.IAT_main import IAT    from fvcore.nn import FlopCountAnalysis        # 创建IAT网络    model = IAT()    model = model.cuda()    # 创建输入网络的tensor    tensor = torch.rand(1, 3, 400, 600).cuda() ​    # 分析FLOPs    flops = FlopCountAnalysis(model, tensor)    print("FLOPs: ", flops.total())测试结果如下:​根据IAT论文所述,该模型参数量约为90K,通过测试得到计算量约为6.019GFLOPs。5.2 精度测试步骤1-3 与4.1节一致步骤4 (获取LOL数据集)下载LOLv1数据集将数据集解压后将测试集目录(eval15)放到本项目./data/文件夹下,如下图所示:├── data   ├──eval15 # 精度测试数据集 ├──high ├──low步骤5 (修改主函数并运行)切换到项目环境下,将main.py中的主函数改为调用test_precision(),运行:python main.py即可得到精度测试结果,测试结果如下:​6 参考文献[1] Cui Z, Li K, Gu L, et al. Illumination Adaptive Transformer[J]. arXiv preprint arXiv:2205.14871, 2022.[1] Cui Z, Li K, Gu L, et al. Illumination Adaptive Transformer[J]. arXiv preprint arXiv:2205.14871, 2022.
  • [MindX SDK] [MindX SDK]图像超分辨率v2案例分享
    MindX SDK -- 基于python V2接口的VDSR图像超分辨率1 案例概述1.1 概要描述基于MindX SDK mxVision 3.0RC3 开发图像超分辨率程序。本程序采用python开发,使用MxBase V2接口。通过预处理操作对输入的图片数据解码为YUV格式图片,并将解码后的图片缩放到模型推理要求的尺寸。然后利用图像超分辨率模型VDSR获取得到图片超分辨率重建结果。最后,利用python的第三方图像处理库PIL将低分辨率的输入图像和超分辨率重建的结果一同可视化。其次,针对两个图片集91-images和General-100进行PSNR(峰值信噪比)验证。程序输入:任意jpg图片 程序输出:输出得到低分辨率图片(256 x 256px)和超分辨率重建图片(768 x 768px)组合的可视化大图案例获取地址: cid:link_31.2 模型介绍Jiwon Kim 等基于残差学习和梯度裁剪,利用 20 层的卷积网络实现针对不同放大尺度的图像超分辨模型,命名为 VDSR(Very Deep convolutional networks for Super-Resolution)。VDSR使用比 SRCNN 大 104 倍的学习率,使用跳跃连接将输入与学习到的残差融合生成高分辨率图像,每个卷积层卷积核尺寸为 3 × 3,输入与输出尺寸一致。VDSR 越深效果越好,随着深度的增加,PSNR 更早地达到稳定值;使用残差网络,仅迭代几轮,网络就能达到很好的效果V1版本地址:cid:link_4论文地址:cid:link_10模型概述:cid:link_51.3 实现流程1、基础环境:Ascend 310、MindXSDK 、Ascend-CANN-toolkit 2、模型获取:通过链接下载已经转好的om模型 3、数据集准备:获取文件相关依赖后,运行转换脚本得到标签数据及噪声数据 3、业务流程编排与配置 4、python推理流程代码开发 5、V2接口python推理流程代码开发1.4 特性及适用场景工程适用于通用场景下,任意jpg图像生成超分辨率重建结果。2 软件方案介绍2.1 项目方案架构介绍本系统设计了不同的功能模块。主要流程为:jpg文件转为image类型传入流/V2接口中,利用VDSR的图像生成模型,利用python的第三方图像处理库PIL将低分辨率的输入图像和超分辨率重建的结果一同可视化。各模块功能描述如表2.1所示:表2.1 系统方案中各模块功能:V1:序号子系统功能描述1数据输入调用MindX SDK的appsrc输入image数据2推理调用MindX SDK的mxpi_tensorinfer,对输入的张量进行推理3输出推理好得到的tensor取出来4结果保存利用python的第三方图像处理库PIL将低分辨率的输入图像和超分辨率重建的结果一同可视化V2:序号子系统功能描述1数据输入调用MindX SDK pythonV2接口的imageProcessor类输入image数据2推理调用MindX SDK pythonV2接口的model类,对输入的张量进行推理3输出推理好得到的tensor取出来4结果保存利用python的第三方图像处理库PIL将低分辨率的输入图像和超分辨率重建的结果一同可视化2.2 代码目录结构与说明本工程名称为SuperResolution,工程目录如下图所示:. | |-------- font | |---- SourceHanSansCN-Normal-2.otf // otf字体 |-------- image | |---- test.jpg // 测试图片(需自行准备) | |---- 91-images-V1.jpg // evaluate.py V1接口在91-images数据集上的运行结果 | |---- 91-images-V2.jpg // evaluate_v2.py V2接口在91-images数据集上的运行结果 | |---- General-i00-V1.jpg // evaluate.py V1接口在General-100数据集上的运行结果 | |---- General-i00-V2.jpg // evaluate_v2.py V2接口在General-100数据集上的运行结果 |-------- V2result // V2测试图片程序输出存放处 |-------- model | |---- YUV420SP_U8_GRAY.cfg // 模型转换配置文件(灰度图) | |---- VDSR_768_768.om // 转换后OM模型存放在此处(需自行上传) |-------- testSet | |---- 91-images // 91-images验证集(含bmp图片) | |---- 91-images-jpg // 91-images验证集转换后集(含jpg图片) | |---- bmp2jpg.py // bmp转jpg脚本 |-------- evaluate_v2.py // 模型精度验证V2 |-------- README.md // ReadMe |-------- main_v2.py // 图像超分辨率主程序V2 |-------- util.py // 工具方法 3 开发准备3.1 环境依赖说明推荐系统为ubuntu 18.04,环境依赖软件和版本如下表:软件版本说明获取方式mxVision3.0RC3mxVision软件包链接Ascend-CANN-toolkit5.1.RC1Ascend-cann-toolkit开发套件包链接操作系统Ubuntu 18.04操作系统Ubuntu官网获取3.2 环境搭建3.2.1 环境变量设置#在CANN以及MindX SDK的安装目录找到set_env.sh,并运行脚本: bash ${SDK安装路径}/set_env.sh bash ${CANN安装路径}/set_env.sh #查看环境变量: env3.3 前期数据和模型准备项目使用的模型为VDSR。步骤1 获取原始模型网络及权重, 权重下载 和 网络下载地址步骤2 AIPP配置文件-YUV420SP_U8_GRAY.cfgaipp_op { aipp_mode: static input_format : YUV420SP_U8 csc_switch : true rbuv_swap_switch : false matrix_r0c0 : 256 matrix_r0c1 : 0 matrix_r0c2 : 0 matrix_r1c0 : 0 matrix_r1c1 : 0 matrix_r1c2 : 0 matrix_r2c0 : 0 matrix_r2c1 : 0 matrix_r2c2 : 0 input_bias_0 : 0 input_bias_1 : 0 input_bias_2 : 0 }色域转换,用于将输入的图片格式,转换为模型需要的图片格式,这里将YUV420SP_U8转GRAY,详细色域转换配置说明请参考 这里步骤3 将下载得到模型网络及权重(VDSR.prototxt、VDSR.caffemodel)、AIPP配置文件(YUV420SP_U8_GRAY.cfg)放在 model 目录下步骤4 使用ATC模型转换工具进行模型转换在 model 目录下执行以下命令# 设置环境变量(请确认install_path路径是否正确) # Set environment PATH (Please confirm that the install_path is correct). #在CANN以及MindX SDK的安装目录找到set_env.sh,并运行脚本: bash ${SDK安装路径}/set_env.sh bash ${CANN安装路径}/set_env.sh #查看环境变量: env # 执行,转换VDSR模型成om格式 # Execute, transform VDSR model. atc --model=./VDSR.prototxt --weight=./VDSR.caffemodel --framework=0 --input_format=NCHW --input_shape="data: 1, 1, 768, 768" --output=./VDSR_768_768 --soc_version=Ascend310 --output_type=FP32 --insert_op_conf=YUV420SP_U8_GRAY.cfg执行完后,会在model目录下生成相应的VDSR_768_768.om模型文件。模型转换使用了ATC工具,如需更多信息请参考 这里4 推理流程开发实现4.1 V2接口编排 decode # 图像解码 resize # 图像缩放 infer # 模型推理(图像生成)4.2 主程序开发1、初始化V2接口。2、图像解码。3、图像缩放。4、模型推理。5、转变数据类型保存图片4.3 参数调节参数名称参数介绍修改方法默认值MODEL_PATH模型路径在python/main_v2.py文件中修改为具体的路径名称即可model/VDSR_768_768.omINPUT_IMAGE_PATH输入图片路径在python/main_v2.py文件中修改为具体的路径名称即可./image/head.jpgout_path输出可视化路径在python/main_v2.py文件中修改为具体的路径名称即可"./result/" + fileName5 编译与运行V2接口运行准备一张测试图片,置于 image 文件夹中(仅支持jpg格式)进入工程目录键入执行指令,发起推理性能测试:python3 main_v2.py ${测试图片路径} 例如: python3 main_v2.py image/head.jpg # 或者在main.py中配置 input_image_path input_image_path = 'image/${测试图片文件名}' # 仅支持jpg格式执行完毕后,sample会将程序输出的可视化结果,保存在工程目录下V2result中 (可视化结果名和输入图片一致)V2精度+性能验证PSNR(峰值信噪比)经常用作图像压缩等领域中信号重建质量的测量方法。1)准备测试集:下载91-images和General-100验证图片集,91-images下载地址,General-100下载地址,从zip文件中取出两个图片集91-images和General-100放置到testSet目录下,其中91-images包含91张t*.bmp图片,General-100包含100张im_*.bmp图片2)图片格式转换:参考testSet/bmp2jpg.py脚本,将两个图片集中bmp图片转换为jpg图片进入testSet目录,键入执行指令,图片格式转换:python3 bmp2jpg.py ${测试图片集路径} 例如: python3 bmp2jpg.py 91-images # 或者在evaluate_v2.py中配置 test_image_set_path test_image_set_path = './${测试图片集路径}'然后会在testSet目录下,生成转换后的包含jpg格式图片的文件夹,文件夹名称为${测试图片集路径}-jpg3)利用evaluate_v2.py 脚本,计算得到两个图片集的平均PSNR(峰值信噪比)键入执行指令,发起精度验证测试:python3 evaluate_v2.py ${验证图片集路径} 例如: python3 evaluate_v2.py testSet/91-images-jpg # 或者在evaluate_v2.py中配置 test_image_set_path test_image_set_path = './${验证图片集路径}'执行完毕后,会在控制台输出该验证图片集的平均峰值信噪比和推理时间4)与SuperResolution V1接口的结果进行对比下载V1接口中的evaluate.py脚本到当前运行路径,脚本所在位置如下:链接在evaluate.py的推理主函数中,加入性能测试代码,键入执行指令,对91-images数据集发起精度及性能验证测试:python3 evaluate.py ${验证图片集路径} 例如: python3 evaluate.py testSet/91-images-jpg # 或者在evaluate.py中配置 test_image_set_path test_image_set_path = './${验证图片集路径}'执行完毕后,会在控制台输出该验证图片集的平均峰值信噪比和推理时间(推理时间在一定范围内浮动)键入执行指令,对General-100数据集发起精度及性能验证测试:python3 evaluate.py ${验证图片集路径} 例如: python3 evaluate.py testSet/General-100-jpg # 或者在evaluate.py中配置 test_image_set_path test_image_set_path = './${验证图片集路径}'执行完毕后,会在控制台输出该验证图片集的平均峰值信噪比和推理时间(推理时间在一定范围内浮动)5)得出精度及性能验证结论精度:V1及V2接口运行相同数据集时,平均PSNR相同,精度达标。性能:为统计性能,对两个数据集分别运行V1接口和V2接口,各跑十次,统计平均接口运行时间:91-images: V1 平均时间为:16.42974079V2 平均时间为:16.34681652General-100: V1 平均时间为:18.52285776V2 平均时间为:18.37193444结论:在保证精度相同的同时,V2接口的性能相对于V1来说有所提高,性能达标。6 常见问题6.1 路径问题问题描述:提示 the ./image/head.jpg does not exist解决方案:输入图片或数据集不存在,检查输入路径是否正确。6.2 格式问题问题描述:提示input image only support jpg.解决方案:将输入图片更换为jpg格式图片。
  • [MindX SDK] MindX SDK -- 文档版面分析参考设计案例
    MindX SDK -- 文档版面分析参考设计1 案例概述1.1 概要描述在本系统中,目的是基于MindX SDK,在华为云昇腾平台上,开发端到端文档版面分析的参考设计,实现对图像中的版面元素进行类型识别的功能,达到功能要求注:由于picodet_lcnet_x1_0_fgd_layout_cdla模型限制,仅支持识别“text 、title、figure、figure_caption、table、table_caption、header、footer、reference、equation”这10种版面类型1.2 模型介绍本项目主要用到模型用于文档版面识别的picodet_lcnet_x1_0_fgd_layout_cdla模型(paddlepaddle)上述模型的原始模型文件可以在此处下载:cid:link_21.3 实现流程1、基础环境:Ascend 310、mxVision-3.0.RC2、Ascend-CANN-toolkit、Ascend Driver2、模型转换: 模型转换分为两步:第一步: Paddle模型转onnx模型: 用户环境配置:( python >= 2.7 paddlepaddle >= 1.8.0 paddle2onnx == 0.9.2 ) 转换代码:paddle2onnx --model_dir ./picodet_lcnet_x1_0_fgd_layout_cdla_infer --model_filename model.pdmodel --params_filename model.pdiparams --save_file ./picodet_lcnet_x1_0_fgd_layout_cdla_infer.onnx --opset_version 11 --enable_onnx_checker True第二步:onnx模型转昇腾离线om模型: atc --model=./picodet_lcnet_x1_0_fgd_layout_cdla_infer.onnx --framework=5 --output=./layout --soc_version=Ascend310 --insert_op_conf=./layout.aippconfig3、图片预处理(利用aipp前处理输入图片),包括色域转换、resize、图片归一化4、获取图片Tensor进行模型推理5、python推理后处理代码开发1.4 代码地址本项目的代码地址为:cid:link_62 软件方案介绍2.1 项目方案架构介绍本系统设计了不同的功能模块。主要流程为:图片传入流程中,将图像resize至特定尺寸,再利用文档版面识别模型检测版面类型,最后可视化图片形式输出识别结果。各模块功能描述如表2.1所示:表2.1 系统方案中各模块功能:序号子系统功能描述1图像输入调用untils.py文件中的decode_image函数2图像放缩调用untils.py文件中的resize_image函数 放缩到800*6083色域转换和图片归一化使用配置的AIPP进行色域转换和归一化处理4文档版面分析将预训练paddle模型转成华为om模型,检测出文档版面中的版面信息。调用SDK 接口model5结果输出使用自己开发的postprocess后处理函数进行文档版面分析后的后处理以及可视化2.2 代码目录结构与说明本工程名称为DocumentLayoutAnalysis,工程目录如下图所示:├── evaluate.py #精度测试 ├── infer.py #推理文件 ├── model │ ├── layout.aippconfig #aipp配置文件 │ ├── model.sh #模型转换脚本 ├── postprocess.py #后处理文件 ├── README.md └── utils.py #推理用到的一些工具函数3 开发准备3.1 环境依赖说明环境依赖软件和版本如下表:软件名称版本ubantuUbuntu/Linaro 7.3.0-16ubuntu3MindX SDKmxVision-3.0.RC2Python3.9.2CANN5.1RC2numpy1.21.5opencv-python4.5.53.2 环境搭建# 执行环境变量脚本使环境变量生效 . ${SDK-path}/set_env.sh . ${ascent-tookit-path}/set_env.sh # SDK-path: SDK mxVision安装路径 # ascent-tookit-path: CANN安装路径 #查看环境变量 env4 模型获取4.1 paddle模型转换成onnx模型步骤1 在PaddleOCR上下载picodet_lcnet_x1_0_fgd_layout_cdla模型。下载地址步骤2 根据PaddleOCR的inference模型转onnx模型将下载的paddle模型转成onnx模型。 转onnx模型用到的环境配置: paddle2onnx-0.9.2 with python>=2.7 , paddlepaddle>=1.8.0步骤3 得到模型后,将转好的onnx模型复制到该工程目录model文件夹下注:此处提供paddlepaddle的源模型和转换过后的onnx模型下载地址4.2 onnx模型转换成om模型步骤1 AIPP配置由于该模型的输入为rgb格式,图像解码后的图像为bgr格式,且图片需要做归一化处理步骤,需要在atc转换模型时使用aipp预处理,aipp配置文件命名为layout.aippconfig,aipp配置内容如下:aipp_op { aipp_mode : static crop : false input_format : RGB888_U8 csc_switch : false rbuv_swap_switch : true min_chn_0 : 123.675 min_chn_1 : 116.28 min_chn_2 : 103.53 var_reci_chn_0 : 0.0171247538 var_reci_chn_1 : 0.0175070028 var_reci_chn_2 : 0.0174291938 }步骤2 执行脚本cd 到model文件夹下. model.sh步骤3 模型转换结果执行完模型转换脚本后,会生成相应的.om模型文件。 执行后终端输出为:ATC start working now, please wait for a moment. ATC run success, welcome to the next use.转成的模型命名为layout.om可以在infer中使用了模型转换使用了ATC工具,如需更多信息请参考:cid:link_105 文档版面分析推理开发实现5.1 主程序开发1、图片解码2、图片预处理3、文档版面推理4、推理后处理5、图片可视化详细流程参考如下流程图:图1 文档版面分析流程图5.2 程序开发参考资料图片预处理图像解码,图像缩放开发 在untils文件中开发了 decode_image、resize_image函数,在主程序infer.py中调用代码开发参考图片的色域转换和归一化处理 利用aipp在数据进入模型前预处理模型推理的调用 参考案例模型后处理以及可视化,后处理文件在postprocess.py中 参考代码推理结果的可视化,调用untils文件中的visualize函数参考代码精度测试参考代码6 编译与运行示例步骤如下:步骤1 自行选择一张或多张jpg、jpeg或者png图片文件,放入工程目录./input下。参考测试图片下载地址注:如果工程目录下没有input目录,需要自行建立步骤2 cd 到该项目目录DocumentLayoutAnalysis下,然后执行python infer.py执行后会在终端按顺序输出文档的版面类别和置信度,并在./output目录下生成结果图片,可查看文档检测结果。注:如果工程目录下没有output目录,需要自行建立7 精度测试步骤1获取数据集数据集CDLA dataset:下载地址由于精度测试只需要用到验证集val,所以只需要保留数据集里的val文件。精度测试使用的标注json文件需要转成coco格式。 转换过程参考转coco格式。将转换后的val_save_path目录下的JEPGimages目录和annotations.json文件复制到工程目录val下。注:如果工程目录下没有val目录,需要自行建立步骤2运行精度测试python文件cd 到该项目目录DocumentLayoutAnalysis下,然后执行python evaluate.py之后就得到精度测试的结果了,例如下图3所示精度测试结果与原模型0.856相差0.002,满足精度要求。图2 文档版面分析精度测试结果
  • [执行问题] ValAccMonitor使用时内存爆炸的问题
    AI框架:mindspore模型:resnet18问题场景:图像分类模型:resnet18数据量:2万张左右,训练集验证集划分:[0.9, 0.1]出现问题:使用ValAccMonitor模块,训练时,电脑卡死,鼠标都卡,查看内存发现爆满。使用其他回调函数如lossMonitor则一切正常无报错内容,只显示:Process finished with exit code 137 (interrupted by signal 9: SIGKILL)我的电脑内存是32GB,难道代码没有问题,就是纯粹内存太小吗?大家有遇到同样问题的吗?—————————分割线———————————目前看来应该就是内存不够,不是代码的问题,缩小数据集的大小后就能正常运行了,实在没想到这么吃内存
  • [MindX SDK] OpenCVPlugin
    OpenCV 插件1. 介绍本代码仓插件实现了opencv的抠图和缩放功能。抠图: 支持根据目标检测的(x,y)坐标和(width,height)宽高进行图像裁剪(抠图)。缩放: 对解码后的YUV格式以及BGR格式的图像进行指定宽高的缩放。代码仓地址:cid:link_01.1 支持的产品本项目以昇腾Atlas310卡为主要的硬件平台。1.2 支持的版本支持的SDK版本为 2.0.4, CANN 版本为 5.0.4。1.3 软件方案介绍本项目包含两个功能,即抠图与缩放。1.3.1 抠图整体业务流程为:待检测图片通过 appsrc 插件输入,然后使用图像解码插件 mxpi_imagedecoder 对图片进行解码,再通过图像抠图插件 OpenCVPlugin进行将图片抠图(其前后可接其他插件)。最后通过输出插件 appsink 获取结果,并在外部进行可视化,将结果标记到原图上,本系统的各模块及功能描述如表1所示:表1 系统方案各模块功能描述:序号子系统功能描述1图片输入获取 jpg 格式输入图片2图片解码解码图片3其他插件其他插件的功能4抠图对输入图片进行抠图5其他插件其他插件的功能6结果输出获取检测结果7结果可视化将结果保存1.3.2 缩放整体业务流程为:待检测图片信息经预处理后通过 appsrc 插件输入,然后使用图像解码插件 mxpi_imagedecoder 对图片进行解码,再通过图像缩放插件 OpenCVPlugin进行对图片进行缩放(其前后可接其他插件)。最后通过输出插件 appsink 获取检测结果,并在外部进行可视化,将结果标记到原图上,本系统的各模块及功能描述如表2所示:表2 系统方案各模块功能描述:序号子系统功能描述1图片输入获取 jpg 格式输入图片2图片解码解码图片3其他插件其他插件的功能4缩放对输入图片进行缩放5其他插件其他插件的功能6结果输出获取检测结果7结果可视化将结果保存1.4 代码目录结构与说明本工程名称为OpenCVPlugin,工程目录如下所示:. ├── image │ ├── pipeline.jpg ├── OpenCVPlugin │ ├──lib (编译后生成) │ ├──src │ │ ├──OpenCVPlugin │ │ ├── CMakeLists.txt │ │ ├── OpenCVPlugin.cpp │ │ └── OpenCVPlugin.h ├── python │ ├── main.py │ └── test.pipeline ├── build.sh └── README.md1.5 技术实现流程图OpenCVPlugin 插件流程图。1.6 适用场景输入:metadata(数据类型“MxpiVisionList”)输出:metadata(数据类型“MxpiVisionList”)静态输入:{"image/yuv","image/rgb"}静态输出:{"image/rgb"}2 环境依赖推荐系统为ubuntu 18.04,环境依赖软件和版本如下表:软件名称版本cmake3.5+mxVision2.0.4python3.9.2确保环境中正确安装mxVision SDK。在编译运行项目前,需要设置环境变量:MindX SDK 环境变量:. ${SDK-path}/set_env.shCANN 环境变量:. ${ascend-toolkit-path}/set_env.sh环境变量介绍SDK-path: SDK mxVision 安装路径 ascend-toolkit-path: CANN 安装路径3 属性介绍3.1 抠图功能的pipeline属性序号属性描述是否为必选项是否可修改1option插件功能选择,此处使用"crop"是是2startRow抠图选定区域的开始纵坐标, 默认为"0",取值为0~原图高否是3startCol抠图选定区域的开始横坐标, 默认为"0" ,取值为0~原图宽否是4Height抠图选定区域的高,默认为"256" ,取值为1~原图高,且必须为2的倍数否是5Width抠图选定区域的宽,默认为"256" ,取值为1~原图宽,且必须为16的倍数否是6outputDataFormat插件输出的数据格式,可选值为"RGB" "BGR" "YUV"是是7dataType插件输出的数据类型,可选值为"uint8"和"float32",默认为“uint8”否是注:如果抠图的尺寸大于原图尺寸,插件会补边,出现绿色边框。3.2 缩放功能的pipeline属性序号属性描述是否为必选项是否可修改1option插件功能选择,此处使用"resize"是是2height缩放后的高度, 默认为"256",取值为1~8192,必须为2的倍数否是3width缩放后的宽度, 默认为"256",取值为1~8192,必须为16的倍数否是4fxwidth方向缩放比例,默认为"0",取值为0~1否是5fyheight方向缩放比例,默认为"0",取值为0~1否是6interpolation图片插值方式,默认为"1",取值为0~4否是7outputDataFormat插件输出的数据格式,可选值为"RGB" "BGR" "YUV"是是8dataType插件输出的数据类型,可选值为"uint8"和"float32",默认为“uint8”否是注:fx和fy参数在height与width参数被赋值时失效,如有需要,可自行更改插件代码中resize部分。插值方式的取值具体描述:interpolation选项插值方式int值INTER_NEAREST最近邻插值0INTER_LINEAR双线性插值(默认)1INTER_CUBIC基于4*4像素领域的3次插值法2INTER_AREA使用像素区域关系进行重采样3INTER_LANCZOS48x8像素邻域的Lanczos插值44. 编译与运行步骤1 修改CMakeLists.txt文件第15行 将“/usr/local/Ascend/ascend-toolkit/latest/runtime/include”替换为实际include路径。步骤2 编译进入到主路径:bash build.sh步骤3 运行在main.py所在目录上传图片命名为"person.jpg",可通过修改pipeline文件选择相应的功能。python3 main.py注:插件输出宽高分别需要16、2对齐。插件使用YUV格式输出时,将main.py 87、89、91行保持注释;94、95行注释打开。 同时将下游插件的"cvProcessor"属性删除。插件使用RGB格式输出时,将main.py 87、89行注释打开;91、94、95行保持注释。插件使用BGR格式输出时,将main.py 87、91行注释打开;89、94、95行保持注释。插件输出为float32格式时,打开85行,注释86行。插件输出为uint8时,打开86行,注释85行。
  • [API使用] nn.AdaptiveMaxPool2d
    nn.AdaptiveMaxPool2d使用出现异常TypeError: For primitive[AdaptiveMaxPool2DGrad], the input argument[argmax_dtype] must be a type of {Tensor[Int64]}, but got Tensor[Float32]. 
  • [API使用] unknown location
    请问 出现以下问题怎么解决   所有的步骤都是按照官网上来的      呜呜呜
  • [其他问题] ValueError: This may be not defined, or it can't be a operator. Please check code. 帖子追问
    请麻烦解决一些这个帖子上的问题,已经补充了日志和相关文件https://bbs.huaweicloud.com/forum/thread-0202966920118700004-1-1.html?ticket=ST-4526585-bBXn4eFCBrIWenyGIl1Nqqnn-sso
  • [应用实践] 【昇腾AI程序设计】 基于 MindSpore 实现漫画脸
    我们使用mindspore深度学习框架完成了实现了漫画脸小程序,在这里简单介绍一下我们的项目。项目功能用户可通过小程序上传照片,照片交由服务端处理生成对应的漫画脸并展现给用户,之后还可对漫画脸进行染发。用户可以保存至相册,也可以立即发送给好友或分享到朋友圈。相关技术3.1 小程序端小程序端采用微信原生的 WXML、WXS 进行开发,采用官方的 UI 组件库,小程序使用上轻便快捷,没有门槛,能让大众都享受技术所带来的福利,微信小程序对于用户的隐私信息收集少,端到端提供服务,对于用户来说也更加安全。3.2 服务端后端基于 SpringBoot 框架,并采用 MySQL 数据库存储相关用户信息,所有服务基于Docker 容器部署,并通过 kubernetes 进行管理,在高并发场景下自动启动容器来处理大量的请求,对于不同程度的并发场景具有良好的弹性,极大的节约服务器资源。在接收到用户提交的图片后,首先对图片进行安全检查,检查通过后使用 gRPC 框架调用算法,基于 protobuf 的高效轻便的结构化数据存储方式,能最大程度的减少传输过程所消耗的系统资源,并减小时延,提高用户体验感。核心算法本项目基于 MindSpore 深度学习框架,结合了神经风格转移和生成性对抗网络,参考AnimeGAN 等论文复现了风格迁移模型,实现将现实中的人物照片转换为漫画风格的功能。本项目中,我们使用了一种简单有效的生成性对抗策略。算法由两个卷积神经网络构成:一个是生成器 G,用于现实中的人物照片转换为漫画图像;另一个是辨别器 D,用于区分图像是来自真实的漫画图像还是来自生成器生成的输出。G 和 D 的网络结构如下所示:生成器网络结构:​辨别器网络结构:​开发框架和平台框架:MindSpore 1.6.0环境:python 3.7.12numpy 1.21.5tqdm 4.63.0openCV 4.5.5tensorflow-gpu 1.15.0cuda 10.0.130cudnn 7.6.0平台:华为云 ModelArts,Autodl数据集模型训练与评估中使用数据主要分为两部分:真实人脸集以及风格集,其中真实人脸集又划分为训练集、验证集与测试集,训练集验证集与测试集的比例为 100:1:1。真实人脸集数据来自于高清人脸数据集 CelebA-HQ,本项目中使用大小为 256*256和 512*512 的数据进行训练与测试。风格集主要来自于我们自己搜集以及模型官方提供的动画漫画截图,主要风格有 JOJO 画风,美漫画风,新海诚画风,大小为 256*256 和 512*512。​实验结果​
  • [问题求助] c++版怎么使用float16呢
    我的om模型是float16的,使用python写的推理代码是可以跑通。现在打算改成c++的。遇到的问题就是怎么把图像数据转成float16格式的再推理?opencv和acl里面都没有真正的float16。
  • [参赛经验分享] 2022“域见杯”医检人工智能开发者大赛,第四名经验分享
    赛题描述本次大赛结合医检行业特色,以宫颈癌筛查为主题,提供近1万张辅以病理医生专业标注的宫颈细胞学图片。利用这些图片及标注开发人工智能分类算法,判断图片中细胞的病变程度,并进行分类。 赛题任务任务指标:  识别准确率 = 识别正确的图片数 / 图片总数推理时间要求:  计算资源规格为“CPU: 2 核 8GB”,一小时内完成1800张图像预测数据分析数据处理模型选择总结致谢
  • [问题求助] 推断报错,UpdateIoTaskArgs: ErrorNo: 145000(Parameter invalid.) [EXEC][DEFAULT][Check][Param] is_input:1 blob size:2 from use
    运行环境:CANN版本:ascend-toolkit-6.0driver版本:1.0.13开发语言:C++问题描述:           图像目标检测任务中,模型训练是在python环境下训练的,训练时模型输入格式为numpy.ndarray(BatchSize,H,W,Channels)。训练好后,对模型进行.om文件转换,在python环境下可正常推理得到输出。          在C++环境下,基于www.gitee.com/ascend/samples/cplusplus/level2_simple_inference/2_object_detection/YOLOV3_coco_detection_picture项目的基础上进行修改的,采用cv::Mat存储图像,送入模型进行推断时报错。excute model failed, modelId=1.查看日志后,结果如下图所示:请问:这是说送入模型的参数不合法吗?在C++中如何封装数据才能符合python中训练得到的模型转化成.om文件的输入(numpy.ndarray(BatchSize,H,W,Channels))?
  • [API使用] 替代tf.extract_image_patches()算子的mindspore方法
    【操作步骤&问题现象】替代tf.extract_image_patches(                         large_img,                          [1,args.times , args.times ,1],                          [1, args.times,args.times,1],                          [1,1,1,1],                          padding='SAME')函数的mindspore 方法【日志信息】(可选,上传日志内容或者附件)