0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenVINO模型优化实测:PC/NB当AI辨识引擎没问题!

jf_cVC5iyAO 来源:易心Microbit编程 作者:易心Microbit编程 2022-12-09 16:13 次阅读

之前我们谈到在Intel OpenVINO架构下,当需要进行AI运算时利用Intel GPU加速一样可获得不错的效能,并且使用YOLO v3进行测试。

这次我们将会自制一个CNN分类器,并透过OpenVINO的模型转换程序转换成IR模型,并进行模型效能与正确率分析。依据Intel官方网站的说明,OpenVINO可以针对不同模型进行优化,目前支持包括TensorflowKerasCaffeONNXPyTorchmxnet等多种模型。

也就是说,当使用者透过其他框架训练完成的模型文件,例如Kerasmodel.h5檔,或者TensorFlowmodel.pb档,只要经过转换就可以在OpenVINO中以最高效能来执行。

3ff11966-7798-11ed-8abf-dac502259ad0.png

不过读者可能会比较在意的就是透过OpenVINO加速后,效能是能提升多少、正确率会不会发生变化?还有就是若我已经有一个训练好的Model,我要如何转换为OpenVINO可以读取的模型呢?

本文将分为两个部份来说明,第一个部份就是如何进行模型转换,第二部份则来评测转换前后的执行效能差异,除了模型比较之外,读者一定会想了解Intel OpenVINO GPUNVIDIA CUDA的差异,这部份也在本文中进行比较,我相信会让读者大开眼界。

OpenVINO模型转换

以目前官方文件所述,OpenVINO架构执行效能最佳的为IR(Intermediate Representations) 格式模型,所谓的IR模型是「中间表达层」,IR模型包含一个binxmlbin包含实际权重的网络权重weight及误差bais数据,而xml则是记载网络结构。

后续当OpenVINO要加载模型时,只要读取这两个档案即可,虽然这样转换须多经过一道手续,但是却可大幅提高执行效能,在此我们介绍如何转换模型。

401d2e20-7798-11ed-8abf-dac502259ad0.png

本次就以较常用的个案「玩猜拳」为例,利用卷积类神经CNN模型制作一个图形分类器,可以对「剪、石、布」以及「无」(代表使用者还没有出拳)的四种图形进行判断。模型采用[224x224x3]的图片格式,本文以Tensorflow为例演练转换过程,其他模型转换方式类似,读者可以参考本例作法进行转换测试。

403c8248-7798-11ed-8abf-dac502259ad0.png

