昇腾工业质检应用实战

这篇具有很好参考价值的文章主要介绍了昇腾工业质检应用实战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

随着新一轮科技革命和产业变革的加速演进,全球各国都在借助新技术推动制造业升级,从工业2.0自动化开始兴起,到工业3.0信息化普及,如今正迈向工业4.0智能化。借助IoT、工业大数据、人工智能等先进技术实现从低端劳动密集型产业向高端科技型产业的制造升级。

在应用人工智能技术之前,部分场景下已出现传统机器视觉进行质检的案例。但是由于产品零件复杂、光源多样等因素的限制,更多场景还是依赖于人工质检。而人工智能技术的融合可进一步提升检测精度,很多实践已证明AI算法可实现高达99%以上检测精度,可以应用在绝大多数工业质检场景中,人工智能已经进入场景化应用时代。

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

从AI算法到工业制造场景化应用还有很远,算法开发、应用开发、业务部署是阻碍AI应用进入工业生产的三大鸿沟。

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

为此,华为昇腾计算秉承“硬件开放、软件开源”的理念,打造了昇腾智能制造使能平台,致力于推进制造行业转型升级。

在硬件方面,华为提供从模组/板卡到服务器/集群的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应用开发。

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

简介

在这里使用工业质检场景中的模拟数据集,采用MindSpore深度学习框架构建U-Net网络,在华为云平台的ModelArts上创建基于昇腾910处理器的训练环境,启动训练并得到图像分割的模型;之后在华为云平台的ECS弹性云服务器上创建基于昇腾310处理器的推理环境,将该模型转换成离线模型,使用MindXSDKmxVision执行推理任务。

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

应用场景效果图:

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

业务流层图:

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

基于华为云平台的ModelArts完成训练

先来介绍一下基本概念!认识一下!

华为云 ModelArts 平台

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

ModelArts 是面向开发者的一站式 AI 平台,为机器学习与深度学习提供海量数据预处理及交互式智能标注、大规模分布式训练、自动化模型生成,及端-边-云模型按需部署能力,帮助用户快速创建和部署模型,管理全周期 AI 工作流。

MindSpore深度学习框架

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

昇思MindSpore是一个全场景深度学习框架,旨在实现易开发、高效执行、全场景覆盖三大目标,提供支持异构加速的张量可微编程能力,支持云、服务器、边和端多种硬件平台。

Ascend 910

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

昇腾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上标出蓝色区域,作为检测目标(前景),分为原始数据集和预处理后的数据集。

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

原始数据集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被广泛应用于图像分割领域,如卫星图像分割、工业瑕疵检测等。

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

U-Net网络具有如下特点:

全卷积网络

U-Net网络使用了 “全卷积网络” ,可以使用很少的训练图像就能产生更精确的分割。全卷积网络的主要思想是用连续的层来补充通常的收缩网络,其中池化算子被上采样算子取代。因此,这些层增加了输出的分辨率。为了定位,将收缩路径的高分辨率特征与上采样输出相结合。然后,一个连续的卷积层可以学习基于这个信息组装一个更精确的输出。因为全卷机网络和上采样在FCN网络中已出现,在此不过多讲述。

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

数据增强

当只有很少的训练样本可用时,可以通过数据增强来训练网络的不变性和鲁棒性。显微图像需要具备平移和旋转不变性,并且对形变和灰度变化鲁棒。因此将训练样本进行随机弹性形变是训练分割网络的关键。

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

上采样

这里介绍上采样中的反卷积(TransposedConvolution),是指在深度学习计算中,将图像尺寸由小分辨率到大分辨率的映射操作。注意,反卷积只能恢复尺寸,不能恢复数值。

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

压缩路径和扩张路径的U型结构

U-Net网络是“编码器(Encoder)—解码器(Decoder)”网络,是包含压缩路径(contractingpath)和扩张路径(expandingpath)的U型结构。

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

其中,蓝/白色框表示 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操作。

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

纸上得来终觉浅,来看看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:

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

选择如下环境:

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

2. 下载完整工程

在Notebook环境内新建终端,执行如下代码,将项目代码unet.zip下载至云端环境内,并解压。注意以下在Treminal中执行,注意要切换到work目录:

终端运行示例:

ls
cd work
wget https://alexed.obs.cn-north-4.myhuaweicloud.com/unet.zip
unzip unet.zip

运行脚本:

!wget https://alexed.obs.cn-north-4.myhuaweicloud.com/unet.zip 
!unzip unet.zip

这里试试终端运行,先来下载工程

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

执行解压缩:

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

运行完成截图:

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

