【摘要】 基于华为云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;蓝色箭头示意 3x3 卷积,用于特征提取;灰色箭头示意 skip-connection,用于特色交融;红色箭头示意池化 pooling,用于升高维度;绿色箭头示意上采样 upsample,用于复原维度;青色箭头示意 1x1 卷积,用于输入后果。同时,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:

抉择如下环境:

  1. 下载残缺工程在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
  2. 配置文件参数文件参数脚本为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
    运行截图:
  3. 模型保留如果想在昇腾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 # 革除软件包缓存
    最终运行实现效果图:
  4. 更新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 // 须要的三方库
  5. 模型转换这里要将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解决方案的倒退和成熟,曾经比最后我刚刚接触的时候不可同日而语,倒退迅速,展现出了蓬勃的生命力和广大的发展前景,期待将来的更多惊喜。