无(N

404ae108-7798-11ed-8abf-dac502259ad0.png

布(P

4074ee76-7798-11ed-8abf-dac502259ad0.png

石(P

40c506cc-7798-11ed-8abf-dac502259ad0.png

剪(S

1. TensorFlow模型转换

一般来说以TensorFlow训练模型的话,那么我们可能会得到两种格式的档案,一种为使用Kerash5档,另外一种则是TensorFlowpb檔,h5档案可以透过python转换成pb档,因此本文仅介绍pb文件的模型转换。

另外为了后续测试能有一致的标准,本文的模型使用GoogleTeachable Machine(简称TM)进行训练,这样可以让读者在与自己的计算机进行效能比较时,能有较公平的比较基准,若读者有自行训练的类神经模型,一样可以参考下面的方式进行转换。

关于TM的训练过程,请自行参考其他教程,本文仅针对最后的模型下载过程进行说明。也就是说,当TM已经训练好模型之后,就可以点选右上角的「Export Model」导出模型。

40faf174-7798-11ed-8abf-dac502259ad0.png

开启导出模型窗口后,点选:1.Tensorflow,然后点选单元格式为2.Savemodel,最后选3.Download my model

412342aa-7798-11ed-8abf-dac502259ad0.png

此时下载的档案内容包含一个文本文件「labels.txt」及文件夹「model.savedmodel」,而在文件夹内则包含「saved_model.pb」及文件夹「assets」及「variables」,接下来我们就可以将此档案转换为IR格式。

41743cdc-7798-11ed-8abf-dac502259ad0.png

下载的tensorflow pb档案。

下一步我们则可以利用OpenVINO内建的「model_optimizer」模块进行优化及模型转换,一般是在「/opt/intel/openvino_安装版本/deployment_tools/model_optimizer/」文件夹内,我们将会选用的转换程序为mo_tf.py,而语法如下

python3 mo_tf.py --saved_model_dir <<模型档案存放文件夹路径>>--output_dir <模型文件输出路径>> --input_shape <<输入层结构>>--data_type <<选用的数据格式>>

举例来说,假设我的pb模型文件存放在「Tensorflow/SaveModel」文件夹内,而要输出到「IR」文件夹,而第一层架构为[1,224,224,3](此代表输入1张图,长宽为224×224,有RGB三色),选用FP32(默认值)为数据格式,此时语法为

python3 mo_tf.py --saved_model_dirTensorflow/SaveModel --output_dir IR --input_shape [1,224,224,3] --data_typeFP32

41959b3e-7798-11ed-8abf-dac502259ad0.png

转换完成会出现的讯息。

41ca9bf4-7798-11ed-8abf-dac502259ad0.png

转换完成的IR模型档案。

当转换完成的讯息出现后,就可以在IR文件夹中看到三个档案「saved_model.bin」、「saved_model.mapping」、「saved_model.xml」,这样就代表转换完成了。

若您原本是使用Kerash5 model档案的话那该怎么办,先转成pb文件结构,再转换成IR即可,以下为h5转换pbpython语法。

import tensorflow as tf

model =tf.keras.models.load_model('saved_model.h5') #h5的档案路径

tf.saved_model.save(model,'modelSavePath')#'modelSavePath'pb模型档案输出路径

h5转换成pb档案后,就可以依照前述方式将再将pb转换成IR档案。除了TensorFlow之外,其他模型的转换方式,可以参考OpenVINO官方网页说明。

https://docs.openvinotoolkit.org/latest/openvino_docs_MO_DG_prepare_model_Config_Model_Optimizer.html

模型转换效率比较

当使用OpenVINO进行模型转换时,并非单纯转换而已,事实上OpenVINO在转换过程会对模型进行优化(算是偷吃步吗?哈哈),优化部份包括以下两种:

1.修剪:剪除训练过程中的网络架构,保留推理过程需要的网络,例如说剪除DropOut网络层就是这种一个例子。

2.融合:有些时候多步操作可以融合成一步,模型优化器检测到这种就会进行必要的融合。

如果要比较优化后的类神经网络差异,我们可以透过在线模型可视化工具,开启两个不同模型档案来查看前后的变化。下图为利用netron分别开启原始pb模型及转换后的IR模型的网络架构图,读者可以发现经过转换后的模型与原始TensorFlow模型有很大的差别,IR模型会将多个网络进行剪除及融合,减少网络层数提升运算效能。

https://netron.app/

以下图为例,左侧为IR模型,右侧为TF模型,两者比较后可以发现,原先使用的Dropout层已经在IR中被删除。

41f4a278-7798-11ed-8abf-dac502259ad0.png

模型转后前后比较图左图为IR模型,右图为原始TensorFlow模型(由于模型都相当大,此处仅呈现差异的一小部份)

OpenVINO转换工作结束后,就会告知优化前后所造成的差异,以本例而言,原本995个节点、1496个路径的类神经网络就被优化为729个节点、1230个路径,因此能提升运算效率。

42255314-7798-11ed-8abf-dac502259ad0.png

解模型转换过程之后,接下来就是测试OpenVINO在执行上是否有效能上的优势。以下会有二个测试,测试项目包括效能及正确率,以了解OpenVINO是否能具有实用性,也就是说在获得效能的同时,是否能保有相同的正确性,让读者对于后续是否采购支持OpenVINO机器有比较的依据:

•在RQP-T37上测试IR模型及TensorFlow Keras h5模型效能比较

OpenVINO iGPUColab GPU效能比较

1.RQP-T37上测试IR模型及Tensorflow上的差异

本测试是同一台机器(RQP-T37)及环境(Ubuntu 20.04.2 LTS)之下进行,模型则采用Google TeachableMachine所制作的手势分类器(猜拳游戏:剪刀石头布),辨识对象为800224x224x3的手势照片,模型采用FP32进行分析辨识总时间及正确率。

为了避免单次测试可能造成的误差,测试取100次的平均及标准偏差,并绘制盒型图(Box plot),本测试并不使用其他测试常采用的fps(Frame per second),而仅计算的是辨识(inference)总时间,不计算档案读取、数据转换过程所耗费的时间。因为本测试主要要了解模型转换后的差异,避免受到其他因素的影响因此不使用fps

42487b8c-7798-11ed-8abf-dac502259ad0.png

(a) IR模型代码段,显示仅计算推论时间。(评估标准为Inference总时间)

426f1422-7798-11ed-8abf-dac502259ad0.png

(b) TensorFlow模型程序片段,显示仅计算推论时间。(评估标准为Inference总时间)

在完成100次执行之后,我们先看原始TensorFlow模型的执行状况如下表,做完800张照片的手势推论,平均时间为38.941,换算辨识一张的时间约0.04秒,而标准偏差0.103,大致换算fps的上限约25,这样的结果算是中规中矩。

429da706-7798-11ed-8abf-dac502259ad0.png

另一方面IR模型进行推论结果则呈现在下图,可以发现效能非常高,分析800张照片平均只要1.332秒,也就是一张224×224的照片仅需要0.00166秒,非常不可思议,换算fps上限约为602,若看标准偏差也只有0.008,代表耗费时间也相当稳定,并无太大起伏。

相对于原始的Tensorflow pb模型来说,效能大约提升了30倍,相当令人惊艳。

42de623c-7798-11ed-8abf-dac502259ad0.png

虽然效能提升如此之多,读者应该会觉得OpenVINOInference引擎可能会在「效能」与「正确性」之间进行trade off,是否在大幅提升效能后,却丧失了最重要的推论正确性?此时观察两次测试时的混淆矩阵可以发现,在TensorFlow模型时800次只有3次将布看成剪刀,正确率为797/800大约0.996

而在IR模型时,800次辨识有9次将石头看成剪刀,所以其正确率为793/800=0.991,事实上两者相差无几,不过有趣的是两个模型所辨识错误的项目不太一样,值得后续再深入讨论。

笔者在此必须强调,OpenVINO架构的效能提升如此之多,个人认为主要在于模型优化(model_optimizer)的过程,虽然Intel CPUGPU虽然有所帮助,但不可能把效能提升到30倍之多。

431140d0-7798-11ed-8abf-dac502259ad0.png

TensorFlow模型辨识混淆矩阵

433eefda-7798-11ed-8abf-dac502259ad0.png

IR模型辨识混淆矩阵

测试小结:

•经过优化的IRTensorFlow模型效能上大幅提升,差异约30

•经过优化的IRTensorFlow模型正确率几乎相当

2.比较OpenVINO iGPUColab GPU

本测试则是使用Colab上的GPU进行加速运算,Google Colab可以说是近几年来最受欢迎的程序开发平台了,尤其是提供免费的GPU加速,可以让使用者在AI运算上获得相当好的效能。因此本次也针对Colab平台进行测试,测试之前查询Colab所提供的GPU规格Tesla T4

43633d90-7798-11ed-8abf-dac502259ad0.png

而根据NVIDIA的规格表,T4具有2,560CUDA核心,FP32的算力为8.1 TFLOPS

4371b500-7798-11ed-8abf-dac502259ad0.png

NVIDIA T4规格

43931786-7798-11ed-8abf-dac502259ad0.png

与前次测试相同,推论对象为800224x224x3的图片,采用原始的TensorFlow pb模型,且确认有开启GPU加速。

经过100次分析后,获得上表可以得知,Colab的指令周期比本次测试用的计算机采用的Intel CPU时效能高,平均一次约28.52秒,相当于分类1张照片只花0.035秒,换算fps上限28.05,这个效能符合Colab 所提供的GPU规格。

读者可能会想到在Colab上的照片读取效能比Local端差多了,这样评估不公平,这里要注意的是,我们测试都仅加总推论时间,并没有计算档案读取的时间。此次测试比较后,OpenVINO效能还是明显较好。不过一样的,笔者认为效能提升是来自于OpenVINO的模型优化。

测试小结:

•同样在pb模型下,Colab采用的GPU加速后,效能大于Intel CPU

IR模型在OpenVINO模型优化及加速后,效能超过NVIDIA CUDA

结论

本次文章主要让读者了解OpenVINO架构的效能与正确性的比较,另外也说明自制模型的转换过程。测试时虽硬件上有明显差距,以及并未使用TensorRT做模型优化,但本测试还是有一定的代表性,也就是说当读者拥有一台Intel计算机时,透过安装OpenVINO ToolKit来进行模型优化,一样可以获得性能相当好的AI辨识引擎,不一定要购买超高等级的显示适配器才能进行AI项目开发。

毕竟一般读者购买计算机一定有CPU,却不一定会购买独立GPU显示适配器,或者像是无法加装显示适配器的笔记本电脑,以往没有独立显卡的计算机以CPU进行AI推论时都会花费大量时间,系统无法实时反应,因此缺乏实用性。而本次测试则是证明在OpenVINO架构下,就可以透过模型优化程序及Intel GPU加速,进而在几乎不影响正确率的结果下得到非常好的效能,这个效能甚至超越 NVIDIA架构。

不过笔者必须提醒读者,目前OpenVINO只有提供Inferencing,尚不提供Training的功能,所以读者必须先透过其他方式进行训练获得模型后,才可以在OpenVINO中进行实地推论。虽然如此,无论是采用Intel的计算机,还是标榜低价的文书计算机,都可以快速进行AI运算,可以说是实做AI系统非常好的工具。

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 架构
    +关注

    关注

    1

    文章

    506

    浏览量

    25429
  • 分类器
    +关注

    关注

    0

    文章

    152

    浏览量

    13162
  • cnn
    cnn
    +关注

    关注

    3

    文章

    350

    浏览量

    22115

原文标题:OpenVINO模型优化实测:PC/NB当AI辨识引擎没问题!

文章出处:【微信号:易心Microbit编程,微信公众号:易心Microbit编程】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    使用OpenVINO Model Server在哪吒开发板上部署模型

    OpenVINO Model Server(OVMS)是一个高性能的模型部署系统,使用C++实现,并在Intel架构上的部署进行了优化,使用OpenVINO 进行推理,推理服务通过gP
    的头像 发表于 11-01 14:19 80次阅读
    使用<b class='flag-5'>OpenVINO</b> Model Server在哪吒开发板上部署<b class='flag-5'>模型</b>

    AI模型的性能优化方法

    AI模型的性能优化是一个复杂而关键的任务,涉及多个方面和策略。以下是一些主要的性能优化方法: 一、模型压缩与
    的头像 发表于 10-23 15:01 292次阅读

    使用OpenVINO C++在哪吒开发板上推理Transformer模型

    OpenVINO 是一个开源工具套件,用于对深度学习模型进行优化并在云端、边缘进行部署。它能在诸如生成式人工智能、视频、音频以及语言等各类应用场景中加快深度学习推理的速度,且支持来自 PyTorch
    的头像 发表于 10-12 09:55 227次阅读
    使用<b class='flag-5'>OpenVINO</b> C++在哪吒开发板上推理Transformer<b class='flag-5'>模型</b>

    AI PC:真正的AI PC,敢于下场

    在过去的半年里,我们无一不在聆听关于人工智能(AIPC的种种声音,然而步入现实生活时,恐怕仍有众多读者对此感到迷茫:这些AI PC究竟具
    的头像 发表于 06-11 15:02 631次阅读

    实测NPU“空转”,AI PC首个落地应用只调用GPU?

    AI PC的一大特征是在传统PC的CPU+GPU基础上,增加NPU加强AI 算力。不过有意思的是,最近某品牌PC机型上的
    的头像 发表于 05-22 00:16 3036次阅读

    英特尔酷睿Ultra处理器突破500个AI模型优化

    英特尔在最新推出的英特尔® 酷睿™ Ultra处理器上宣布,超过500款AI模型已得到优化运行。这款处理器无疑是市场上领先的AI PC处理器
    的头像 发表于 05-09 11:18 696次阅读

    联想4月18日发布AI PC新品,引领AI PC时代

    联想观点,适应未来趋势,PC产业即将步入基于大模型技术的AI PC阶段,引领PC市场进入第三个重要代际更迭。于是,
    的头像 发表于 03-21 15:28 694次阅读

    AI PC是什么?如何变革PC产业(2023)

    AI PC整合了轻量化AI模型,将实现各种生成式AI应用的离线稳态运行。作为设备、边缘计算和云技术的混合体,
    的头像 发表于 12-27 17:37 1415次阅读
    <b class='flag-5'>AI</b> <b class='flag-5'>PC</b>是什么?如何变革<b class='flag-5'>PC</b>产业(2023)

    HarmonyOS:使用MindSpore Lite引擎进行模型推理

    场景介绍 MindSpore Lite 是一款 AI 引擎,它提供了面向不同硬件设备 AI 模型推理的功能,目前已经在图像分类、目标识别、人脸识别、文字识别等应用中广泛使用。 本文介绍
    发表于 12-14 11:41

    如何快速下载OpenVINO Notebooks中的AI模型

    OpenVINO Notebooks是Jupyter Notebook形式的OpenVINO范例程序大集合,方便开发者快速学习并掌握OpenVINO推理程序,并通过Copy&Paste方式将范例中的关键程序应用到自己的
    的头像 发表于 12-12 14:40 1041次阅读
    如何快速下载<b class='flag-5'>OpenVINO</b> Notebooks中的<b class='flag-5'>AI</b>大<b class='flag-5'>模型</b>

    AI PC:深入变革PC产业(2023)

    软件方面,AI PC整合了轻量化AI模型,将实现各种生成式AI应用的离线稳态运行。作为设备、边缘计算和云技术的混合体,
    的头像 发表于 11-22 17:48 1895次阅读
    <b class='flag-5'>AI</b> <b class='flag-5'>PC</b>:深入变革<b class='flag-5'>PC</b>产业(2023)

    NNCF压缩与量化YOLOv8模型OpenVINO部署测试

    OpenVINO2023版本衍生出了一个新支持工具包NNCF(Neural Network Compression Framework – 神经网络压缩框架),通过对OpenVINO IR格式模型的压缩与量化更好的提升
    的头像 发表于 11-20 10:46 1411次阅读
    NNCF压缩与量化YOLOv8<b class='flag-5'>模型</b>与<b class='flag-5'>OpenVINO</b>部署测试

    如何使用OpenVINO C++ API部署FastSAM模型

    象的位置和边界。本文将介绍如何使用 OpenVINO C++ API 部署 FastSAM 模型,以实现快速高效的语义分割。在前文中我们发表了《基于 OpenVINO Python API 部署
    的头像 发表于 11-17 09:53 818次阅读
    如何使用<b class='flag-5'>OpenVINO</b> C++ API部署FastSAM<b class='flag-5'>模型</b>

    基于OpenVINO C# API部署RT-DETR模型

    RT-DETR 是在 DETR 模型基础上进行改进的,一种基于 DETR 架构的实时端到端检测器,它通过使用一系列新的技术和算法,实现了更高效的训练和推理,在前文我们发表了《基于 OpenVINO
    的头像 发表于 11-10 16:59 685次阅读
    基于<b class='flag-5'>OpenVINO</b> C# API部署RT-DETR<b class='flag-5'>模型</b>

    基于OpenVINO C++ API部署RT-DETR模型

    RT-DETR 是在 DETR 模型基础上进行改进的,一种基于 DETR 架构的实时端到端检测器,它通过使用一系列新的技术和算法,实现了更高效的训练和推理,在前文我们发表了《基于 OpenVINO
    的头像 发表于 11-03 14:30 737次阅读
    基于<b class='flag-5'>OpenVINO</b> C++ API部署RT-DETR<b class='flag-5'>模型</b>