这里需要注意,如果解压缩的时候报错了,就将压缩包链接复制到浏览器打开,会自动下载到电脑本地,之后解压缩再压缩成.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

3. 配置文件参数

文件参数脚本为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在昇腾推理,人工智能,华为,python,深度学习,华为云

注意:预处理完的数据集会保存在/unet/data/文件夹下。

5. 模型训练

MindSpore模型训练需调用如下脚本:

  • preprocess_dataset.py:将类coco数据集转化成模型训练需要数据格式。
  • src/unet_xxx/:存放unet/unet++模型结构。
  • src/data_loader.py:存放数据加载功能函数。
  • src/eval_callback:存放cb函数,用于训练过程中进行eval
  • src/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

运行截图:

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

最终运行结果:

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

经过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

运行截图:

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

最终运行结果截图:

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

经过交叉验证,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

最终运行得到结果:

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

这是直接将运行结果绘制到原图上的结果,红色部分是预测的结果,其实还有蓝色的区域(标签),但是几乎看不到蓝色区域了,因为几乎全部被红色的预测结果覆盖了,可以预测准确度很高啊。

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

文件夹图片可视化,终端运行示例:

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

运行截图:

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

8. 模型保存

如果想在昇腾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 平台

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

弹性云服务器(Elastic Cloud Server, ECS)是一种云上可随时自助获取、可弹性伸缩的计算服务,可帮助您打造安全、可靠、灵活、高效的应用环境。

Ascend 310

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

昇腾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  # 清除软件包缓存

最终运行完成效果图:

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

2. 更新cmake

首先,清除旧版camke(3.10.2):

sudo apt autoremove cmake

运行完成效果图:

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

接下来下载并解压新版cmake(3.20.1)

mkdir codes  # 创建codes文件夹
cd codes  # 进入codes文件夹
wget https://github.com/Kitware/CMake/archive/refs/tags/v3.20.1.tar.gz --no-check-certificate  # 下载
tar -zxvf v3.20.1.tar.gz  # 解压
cd CMake-3.20.1

运行完成效果图:

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

安装cmake

./bootstrap
make
sudo make install

运行完成效果图:

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

返回主目录:

cd

ECS部署

1. 下载项目代码

这里可以直接复制如下链接到浏览器打开,会自动下载到本地,之后将项目文件unet_sdk.zip上传至华为云ECS弹性云服务器/root/目录下,并解压。

https://alexed.obs.cn-north-4.myhuaweicloud.com/unet_sdk.zip

或者像之前在NoteBook下载工程文件那样,直接在ECS的终端通过wget命令下载,直接下载到ECS:

wget https://alexed.obs.cn-north-4.myhuaweicloud.com/unet_sdk.zip

然后,将之前训练完成的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                // 需要的三方库

2. 模型转换

这里要将unet_hw960_bs1.air模型转为昇腾AI处理器支持的.om格式离线模型,此处模型转换需要用到ATC工具。

那么顺便聊聊ATC工具,昇腾张量编译器(Ascend Tensor Compiler,简称ATC)是昇腾CANN架构体系下的模型转换工具,它可以将开源框架的网络模型或Ascend IR定义的单算子描述文件(json格式)转换为昇腾AI处理器支持的.om格式离线模型。模型转换过程中可以实现算子调度的优化、权值数据重排、内存使用优化等,可以脱离设备完成模型的预处理。

部分参数展示如下,更多详情请参考文档。

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

这里我们要运行脚本:

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上进行推理。

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

注意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),用于存放结构化数据(如目标检测结果)或过程数据(如缩放后的图像)。

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

这里简要介绍下MindX SDK基础概念:

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

更多详情可参考文档。

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"
        }
    }
}

对于其的详细介绍如下:

unet在昇腾推理,人工智能,华为,python,深度学习,华为云
unet在昇腾推理,人工智能,华为,python,深度学习,华为云

这里要针对性做些修改:

首先,修改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

运行结果:

unet在昇腾推理,人工智能,华为,python,深度学习,华为云

注意:由于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解决方案的发展和成熟,已经比最初我刚刚接触的时候不可同日而语,发展迅速,展示出了蓬勃的生命力和广阔的发展前景,期待未来的更多惊喜。文章来源地址https://www.toymoban.com/news/detail-637458.html

