共计 13875 个字符,预计需要花费 35 分钟才能阅读完成。
【摘要】基于华为云 ModelArts 和弹性云服务器 ECS 实现从训练到部署的 AI 全流程开发,介绍如何应用昇思 MindSpore 框架构建 U -Net 网络模型,应用线上昇腾磅礴算力在工业质检的模仿数据集上进行训练,并将保留的模型编译生成适配昇腾 AI 处理器的离线模型,应用 MindX SDK mxVision 进行推理,从而实现图像宰割的工作。前言随着新一轮科技反动和产业改革的减速演进,寰球各国都在借助新技术推动制造业降级,从工业 2.0 自动化开始衰亡,到工业 3.0 信息化遍及,现在正迈向工业 4.0 智能化。借助 IoT、工业大数据、人工智能等先进技术实现从低端劳动密集型产业向高端科技型产业的制作降级。在利用人工智能技术之前,局部场景下已呈现传统机器视觉进行质检的案例。然而因为产品整机简单、光源多样等因素的限度,更多场景还是依赖于人工质检。而人工智能技术的交融可进一步晋升检测精度,很多实际已证实 AI 算法可实现高达 99% 以上检测精度,能够利用在绝大多数工业质检场景中,人工智能曾经进入场景化利用时代。
从 AI 算法到工业制作场景化利用还有很远,算法开发、利用开发、业务部署是妨碍 AI 利用进入工业生产的三大鸿沟。
为此,华为昇腾计算秉承“硬件凋谢、软件开源”的理念,打造了昇腾智能制作使能平台,致力于推动制作行业转型降级。在硬件方面,华为提供从模组 / 板卡到服务器 / 集群的 Atlas 系列化硬件。Atlas 200 AI 减速模块具备极致性能、超低功耗的特点,能够在端侧实现物体辨认、图像分类等;Atlas 300I 推理卡提供超强 AI 推理性能,以超强算力减速利用,可广泛应用于推理场景。在软件方面,为了帮忙开发者逾越 AI 利用落地制作行业的三大鸿沟,华为提供了全栈软件平台与工具。特地是昇腾利用使能 MindX,帮忙宽广利用开发者疾速开发 AI 利用,让 AI 进入制作行业。据介绍,MindX 中蕴含了“2+1+X”,其中“2”是深度学习使能 MindX DL 和智能边缘使能 MindX Edge,帮忙开发者疾速搭建深度学习和边缘推理的根底平台;“1”是优选模型库 ModelZoo,为开发者提供了各个场景下通过调优的模型,开发者只需依据本身场景须要,按需下载即可;最初是面向行业利用的 SDK,华为曾经在昇腾社区公布了面向智能制作场景的 mxManufacture SDK 和 mxVision SDK,聚焦于工业质检场景,可能以很少的代码量、甚至于零代码实现制作行业 AI 利用开发。
简介在这里应用工业质检场景中的模仿数据集,采纳 MindSpore 深度学习框架构建 U -Net 网络,在华为云平台的 ModelArts 上创立基于昇腾 910 处理器的训练环境,启动训练并失去图像宰割的模型;之后在华为云平台的 ECS 弹性云服务器上创立基于昇腾 310 处理器的推理环境,将该模型转换成离线模型,应用 MindXSDKmxVision 执行推理工作。
利用场景效果图:
业务流层图:
基于华为云平台的 ModelArts 实现训练先来介绍一下基本概念!认识一下!华为云 ModelArts 平台
ModelArts 是面向开发者的一站式 AI 平台,为机器学习与深度学习提供海量数据预处理及交互式智能标注、大规模分布式训练、自动化模型生成,及端 - 边 - 云模型按需部署能力,帮忙用户疾速创立和部署模型,治理全周期 AI 工作流。MindSpore 深度学习框架
昇思 MindSpore 是一个全场景深度学习框架,旨在实现易开发、高效执行、全场景笼罩三大指标,提供反对异构减速的张量可微编程能力,反对云、服务器、边和端多种硬件平台。Ascend 910
昇腾 910 是一款具备超高算力的 AI 处理器,其最大功耗为 310W,华为自研的达芬奇架构大大晋升了其能效比。八位整数精度(INT8)下的性能达到 640TOPS,16 位浮点数(FP16)下的性能达到 320 TFLOPS。作为一款高集成度的片上零碎(SoC),除了基于达芬奇架构的 AI 核外,昇腾 910 还集成了多个 CPU、DVPP 和任务调度器(Task Scheduler),因此具备自我管理能力,能够充分发挥其高算力的劣势。昇腾 910 集成了 HCCS、PCIe 4.0 和 RoCE v2 接口,为构建横向扩大(Scale Out)和纵向扩大(Scale Up)零碎提供了灵便高效的办法。HCCS 是华为自研的高速互联接口,片内 RoCE 可用于节点间间接互联。最新的 PCIe 4.0 的吞吐量比上一代晋升一倍。数据集数据集模仿工业质检场景,在 Atlas200DK 上标出蓝色区域,作为检测指标(前景),分为原始数据集和预处理后的数据集。
原始数据集 raw_data 的目录构造如下:├── raw_data
│ ├── annotations # 标注文件夹
│ │ ├── image_info_annotations.json # 图像名称、图像宽度、高度等信息
│ │ ├── instances_annotations.json # 指标检测、宰割工作的数据集标注文件
│ │ ├── panoptic_annotations # 空文件夹
│ │ ├── panoptic_annotations.json # 全景标注信息
│ │ └── stuff_annotations.json # 资料标注信息
│ ├── annotations.xml # 宰割信息、指标边界框信息、指标面积、对应图像 id 以及类别 id 等
│ └── images
│ ├── SW1hZ2VfMjAyMTA3MjcxNTA0MDAxNDA.jpg # 图片
│ ├── SW1hZ2VfMjAyMTA3MjcxNTA0MDk1MzM.jpg
│ ├── SW1hZ2VfMjAyMTA3MjcxNTA0MDY1NDU.jpg
│ ├── SW1hZ2VfMjAyMTA3MjcxNTA0Mjc0NzA.jpg
│ ├── …
预处理后的数据集 data 的目录构造如下:.
└─data
└─SW1hZ2VfMjAyMTA3MjcxNTA0MDAxNDA
├─image.png # 图片
└─mask.png # 标签
└─SW1hZ2VfMjAyMTA3MjcxNTA0MDk1MzM
├─image.png
└─mask.png
...
U-Net 网络 U -Net 网络是由 FCN 网络衍生而来,最后是为了解决生物图像的宰割问题,在 2015 年 ISBI 细胞跟踪比赛中,U-Net 取得了许多最佳奖项。因为宰割成果好,U-Net 被广泛应用于图像宰割畛域,如卫星图像宰割、工业瑕疵检测等。
U-Net 网络具备如下特点:全卷积网络 U -Net 网络应用了“全卷积网络”,能够应用很少的训练图像就能产生更准确的宰割。全卷积网络的次要思维是用间断的层来补充通常的膨胀网络,其中池化算子被上采样算子取代。因而,这些层减少了输入的分辨率。为了定位,将膨胀门路的高分辨率特色与上采样输入相结合。而后,一个间断的卷积层能够学习基于这个信息组装一个更准确的输入。因为全卷机网络和上采样在 FCN 网络中已呈现,在此不过多讲述。
数据加强当只有很少的训练样本可用时,能够通过数据加强来训练网络的不变性和鲁棒性。显微图像须要具备平移和旋转不变性,并且对形变和灰度变动鲁棒。因而将训练样本进行随机弹性形变是训练宰割网络的要害。
上采样这里介绍上采样中的反卷积(TransposedConvolution),是指在深度学习计算中,将图像尺寸由小分辨率到大分辨率的映射操作。留神,反卷积只能复原尺寸,不能复原数值。
压缩门路和扩张门路的 U 型构造 U -Net 网络是“编码器(Encoder)—解码器(Decoder)”网络,是蕴含压缩门路(contractingpath)和扩张门路(expandingpath)的 U 型构造。
其中,蓝 / 红色框示意 feature map;蓝色箭头示意 3×3 卷积,用于特征提取;灰色箭头示意 skip-connection,用于特色交融;红色箭头示意池化 pooling,用于升高维度;绿色箭头示意上采样 upsample,用于复原维度;青色箭头示意 1×1 卷积,用于输入后果。同时,U-Net 网络采纳了跳级构造(skipconnection),目标是为了交融特色信息,使深层和浅层的信息交融起来。还有 CopyandCrop,先通过 Crop 操作使得交融的特色图大小统一,之后再做 Copy 操作将两张特色图拼接(concatenation)起来。(copy and crop):在 UNet 有四个跳级构造,目标是为了交融特色信息,使深层和浅层的信息交融起来。不仅图片大小要统一(crop 操作),而且特色的维度(channels)也要一样(copy 操作)。Copy 是指拼接操作(concatenation),Crop 是指将图片裁剪,即图中的 Copy and Crop 操作。
纸上得来终觉浅,来看看 U -Net 相干网络代码(MindSpore):class UNet(nn.Cell):
"""Simple UNet with skip connection"""
def __init__(self, in_channel, n_class=2, feature_scale=2, use_deconv=True, use_bn=True):
super(UNet, self).__init__()
self.in_channel = in_channel
self.n_class = n_class
self.feature_scale = feature_scale
self.use_deconv = use_deconv
self.use_bn = use_bn
filters = [64, 128, 256, 512, 1024]
filters = [int(x / self.feature_scale) for x in filters]
# Down Sample
self.maxpool = nn.MaxPool2d(kernel_size=2, stride=2, pad_mode="same")
self.conv0 = UnetConv2d(self.in_channel, filters[0], self.use_bn)
self.conv1 = UnetConv2d(filters[0], filters[1], self.use_bn)
self.conv2 = UnetConv2d(filters[1], filters[2], self.use_bn)
self.conv3 = UnetConv2d(filters[2], filters[3], self.use_bn)
self.conv4 = UnetConv2d(filters[3], filters[4], self.use_bn)
# Up Sample
self.up_concat1 = UnetUp(filters[1], filters[0], self.use_deconv, 2)
self.up_concat2 = UnetUp(filters[2], filters[1], self.use_deconv, 2)
self.up_concat3 = UnetUp(filters[3], filters[2], self.use_deconv, 2)
self.up_concat4 = UnetUp(filters[4], filters[3], self.use_deconv, 2)
# Finale Convolution
self.final = nn.Conv2d(filters[0], n_class, 1)
def construct(self, inputs):
x0 = self.conv0(inputs) # channel = filters[0]
x1 = self.conv1(self.maxpool(x0)) # channel = filters[1]
x2 = self.conv2(self.maxpool(x1)) # channel = filters[2]
x3 = self.conv3(self.maxpool(x2)) # channel = filters[3]
x4 = self.conv4(self.maxpool(x3)) # channel = filters[4]
up4 = self.up_concat4(x4, x3)
up3 = self.up_concat3(up4, x2)
up2 = self.up_concat2(up3, x1)
up1 = self.up_concat1(up2, x0)
final = self.final(up1)
return final
那么连忙来 ModelArts 实际吧!在 ModelArts 执行训练阐明这里以脚本形式运行,能够在 Notebook 环境的终端执行(可参照“终端运行示例”的命令行),也可在 Notebook 环境中新建 MindSpore 的内核环境执行(可参照“运行脚本”的命令行)。留神:Notebook 环境内上传、创立和编辑的文件均在 /home/ma-user/work 目录下。1. 创立 NoteBook 环境咱们登录 ModelArts,找到新版 NoteBook:
抉择如下环境:
- 下载残缺工程在 Notebook 环境内新建终端,执行如下代码,将我的项目代码 unet.zip 下载至云端环境内,并解压。留神以下在 Treminal 中执行,留神要切换到 work 目录:终端运行示例:ls
cd work
wget https://alexed.obs.cn-north-4…
unzip unet.zip
运行脚本:!wget https://alexed.obs.cn-north-4…
!unzip unet.zip
这里试试终端运行,先来下载工程执行解压缩:
运行实现截图:
这里须要留神,如果解压缩的时候报错了,就将压缩包链接复制到浏览器关上,会主动下载到电脑本地,之后解压缩,再压缩成.zip 文件,之后再上传到 NoteBook,之后再解压就行了。切记,肯定是先解压,后压缩,不要间接上传,因为还是会报错的。咱们能够失去工程残缺目录构造:├──unet
├──README.md
├──data // 预处理后的数据集文件夹
├──raw_data // 原始数据集
├──out_model
│ ├──om_script.sh // air 模型转 om 脚本
│ ├──unet_hw960_bs1.air // 训练后的 air 文件
│ ├──unet_hw960_bs1_noAIPP.om // om 文件,用于推理
├──pred_visualization // 可视化图片保留文件
├──src // 性能函数
│ ├──unet_medical // U-Net 网络
│ ├──unet_nested // U-Net++ 网络
│ ├──config.py // 配置文件
│ ├──data_loader.py // 数据加载
│ ├──eval_callback.py // 训练时评估回调
│ ├──loss.py // 损失函数
│ ├──utils.py // 工具类函数
├──draw_result_folder.py // 文件夹图片可视化
├──draw_result_single.py // 单张图片可视化
├──eval.py // 模型验证
├──export.py // 模型导出,ckpt 转 air/mindir/onnx
├──postprocess.py // 后处理
├──preprocess.py // 前解决
├──preprocess_dataset.py // 数据集预处理
├──train.py // 模型训练
├──requirements.txt - 配置文件参数文件参数脚本为 src/config.py,包含 unet_medical,unet_nested,unet_nested_cell,unet_simple,unet_simple_coco,共 5 种配置,示意模型与数据集之间的组合。这里应用 unet_simple_coco,示意应用 unet 模型,配合 coco 格局数据集进行训练,因而可依据理论开发状况批改 cfg_unet_simple_coco 内的参数。4. 数据集预处理数据集预处理是指将类 coco 数据集转化成模型训练须要数据格式。MindSpore 数据集预处理需调用脚本 src/ config.py。预计数据集预处理所需工夫约为 10 分钟。这里既能够在终端运行,也能够在 Notebook 环境中新建 MindSpore 的内核环境执行。终端运行示例:python3 preprocess_dataset.py –data_url=./data/
–data_url:数据集预处理后的保留门路。运行脚本:!python3 preprocess_dataset.py –data_url=./data/
运行截图:留神:预处理完的数据集会保留在 /unet/data/ 文件夹下。5. 模型训练 MindSpore 模型训练需调用如下脚本:preprocess_dataset.py:将类 coco 数据集转化成模型训练须要数据格式。src/unet_xxx/:寄存 unet/unet++ 模型构造。src/data_loader.py:存放数据加载性能函数。src/eval_callback:寄存 cb 函数,用于训练过程中进行 evalsrc/utils.py:mindspore 自定义 cb 函数,自定义 metrics 函数。train.py 预计模型训练所需工夫约为 20 分钟。终端运行示例:python train.py –data_url=./data/ –run_eval=True
–data_url:数据集输出门路。–run_eval:True 示意训练过程中同时进行验证。运行脚本:!python train.py –data_url=./data/ –run_eval=True
运行截图:最终运行后果:
通过 5 轮的训练,图像宰割模型已趋近收敛,并已找到最优 Dice 系数(Dice coefficient),阐明模型预测值和标签的最高类似度达到大概 0.9968。注:Dice 系数是一种度量汇合类似度的函数,通常用于计算两个样本的类似度(取值范畴为 [0,1])。6. 推理验证 MindSpore 模型推理需调用如下脚本:src/unet_xxx/:寄存 unet/unet++ 模型构造。src/data_loader.py:存放数据预处理,数据加载性能函数。src/utils.py:mindspore 自定义 cb 函数,自定义 metrics 函数。eval.py 终端运行示例:python eval.py –data_url=./data/ –ckpt_path=./ckpt_0/best.ckpt
–data_url:数据集输出门路。–ckpt_path:ckpt 读取门路。运行脚本:!python eval.py –data_url=./data/ –ckpt_path=./ckpt_0/best.ckpt
运行截图:最终运行后果截图:
通过穿插验证,Dice 系数为 0.9978,IOU 系数为 0.9954,阐明模型在验证集体现优异。注:IOU(Intersection over Union)是一个度量函数,用来形容两个物体边界框的重叠水平(取值范畴为 [0,1]),重叠的区域越大,IOU 值就越大。7. 后果可视化能够通过画图的形式将图像的后果可视化,不便查看。可视化办法有两种:draw_result_single.py:单张图片可视化,输入单张图片的裁剪画图后果 crop_plot.png 和模型预测的后果 predict_plot.png。draw_result_folder.py:文件夹图片可视化,输入文件夹内图片的模型预测后果 predict.png。单张图片可视化,终端运行示例:python draw_result_single.py –data_url=./data/SW1hZ2VfMjAyMTA3MjcxNTE2MzYzNzk –save_url=./pred_visualization –ckpt_path=./ckpt_0/best.ckpt
–data_url:数据集输出门路(到单张图像)。–save_url:输入图像保留门路。–ckpt_path:ckpt 读取门路。运行脚本:!python draw_result_single.py –data_url=./data/SW1hZ2VfMjAyMTA3MjcxNTE2MzYzNzk –save_url=./pred_visualization –ckpt_path=./ckpt_0/best.ckpt
最终运行失去后果:这是间接将运行后果绘制到原图上的后果,红色局部是预测的后果,其实还有蓝色的区域(标签),然而简直看不到蓝色区域了,因为简直全副被红色的预测后果笼罩了,能够预测准确度很高啊。
文件夹图片可视化,终端运行示例:python draw_result_folder.py –data_url=./data/ –save_url=./pred_visualization –ckpt_path=./ckpt_0/best.ckpt
–data_url:数据集输出门路(到图像文件夹)。–save_url:输入图像保留门路。–ckpt_path:ckpt 读取门路。运行脚本:!python draw_result_folder.py –data_url=./data/ –save_url=./pred_visualization –ckpt_path=./ckpt_0/best.ckpt
运行截图: - 模型保留如果想在昇腾 AI 处理器上执行推理,能够通过网络定义和 CheckPoint 生成 AIR 格局模型文件。终端运行示例:python export.py –ckpt_file=”./ckpt_0/best.ckpt” –width=960 –height=960 –file_name=”out_model/unet_hw960_bs1″ –file_format=”AIR”
ckpt_file:ckpt 门路。width:模型输出尺寸。height:模型输出尺寸。file_name:输入文件名。file_format:输入格局,必须为 [“ONNX”,“AIR”,“MINDIR”]。运行脚本:!python export.py –ckpt_file=”./ckpt_0/best.ckpt” –width=960 –height=960 –file_name=”out_model/unet_hw960_bs1″ –file_format=”AIR”
输入后果:out_model/unet_hw960_bs1.air 最初将 unet_hw960_bs1.air 模型下载至本地,供后续 MindX SDK 推理试验应用。贴心提醒:完结后请及时进行 Notebook 训练作业,防止资源节约和额定破费!!!基于华为云平台的 ECS 实现部署让咱们先来认识一下!华为云 ECS 平台弹性云服务器(Elastic Cloud Server, ECS)是一种云上可随时自助获取、可弹性伸缩的计算服务,可帮忙您打造平安、牢靠、灵便、高效的应用环境。Ascend 310
昇腾 310 是一款高效、灵便、可编程的 AI 处理器。基于典型配置,八位整数精度(INT8)下的性能达到 22TOPS,16 位浮点数(FP16)下的性能达到 11 TFLOPS,而其功耗仅为 8W。昇腾 310 芯片采纳华为自研的达芬奇架构,集成了丰盛的计算单元,在各个领域失去广泛应用。随着全 AI 业务流程的减速,昇腾 310 芯片可能使智能零碎的性能大幅晋升,部署老本大幅升高。昇腾 310 在功耗和计算能力等方面冲破了传统设计的束缚。随着能效比的大幅晋升,昇腾 310 将人工智能从数据中心延长到边缘设施,为安全城市、主动驾驶、云服务和 IT 智能、智能制作、机器人等利用场景提供了全新的解决方案,使能智慧将来。搭建环境这里须要购买 ECS 服务 -Ai1 资源,并进行环境的配置和降级,咱们次要介绍下其中的 cmake 的降级局部。揭示下,以下操作根本全副以脚本形式运行,能够间接在弹性云服务器的终端执行,举荐应用 MobaXterm 连贯 ECS。留神 cmake 的降级过程耗时较长,请合理安排工夫 1. 更新软件 sudo apt update # 更新软件列表
sudo apt upgrade # 更新软件
sudo apt autoremove # 革除不必要的依赖
sudo apt autoclean # 革除缓存
sudo apt clean # 革除软件包缓存
最终运行实现效果图: - 更新 cmake 首先,革除旧版 camke(3.10.2):sudo apt autoremove cmake
运行实现效果图:接下来下载并解压新版 cmake(3.20.1)mkdir codes # 创立 codes 文件夹
cd codes # 进入 codes 文件夹
wget https://github.com/Kitware/CM… –no-check-certificate # 下载
tar -zxvf v3.20.1.tar.gz # 解压
cd CMake-3.20.1
运行实现效果图:装置 cmake./bootstrap
make
sudo make install
运行实现效果图:返回主目录:cd
ECS 部署 1. 下载我的项目代码这里能够间接复制如下链接到浏览器关上,会主动下载到本地,之后将我的项目文件 unet_sdk.zip 上传至华为云 ECS 弹性云服务器 /root/ 目录下,并解压。https://alexed.obs.cn-north-4…
或者像之前在 NoteBook 下载工程文件那样,间接在 ECS 的终端通过 wget 命令下载,间接下载到 ECS:wget https://alexed.obs.cn-north-4…
而后,将之前训练实现的 unet_hw960_bs1.air 模型上传至服务器 /root/unet_sdk/model/ 目录下。我的项目文件目录为:├── unet_sdk
├── README.md
├── data // 数据集
│ ├── 1
│ │ ├──image.png // 图片
│ │ ├──mask.png // 标签
│ …
├── model
│ ├──air2om.sh // air 模型转 om 脚本
│ ├──xxx.air //air 模型
│ ├──xxx.om //om 模型
│ ├──aipp_unet_simple_opencv.cfg // aipp 文件
├── pipeline
│ ├──unet_simple_opencv.pipeline // pipeline 文件
├── main.py // 推理文件
├── run.sh // 执行文件
├── requirements.txt // 须要的三方库 -
模型转换这里要将 unet_hw960_bs1.air 模型转为昇腾 AI 处理器反对的.om 格局离线模型,此处模型转换须要用到 ATC 工具。那么顺便聊聊 ATC 工具,昇腾张量编译器(Ascend Tensor Compiler,简称 ATC)是昇腾 CANN 架构体系下的模型转换工具,它能够将开源框架的网络模型或 Ascend IR 定义的单算子形容文件(json 格局)转换为昇腾 AI 处理器反对的.om 格局离线模型。模型转换过程中能够实现算子调度的优化、权值数据重排、内存应用优化等,能够脱离设施实现模型的预处理。局部参数展现如下,更多详情请参考文档。
这里咱们要运行脚本:cd /root/unet_sdk/model/ # 切换至模型存储目录
atc –framework=1 –model=unet_hw960_bs1.air –output=unet_hw960_bs1 –input_format=NCHW –soc_version=Ascend310 –log=error –insert_op_conf=aipp_unet_simple_opencv.cfg
framework:原始框架类型。model:原始模型文件门路与文件名。output:转换后的离线模型的门路以及文件名。input_format:输出数据格式。soc_version:模型转换时指定芯片版本。log:显示日志的级别。insert_op_conf:插入算子的配置文件门路与文件名,这里应用 AIPP 预处理配置文件,用于图像数据预处理。如果运行结果显示 ATC run success,示意模型转换胜利,失去 unet_hw960_bs1.om 模型。模型转换胜利之后,能够应用 MindX SDK mxVision 运行脚本,在 Ascend 310 上进行推理。留神 air 模型转 om 只反对动态 batch,这里 batchsize=1。3. MindX SDK mxVision 执行推理 MindX SDK 执行推理的业务流程:通过 stream 配置文件,Stream manager 可辨认须要构建的 element 以及 element 之间的连贯关系,并启动业务流程。Stream manager 对外提供接口,用于向 stream 发送数据和获取后果,帮忙用户实现业务对接。plugin 示意业务流程中的根底模块,通过 element 的串接构建成一个 stream。buffer 用于外部挂载解码前后的视频、图像数据,是 element 之间传递的数据结构,同时也容许用户挂载元数据(Metadata),用于寄存结构化数据(如指标检测后果)或过程数据(如缩放后的图像)。
这里简要介绍下 MindX SDK 根底概念:
更多详情可参考文档。MindX SDK 业务流程编排:Stream 配置文件以 json 格局编写,用户必须指定业务流名称、元件名称和插件名称,并依据须要,补充元件属性和上游元件名称信息。以下为本次部署所用 pipeline/unet_simple_opencv.pipeline 文件内容如下,可依据理论开发状况进行批改。{
“unet_mindspore”: {"stream_config": {"deviceId": "0"}, "appsrc0": { "props": {"blocksize": "4096000"}, "factory": "appsrc", "next": "mxpi_imagedecoder0" }, "mxpi_imagedecoder0": { "props": { "cvProcessor": "opencv", "outputDataFormat": "BGR" }, "factory": "mxpi_imagedecoder", "next": "mxpi_imagecrop0" }, "mxpi_imagecrop0": { "props": { "cvProcessor": "opencv", "dataSource": "ExternalObjects" }, "factory": "mxpi_imagecrop", "next": "mxpi_imageresize0" }, "mxpi_imageresize0": { "props": { "handleMethod": "opencv", "resizeType": "Resizer_Stretch", "resizeHeight": "960", "resizeWidth": "960" }, "factory": "mxpi_imageresize", "next": "mxpi_tensorinfer0" }, "mxpi_tensorinfer0": { "props": { "dataSource": "mxpi_imageresize0", "modelPath": "model/unet_hw960_bs1_AIPP.om" }, "factory": "mxpi_tensorinfer", "next": "mxpi_dumpdata0" }, "mxpi_dumpdata0": { "props": {"requiredMetaDataKeys": "mxpi_tensorinfer0"}, "factory": "mxpi_dumpdata", "next": "appsink0" }, "appsink0": { "props": {"blocksize": "4096000"}, "factory": "appsink" }
}
}
对于其的具体介绍如下:
这里要针对性做些批改:首先,批改 modelPath。关上 pipeline/unet_simple_opencv.pipeline 文件,将 mxpi_tensorinfer0 元件的属性 modelPath(模型导入门路)批改为之前模型转换后保留的模型 model/unet_hw960_bs1.om。批改后后果为:”modelPath”: “model/unet_hw960_bs1.om”
接下来就能够运行脚本试试了。先激活 mxVision 环境变量:. /root/mxVision/set_env.sh
之后,运行脚本:cd /root/unet_sdk/ # 切换至推理脚本目录
bash run.sh
运行后果:
留神:因为 MindX SDK 默认日志级别为 debug,此日志级别下,dump_data 插件会将所有内容打印至终端,影响日志查看。因而能够通过批改日志级别的形式,防止打印不必要的信息。具体批改办法如下:批改日志:vi $MX_SDK_HOME/config/logging.conf
按 i 键批改 Line23 行,日志级别可改为 0 或 1 或 2。# Log level: -1-debug, 0-info, 1-warn, 2-error, 3-fatal
global_level=0
单击键盘的 Esc 键,输出:wq!,保留并退出。揭示:试验完结后请及时敞开 / 删除 ECS 弹性云服务器,防止资源节约和额定破费。结语回顾整个过程,次要介绍如何应用 MindSpore 框架构建 U -Net 网络模型,应用线上昇腾算力在工业质检的模仿数据集上进行训练,并将保留的模型编译生成适配昇腾 AI 处理器的离线模型,部署在华为云 ECS 上,应用 MindX SDK mxVision 进行推理,从而实现图像宰割的工作。通过这次体验,能够理解工业质检的背景,把握 MindSpore 的根底应用,相熟 U -Net 网络和图像宰割的原理常识,把握华为云 ModelArts 和 ECS 的环境搭建,相熟昇腾 910 和昇腾 310 处理器的应用,把握离线模型的转换方法,以及相熟 MindX SDK mxVision 的应用。总的来说,还是很不错的,可能感触到华为基于软硬件协同打造云端边的全栈全场景 AI 解决方案的倒退和成熟,曾经比最后我刚刚接触的时候不可同日而语,倒退迅速,展现出了蓬勃的生命力和广大的发展前景,期待将来的更多惊喜。