不用写程序也能轻松上手 DL Workbench图形化接口工具简介
作者:欧尼克斯实境互动工作室 许哲豪 2021/03/8
看过或玩过「神奇宝贝(宝可梦)」的朋友都知道,训练家们要根据怪兽的属性(火系、草系、电系等)给予适当的培训,再挑选合适的对象及不断的对战磨炼才能有好的战斗表现。同样地,AI模型训练师也是如此,依据不同的应用场景(图像分类、对象检测、图像分割等),挑选适合在指定的硬件(CPU,GPU,VPU,FPGA等)上推理的模型,并反复调整合适的超参数,如此才能有好的成果。
由于这样的调参工作需要耗费大量的时间及精力才能完成,传统上只靠一堆数字报表来分析调整方向,所以非常仰赖专业工程师的能力才能完成。因此IntelOpenVINOToolkit(以下简称OpenVINO)在2019R3版之后提供了一项非常方便的网页式图形化接口工具「DLWorkbench」(DeepLearningWorksBenchmark),让不会写程序、非专业的工程师也能轻易上手进行模型选用、下载、校正、参数调整、效能比较、瓶颈分析、优化及打包部署到目标硬件平台上。
接下来就从“如何安装DLWorkbench”、“DLWorkbench工作流程”进行简单说明,最后再以“实际案例操作:SSD对象检测”完整说明AI模型的分析、优化及部署的步骤。
* 如何安装DLWorkbench
目前OpenVINO提供多种安装方式,其中最简单的方式就是直接到Docker Hub下载(Pull)映像(Images)。如果还不熟悉如何使用Docker安装歩骤的朋友,可以参考“‘Intel OpenVINO教学’如何利用Docker快速构建OpenVINO开发环境”[1]。当然如果想直接在命令行下安装DLWorkbench的朋友也可参考官网说明[2]。不过这里提醒一下,DLWorkbench只有在Linux(Ubuntu18.04/20.04)Docker环境下才能完整使用Intel系列的CPU,iGPU,Myriad(NCS2),HDDL(VPU)等硬件,而在Windows和macOS使用Docker的朋友则只能使用CPU。以下说明皆以Linux环境做为说明。
如果使用Docker安装,只需按照下列指令操作即可完成安装。接着启动DLWorkbench工作环境,启动时可根据不同需求加上-ENABLE_GPU或-ENABLE_MYRIAD或-ENABLE_HDDL指令来增加硬件推理能力,如Fig.1所示。
推理
启动后,会出现Logintoken(一长串数字可先复制起来备用)及一个本地端网址(http://127.0.0.1:5665/?token=xxxxxx),接着将鼠标移至网址处按下左键,点选打开链接(OpenLink),或者直接复制这一长串网址贴到浏览器上,即可进入DLWorkbench网页式操作画面,如Fig.2步骤4所示。若想结束DLWorkbench,除了关闭网页外,还要回到终端按下[Ctrl+C]回到普通命令行状态。
Fig.1 终端命令行成功启动DL Workbench界面。(OmniXRIMar.2021整理制作)
如果下次想快速启动DLWorkbench,可不用执行上面的操作,直接开启网页,输入网址http://127.0.0.1:5665,界面会出现要求输入LoginToken,此时再将刚才的token贴上,按下“Start”便可直接启动。最后按下网页左上角“Create”创建新的工作配置就可以开始测试了,如Fig.2所示。
Fig.2快速启动D LWorkbench网页操作步骤。(OmniXRIMar.2021整理制作)
* DLWorkbench工作流程
在开始实际操作前,先大致说明一下整个DLWorkbench的工作流程,方便后面理解实际操作项目,如Fig.3所示。
1.安装(Install):前面已经介绍过,除了可直接一步一步安装在计算机上,也可支持使用Docker映像方式安装DLWorkbench。另外OpenVINO也支持以Dev-Could方式安装,方便没有采购硬件的人,先利用Intel提供的云端测试平台来选择合适的硬件。
2.模型(Model):不会设计AI模型的人可通过OpenVINO内建的模型下载器(ModelDownloader)选用Intel已预训练好参数的模型(Pre-TrAInedOpenModelZoo),或者使用公开模型(Public)。当然也可支持自己开发并训练好的模型。不过这里只支持Caffe,MXNet,ONNX,TensorFlow和PyTorch格式的模型转换,最后会都转换成OpenVINO支持的中间表示(IntermediateRepresentation,IR)格式模型网络描述及权重文件(*.xml,*.bin)。
3.准备模型(Prepare Model):由于导入的模型有可能过大,因此可通过OpenVINO内建的优化工具(Optimizer)协助处理网络架构调整以减少计算量。另外,一般训练好的模型参数(网络权重)多半都是使用32位浮点数(FP32)来表示,为实现更好的推理效果,这里也可协助校正(Calibration),将32位浮点数(FP32)转换到16位浮点数(FP16),甚至是8位整数(INT8)。虽然在不同场景下可能会损失几个百分点的推理精度,但好处是参数所需内存可缩小至1/2到1/4间,而指令周期则可增加2到3倍。
4.数据集(Dataset):为了测试选用的模型,这里可以导入(Import)自行准备符合常见的公开数据集(如ImageNet,PascalVOC,MSCOCO等)格式的数据集。或者使用生成(Generate)高斯噪声变相产生小型数据集来辅助简易性测试,但请注意这种方式仅适用图像分类模型测试,且因不含标注数据,所以不适用精确度测量及校准工作。如果手上没有现成的数据集,亦可参考官网[3]说明,下载常见的ImageNet,Microsoft COCO等公开数据集。
5.建立基准(Benchmark):准备好模型、数据集及选用欲执行的硬件环境后,便可根据平行流(ParallelStreams)及批次数量(BatchSize)设置值开始进行推理并建立一个基准点(如Fig.4a),其内容包含产出速度(Throughout,FramePerSecond,FPS)、延迟(Latency,ms)。若不满意推理结果,则可重新调整上述参数,建立多个基准点,方便后续比较哪种组合的效果更好。
6.分析(Analyze):为了更容易理解模型每个环节的工作负担,这里提供了许多可视化表格及图形来帮助理解,包含模型主要执行耗时分布(ExecutionTimebyLayer)圆饼图(如Fig.4b)、每一层(Layers)的结构、名称、推理耗时、输出精确度(如Fig.4c),模型整体网络节点连接关系图,模型优化前后(IR及nGraph)的网络结构(如Fig.4d),另外还会搭配颜色表示各节点耗时,方便后续模型建立者调整结构及进一步的参数。
7.部署(Deploy):待反复步骤5和6找到最佳效能点后,便可打包部署到实际硬件上执行,如此就能轻松完成模型分析、优化、部署工作。不过要注意的是这项功能目前仅提供Ubuntu(Linux)使用。
若想更完整了解以上说明步骤,也可参考官方提供的基础教学视频[4]及高级教学视频[5]。
Fig.3DLWorkbench工作流程图。(OmniXRIMar.2021整理制作)
Fig.4DLWorkbench可视化工具,(a)输出速度/延迟时间基准点图,(b)各层运行时间圆饼图,(c)各层信息表,(d)网络结构图及耗时表示。(OmniXRIMar.2021整理制作)
* 实际案例操作:SSD对象检测
接下来就用一个实际的例子来说明如何操作DLWorkbench。
1.数据集预处理
如果手上没有现成的数据集可供测试,可以参考官网[6]的说明下载需要的公开数据集及标注档(Annotations)。这里以COCO2014数据集举例说明。点选网页[6]上DownloadCOCODataset下的[2014Valimages](约6.2GByte)和[2014TrAIn/Valannotations](约241MByte)下载图像集(val2014.zip)和标注文档(annotations_trAInval2014.zip)。
接着建立一个文件夹(/home/<用户名称>/Work)来存放这两个文件。
选择网页[6]CutCOCODataset下的[thescripttocutdatasets](cut_dataset.py)另存新文件到刚才建立的文件夹中。最后执行数据集减量(cut)操作,只保留少部份文件,方便DLWorkbench导入(import)测试,完成后会自动产生新的压缩文件并存放在/home/<使用名称>/Work/subsets/coco_subset_10_29.tar.gz。完整执行命令如下所示。
如果想自行准备数据集,可参考官网[7],其中CommonObjectsinContext(COCO)就有说明COCO文件安排格式,如Fig.5所示。
Fig.5DLWorkbench自备COCO数据集格式,(a)一般分类/对象检测,(b)图像语义分割,(c)超分辨率。(OmniXRIMar.2021整理制作)
2.导入模型及转换参数精度
为了方便后续同时测试CPU及NeuralComputeStick2(MYRIAD),可使用下列命令启动DLWorkbench。
不过这里经测试后发现,如果你的计算机上没安装标准版的DistributionofOpenVINOtoolkitforLinux[8],而只有安装LinuxDocker环境时,将无法使用iGPU和NCS2(MYRIAD)。如果使用WindowsDocker环境(Windows10+WidnowsSubsystemforLinux2[WSL2]+Ubuntu18.04)时则只能使用CPU,因为目前微软在WSL2上GPU和USB驱动程序支持性仍不完整。
接着就可以进入DL Workbench网页操作界面,开始设置主动配置(Active Configurations)。这里需要设置四个项目,包括模型(Models)、目标(Target)、环境(Environment)及数据集(Dataset)。使用前要确保网络畅通,因为接下来的工作需要从网络上下载许多数据。
首先按下“Create”键创建一组新的配置,导入(Import)现成的公开模型及预训练好的模型,由于在线预训练好的模型项目太多,可以直接输入模型名称快速检索想要的模型。由于这个范例要测试对象检测功能,所以选用「ssd_mobilenet_v2_coco」,再来选择模型的参数精度(FP16/FP32)进行转换(Convert),完成后就会在模型区出现模型名称、产生日期、参数精度、模型大小,状态区会显示是否还在传输中,完成后会产生一个绿色的对勾。完整流程如Fig.6所示。
Fig.6设置DLWorkbench推理模型流程。(OmniXRIFeb.2021整理制作)
如果不想使用现成的模型,也可切换到原始模型(Original Model)页面,根据系统要求自行提供对应格式的模型(网络)及参数(权重值),再按“Import Model”即可导入自定义模型。目前可支持OpenVINOIR,Caffe,TensorFlow等格式。
Fig.7DLWorkbench导入自定义模型。(OmniXRIMar.2021整理制作)
3.导入数据集
点选Validation Dataset旁的“Import”键,进入导入验证数据集页面,按“Choose File”键,选择歩骤1产生的coco_subset_10_29.tar.gz,按下“Import”,即可完成导入数据集。如Fig.8所示。
Fig.8DLWorkbench导入数据集。(OmniXRIMar.2021整理制作)
4.设置目标/环境
这里可看到目前有CPU和MYRIAD(NCS2)两种装置可供选择,可先选择其中一种(CPU),点击模型和数据集后即可按下页面最下方的“Create”建立第一种配置。如Fig.9所示。这里要注意的是,模型及数据集没有准备好之前(尚在传输或转换中)是无法设置目标及环境。
Fig.9DLWorkbench设置目标环境并建立配置。(OmniXRIMar.2021整理制作)
5.建立基准点
按下“Create”建立第一组配置后,就会进入配置页面,并进行第一次推理,自动产生第一个基准点。推理时根据执行硬件的不同,可能需要等待一小段时间,完成后会得到最佳的输出速度(BestThroughout,FPS)、延迟时间(RespectiveLatency,ms)及推理精确度(Accuracy),并在效率综合图表上绘出一个参考点。
通常预设为单独推理(SingleInference),用户可自由定义要测试的并行推理(ParallelInfers)及批次大小(BatchSize),再按下“Execute”键来测试不同条件的推理效果。如果觉得一直手动调整太麻烦,也可使用组推理(GroupInference),直接点击要测试的组合,按下“Execute”键,然后泡杯咖啡慢慢等结果出来。从产出的图表就可一眼看出哪种组合的效果最好,做为后续打包输出的依据,如Fig.10所示。
Fig.10DLWorkbench建立基准点及结果图。(OmniXRIMar.2021整理制作)
6.基准点效能比较
测试效果除了可以使用单独或组测试外,也可进行多种硬件的推理效果比较。首先点击页面上方的“Create”重新回到步骤4,此时只需改选装置为[Intel Movidius Myriad X VPU](NCS2),其它模型和数据集不变,移到页面最下方按下“Create”键就能新增一组配置,再次回到步骤5。此时可参考步骤5,将所有操作重复一遍,得出相同参数结果方便进行比较。
接着按下“Compare”就能进入比较页面进行两组配置的测试结果比较,若有两组以上配置,则一次只能勾选两组进行比较。这里除了基本效果图表外,还有平均延迟时间、各层运行时间及更多图表信息,可根据需求自行参考,如Fig.11所示。
Fig.11DLWorkbench多配置基准点效能比较。(OmniXRIMar.2021整理制作)
7.上传图像测试
经过上面一连串设置及找到最优配套后就可以来测试一下模型推理能力,这里支持直接上传单张测试图像来实验。首先切换到“Test”页面,按下“SelectImages”上传待测试的图像,或者直接把图像拉到这个框里面。接着按下“Test”进行测试,预测(Predicitions)结果就会出现在右方。显示结果内容包括一组可调的临界值(Threshold)和高于临界的对象,同时会显示对象的分类编号(ClassID#)和置信度(Confidence)。点击对象编号时,左侧还会绘制出对应的内容。若觉得检测出的对象太少,可将临界值调低,再确认一下。
另外目前COCO检测结果只有用数字编号(Class#00)表示,并没有直接卷标(Label)文字标示,不容易直接确认结果。如果想更确认编号对应内容,可参考[9]说明。一般COCO有91分类和80分类(从91类删除部份),而现在对应的是91分类的标签。
接着就用几张图来实验一下结果,第一组猫和狗,一张对象重迭(Ex.1-1)、一张物件分开(Ex.1-2)。第二组苹果和香蕉,一张对象重迭(Ex.2-1)、一张物件分开(Ex.2-2)。初步实验结果可看出SSD_MobileNet_v2_COCO这组预练训模型对于重迭的对象似乎分辨能力较弱,而较大的对象则辨识能力尚可接受。不过这样的实验数据太少,所以结论可能不完全正确,仅供参考。测试内容如Fig.12所示,而测试结果如Fig.13~16所示。
Fig.12DLWorkbench进行对象检测流程及测试样本图像。(OmniXRIMar.2021整理制作)
Fig.13Ex.1-1对象检测实验结果。(OmniXRIMar.2021整理制作)
Fig.14Ex.1-2对象检测实验结果。(OmniXRIMar.2021整理制作)
Fig.15Ex.2-1对象检测实验结果。(OmniXRIMar.2021整理制作)
Fig.16Ex.2-2对象检测实验结果。(OmniXRIMar.2021整理制作)
8.打包输出
为了后续更方便地部署到对应目标工作环境,并且让编程人员能直接编写及呼叫对应函数,这里还提供打包输出,不过目前只支持Linux。打包内容包含所选择执行目标(硬件)相关函数、模块、Python API及安装脚本。首先切换到“Pack”页面,勾选所需项目,再按下“Pack”就会开始打包成一个压缩文件(*.tar.gz)并询问要存放的路径,如此即完成所有程序。如Fig.17所示。
Fig.17DLWorkbench打包选项及程序。(OmniXRIMar.2021整理制作)
* 小结
通过以上的说明及实例操作,相信大家应该对IntelOpenVINOToolkit中的DLWorkbench有了一些初步的认识,图形化的接口更是让用户可以轻松上手,一目了然。对于那些不会或不想编程就想要快速实验想法的人,及需要耗费大量心力调参的工程师来说,该工具确实缩短了开发及测试时间。后续还有更多优化及提升推理效果的工作,敬请期待。
* 参考文献
[1]许哲豪,“【IntelOpenVINO教学】如何利用Docker快速创建OpenVINO开发环境”
http://omnixri.blogspot.com/2021/01/intel-openvinodockeropenvino.html
[2]IntelOpenVINOToolkit,"InstalltheDLWorkbench"
https://docs.openvinotoolkit.org/latest/workbench_docs_Workbench_DG_Install_Workbench.html
[3]IntelOpenVINOToolkit,"DownloadandCutDatasets"
https://docs.openvinotoolkit.org/latest/workbench_docs_Workbench_DG_Download_and_Cut_Datasets.html
[4]Intel,“DL(DeepLearning)Workbench|OpenVINO™toolkit|Ep.42|IntelSoftware”
https://youtu.be/20ROqz5j1y8
[5]Intel,“DL(DeepLearning)Workbench-TheFullFlow|OpenVINO™toolkit|Ep.43|IntelSoftware”
https://youtu.be/DaR49bs8qwk
[6]IntelOpenVINOToolkit,"DownloadandCutDatasets"
https://docs.openvinotoolkit.org/latest/workbench_docs_Workbench_DG_Download_and_Cut_Datasets.html
[7]IntelOpenVINOToolkit,"DatasetTypes"
https://docs.openvinotoolkit.org/2021.2/workbench_docs_Workbench_DG_Dataset_Types.html
[8]IntelOpenVINOToolkit,"InstallIntel®DistributionofOpenVINO™toolkitforLinux*"
https://docs.openvinotoolkit.org/2021.2/openvino_docs_install_guides_installing_openvino_linux.html
[9]AmikeliveTechnologyBlog,"WhatObjectCategories/LabelsAreInCOCODataset?"
https://tech.amikelive.com/node-718/what-object-categories-labels-are-in-coco-dataset/
* 延伸阅读
[A]许哲豪,”【IntelOpenVINO™教学】GStreamer串流视频智能分析不再慢吞吞─了解IntelOpenVINODLStream如何加速视频推理”
http://omnixri.blogspot.com/2021/02/intel-openvinogstreamerintel-openvino.html