到了这里,关于昇腾工业质检应用实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 工业互联网的人工智能与大数据融合应用

    在当今的数字时代,工业互联网已经成为企业竞争的核心,其中人工智能(AI)和大数据技术的融合应用起到了关键的作用。这篇文章将从背景、核心概念、核心算法原理、具体代码实例、未来发展趋势和挑战等方面进行全面的探讨,为读者提供深入的见解。 工业互联网是指将

    2024年02月20日
    浏览(53)
  • 昇腾910b部署Chatglm3-6b进行流式输出【pytorch框架】NPU推理

    配套软件包Ascend-cann-toolkit和Ascend-cann-nnae 适配昇腾的Pytorch 适配昇腾的Torchvision Adapter 下载ChatGLM3代码 下载chatglm3-6b模型,或在modelscope里下载 每个人的服务器都不一样,在ChatGLM3/issues中别人只需要修改指定驱动,但是我的不行 删除模型文件包中的model.safetensors.index.json,否则加

    2024年01月21日
    浏览(68)
  • 机器学习笔记 - windows基于TensorRT的UNet推理部署

            NVIDIA TensorRT是一个用于高性能深度学习推理的平台。TensorRT适用于使用CUDA平台的所有NVIDIA GPU。所以如果需要基于TensorRT部署,至少需要一个NVIDIA显卡,算力5.0以上,比Maxwell更新的架构,可以参考下表。 CUDA GPUs - Compute Capability | NVIDIA Developer https://developer.nvidia.com

    2024年02月05日
    浏览(36)
  • “分割一切”大模型SAM、超轻量PP-MobileSeg、工业质检工具、全景分割方案,PaddleSeg全新版本等你来体验!

    图像分割是计算机视觉的一项基础技术,其目标是将图像中的像素按内容分成不同的类别。它在许多领域有重要应用,比如自动驾驶、工业质检、医疗图像分析、遥感图像解译等。 PaddleSeg 是飞桨高性能图像分割开发套件 ,在图像分割领域做了大量的开源工作,致力于帮助企

    2023年04月19日
    浏览(46)
  • 昇腾芯片解析:华为自主研发的人工智能处理器全面分析

    在当今科技发展的浪潮中,昇腾芯片作为一种新兴的处理器,正引起广泛的关注和讨论。升腾芯片究竟是由哪家公司生产的?这个问题一直困扰着许多人。下面小编将全面介绍、分析升腾芯片的生产商及各类参数、应用,以便读者对其有更全面的了解 昇腾 芯片的生产商 升腾

    2024年04月11日
    浏览(54)
  • 【AI实战】大模型 LLM 部署推理框架的 vLLM 应用

    vLLM is a fast and easy-to-use library for LLM inference and serving. vLLM 速度很快: State-of-the-art serving throughput Efficient management of attention key and value memory with PagedAttention Continuous batching of incoming requests Optimized CUDA kernels vLLM灵活且易于使用: Seamless integration with popular HuggingFace models High-throughput

    2024年02月04日
    浏览(39)
  • 深度学习:使用UNet做图像语义分割,训练自己制作的数据集并推理测试(详细图文教程)

    语义分割(Semantic Segmentation)是图像处理和机器视觉一个重要分支。与分类任务不同,语义分割需要判断图像每个像素点的类别,进行精确分割。语义分割目前在自动驾驶、自动抠图、医疗影像等领域有着比较广泛的应用。我总结了使用UNet网络做图像语义分割的方法,教程很详

    2024年01月18日
    浏览(47)
  • 龙讯旷腾作为首批单位入驻北京昇腾人工智能计算中心

    2023中关村论坛系列活动—北京人工智能产业创新发展大会圆满落幕,围绕北京AI产业发展,政产学研用各界大咖汇聚京城,中国科协副主席束为、北京市副市长于英杰、中国工程院院士廖湘科出席大会。会上,北京市门头沟区政府联合中关村发展集团、华为公司,全力打造北

    2024年02月06日
    浏览(47)
  • 工业级成熟航运港口人工智能产品全球前三船公司及港口码头落地,中国上海人工智能独角兽中集飞瞳全球应用最广规模最大最先进港航AI企业

    中国上海人工智能独角兽CIMCAI中集飞瞳,是全球应用落地最广,规模最大的港口航运人工智能高科技企业。中国人工智能独角兽CIMCAI中集飞瞳 巅峰产品行业第一,产品在全球港区及集装箱枢纽规模投产包括:全球港口码头智能闸口;全球港口岸边卸/装船;全球航运船公司;

    2024年02月05日
    浏览(45)
  • (六)人工智能应用--深度学习原理与实战--理解张量与运算图

    Tensorflow名称中的Tensor即张量,不仅仅是Tensorflow,几乎所有的深度学习平台都以张量为基本的数据结构。简单来说,张量就是多维数组,本质上是一种数据容器,它可以有任意维度,比如矩阵就是二维张量(二维数组)。 深度学习中使用张量来表示数据,计算图是由张量和张量

    2024年02月15日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包