12 OPENVINO intermediate course experiment 4 学习模型优化器并进行图片分类

本文档详述了如何使用OpenVINO的模型优化器(DLDT)将深度学习模型转换为IR文件,以进行高效推理。实验以SqueezeNet为例,介绍了模型获取、转换和分类图像的过程,强调了模型优化和性能评估的重要性。
摘要由CSDN通过智能技术生成

1 说明

本实验所有代码均在ubuntu18.04 + OpenVINO 2020R3.LTS installed 环境下验证通过,若需要代码移植,请务必检查环境配置是否与本实验环境相同。

2 实验目的

1、使用模型优化器生成IR文件。
2、使用python分类示例对图像进行分类。

3 任务内容

1、使用模型优化器生成IR文件。
2、使用python分类示例对图像进行分类。

4 实验原理

一、DLDT介绍

模型优化器(Model Optimizer)和推理引擎(Inference Engine)是整个工具套件的核心。

模型优化器是一个跨平台的命令行工具,可促进训练和部署环境之间的转换,执行静态模型分析并自动调整深度学习模型,以便在端点目标设备上实现最佳执行。模型优化器旨在支持多种深度学习支持的框架和格式。在运行模型优化器时,无需考虑要使用的目标设备,MO的相同输出可用于所有目标。模型优化器支持的框架和格式有Caffe(大多数公共分支机构)、TensorFlow、MXNet、Kaldi、ONNX。模型优化器工作流程:

*为支持的深度学习框架配置模型优化器,该框架用于训练模型。
*提供特定的网络拓扑,调整后的权重和偏差(带有一些可选参数)的训练网络作为输入。
*运行模型优化器以执行特定的模型优化(例如,某些网络层的水平融合)。精确优化是特定于框架的,具体可参考Intel官网相应的页面:转换Caffe模型,转换TensorFlow模型,转换MXNet模型,转换Kaldi模型,转换ONNX模型。
模型优化器生成网络的中间表示(IR)作为输出,该网络用作所有目标上的推理引擎的输入。IR是一对描述整个模型的文件:
① .xml:拓扑文件,描述网络拓扑的XML文件
② .bin:经过训练的数据文件,包含权重和偏差二进制数据的.bin文件
推理引擎是提供统一的API以将推理与应用程序逻辑集成,主要作用如下:

作为模型的输入。该模型以模型优化器生成的中间表示(IR)的特定形式呈现。
优化目标硬件的推理执行。
在嵌入式推理平台上提供减少占用空间的推理解决方案。
推理引擎支持IR格式模型,并可使用相同的模型在多种设备上运行推理,例如英特尔CPU、凌动、酷睿或至强、英特尔集成显卡、Movidius VPU和FPGA。
DLDT的具体工作流程如下图所示。
在这里插入图片描述

需要注意的是,使用模型优化器转换模型是一个离线操作,只需要执行一次。不需要太久的时间,就会看到转换结果。一旦有了IR文件,就可反复使用它们进行推理,模型优化器的功能不仅仅是转换模型,还可以在神经网络上执行各种优化,比如将数据格式转换为FP16等。

二、应用构建的流程

创建人工智能应用或产品的流程如下:

在这里插入图片描述

1.找到合适的模型

首先需要一个基于深度学习的模型来执行分析任务,比如分类、检测、分割等。整个模型通常在另一个软件中进行训练,例如TensorFlow或Caffe等训练软件。

2.进行推理之前的准备

模型通常是在云环境中训练的,因为云环境拥有所需的所有计算资源,但是需要为推理做好准备。比如模型通常采用浮点格式,有时用户想在只能执行整数或其他格式的设备上运行模型,因此,需要转换模型格式。

3.性能指标评测

准备好进行推理的模型后,需要对其进行性能指标评测,了解其性能,以及每秒可以执行多少次推理。可以使用多项优化技术和多种数据格式对多个模型进行基准测试。

4.选择能够满足性能要求的平台

5.查看解码和编码密度

选择合适硬件的另一个考虑因素是设备可支持多少个摄像头,如果销售的产品可以支持5个或10个摄像头,那么其中的差异就很大。为此,需要查看解码密度。

6.由于解码、编码和推理等任务是一起运行的,所以得到的结果可能差强人意

例如,如果推理结果是每秒100次推理,解码每秒可以处理100帧,当他们一起运行时,也许每秒只能处理80帧,因此如果需要模拟完整的工作负载,也就是说,所有功能同时执行,就需要选择合适的系统。通常用STREAMER模拟整个流程。

7.构建软件

在确认所选择的系统可以胜任后,我们需要构建软件,或者使用OpenVINO 将视频分析流程和推理整合到现有应用中。

下面我们重点介绍如何获取一个深度学习的模型,然后进行模型转换,最后使用一个OpenVINO示例来创建AI应用。

三、获取深度学习的模型

获取模型有3种方法。

1. 第一是通过某个途径购买或下载模型或自行训练。

训练模型是一项单独的技术,并非本课程的重点,在此不做详细阐述。

2. 第二个是从OpenVINO model-zoo中下载模型。

OpenVINO中共有40多种模型,它们有着广泛用途,可用于检测、分类、分割、重新识别、2D、3D、音频处理等。这些模型可以免费下载使用,并且针对英特尔硬件进行了优化,性能非常出色。

查看模型优化器和推理引擎的文档具体操作如下:

访问OpenVINO工具套件文档页面
链接: link.
可以查看模型优化器和推理引擎的文档。单击Model-Zoo链接查看相关内容,可以看到用于对象检测的模型、支持对象识别的模型、重新识别模型等。比如需要寻找可以检测人员的模型,则可以使用faster-rcnn-resnet101-coco-sparse-60-0001这个模型,单击这个模型,可获得其所有信息,包括精度、输入、输出等。

下载模型的具体操作如下:
访问Model-Zoo存储库https://download.01.org/opencv
链接: link.
比如选择面部检测模型,可以通过3种不同的格式可以下载,即FP16、INT8和FP32。这里IR文件包含xml和bin文件,右击 save-link-as便可获得模型。

3. 最后一个选项是使用模型下载器

这是一个非常简单的Python实用程序,可以下载许多公开模型和所有Model-Zoo模型。可以指定所需的模型、具体精度比如FP32、FP16、INT8。可以使用列表一次下载一个或多个模型。比如下载squeezenet模型,并将其放在这个目录中,具体如下。
在这里插入图片描述

如果是从OpenVINO model-zoo中获得了模型,则该模型已经过优化并且为IR格式。如果不是,需要为其进行模型转换。可以使用模型优化器进行模型转换,我们将在下一项目中对此进行深入讨论和练习。最后可以使用OpenVINO提供的一个示例或演示,OpenVINO 包含约40个C、C++ 和Python演示和示例,选择一个预训练模型或IR格式的任何模型,将其插入其中一个示例就得到一个AI应用。

四、SqueezeNet介绍

SqueezeNet的核心指导思想是——在保证精度的同时使用最少的参数。

1 设计思想

(1)用1×1卷积核代替3×3卷积核。理论上一个1×1卷积核的参数是一个3×3卷积核的1/9,可以将模型尺寸压缩9倍。
(2)减少3×3卷积的输入通道数。减少输入通道数不仅可以减少卷积的运算量,而且输入通道数与输出通道数相同时还可以减少MAC。
(3)延迟下采样。分辨率越大的输入能够提供更多特征的信息,有利于网络的训练判断,延迟下采样可以提高网络精度。

2 网络架构

SqueezeNet提出了一种多分支结构——fire model。这个结构是由squeeze层和expand层构成的。squeeze层是由s1个1×1卷积组成,主要是通过1×1卷积降低expand层的输入维度。expand层利用e1个1×1和e3个3×3卷积构成多分支结构提取输入特征,以此提高网络的精度(其中文中给出e1=e3=4×s1)。
在这里插入图片描述

其中,expand层中,把1×1和3×3得到的feature map进行通道上的concat。

3 操作步骤

步骤1
登录实验平台,进入实验环境并打开终端。

步骤2
执行命令su,输入root用户密码root@openlab,切换到root目录。

步骤3
执行命令cd ~/51openlab/02/exercise-1/,进入exercise-1目录。

步骤4
执行export lab_dir=~/51openlab/02/exercise-1/设置lab_dir环境变量。

步骤5
执行如下命令,初始化OpenVINO工具套件。

# source /opt/intel/openvino/bin/setupvars.sh

步骤6
执行如下命令,查看squeezenet1.1的网络。

# netron $lab_dir/public/squeezenet1.1/squeezenet1.1.prototxt

在这里插入图片描述

步骤7
执行如下命令,进入模型优化器目录。

# cd /opt/intel/openvino/deployment_tools/model_optimizer

步骤8
执行如下命令,用模型优化器对模型进行转换。

# mo_caffe.py --input_model $lab_dir/public/squeezenet1.1/squeezenet1.1.caffemodel --output_dir $lab_dir

在这里插入图片描述

步骤9
执行如下命令,查看输出的xml文件。

# netron $lab_dir/squeezenet1.1.xml

在这里插入图片描述

步骤10
执行如下命令,返回实验目录并查看目录下文件内容。

# cd $lab_dir
# ls

在这里插入图片描述

步骤11
执行vi squeezenet1.1.labels命令,查看标签文件内容。

在这里插入图片描述

步骤12
执行ll images命令,查看实验预置的图片信息。
在这里插入图片描述

步骤13
执行sudo eog images/car.png命令,查看小汽车图片。
在这里插入图片描述

步骤14
执行如下命令,从推理引擎中拷贝一个简单的分类示例到实验目录下。

# cp /opt/intel/openvino/inference_engine/samples/python/classification_sample/classification_sample.py ./

步骤15
执行vi classification_sample.py命令,编辑第127行代码,调整输出格式。
在这里插入图片描述

步骤16
执行如下命令,指定相应的模型文件和标签文件,对汽车图片进行分类。

# python3 classification_sample.py -i images/car.png -m squeezenet1.1.xml --labels squeezenet1.1.labels -d CPU

在这里插入图片描述

由此可见,通过该推理运算,识别到了图片中的汽车,置信度为83%。

5 实际操作

在这里插入图片描述
在终端使用netron打开文件,可以查看squeezenet1.1的网络
在这里插入图片描述
此时会占用浏览器端口,在步骤9打开xml文件需要先关闭占用的应用

在这里插入图片描述
linux 查看文件显示行号
1.用vi或vim打开文件显示行号:

显示当前行号: :nu

显示所有行号: :set nu

在这里插入图片描述
其它正常输入即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

THE ORDER

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值