课程实录:端与边缘计算技术解析与垃圾分类模型开发
May的山楂木 发布于2021-04 浏览:7930 回复:0
0
收藏

主题:端与边缘计算技术解析与垃圾分类模型开发部署实战

本次百度EasyDL打造的【零门槛AI开发实训营】聚焦多个产业级经典项目,场景覆盖自动驾驶、智慧农业、视频流车辆行人检测、垃圾分类等实用案例,从AI开发流程入手,讲解不同环节需要关注的技术重点,配合模型开发实战演示,为企业AI应用开发者提供零门槛上手AI项目开发的实用课程!

   

    川峰:大家好,欢迎大家参加EasyDL零门槛AI开发实训营的直播课。前面两节课分别给大家介绍了自动驾驶道路场景解析图像分割、以及从小麦检测计数模型突破农业AI应用相关的介绍。课程有录播,如果没有看到的同学可以在B站上看回放。今天是第三节课,会给大家介绍一下EasyEdge“端与边缘计算技术解析与垃圾分类模型开发部署实战”。

    本系列课程有四大亮点:

    零门槛:EasyDL零门槛AI开发平台,无需算法基础即可上手。

    重实战:多个产业级AI项目开发实战,课后作业加强巩固,学习更高效。

    讲技术:每个项目精讲一个技术点或应用场景,快速获取核心重点知识。

    可落地:每节课配合不同部署方式讲解,贯穿企业模型开发应用全流程。

本节课的同学会有一些专项福利,如果每节课都能完成听课打卡与作业提交可以获得10小时V100训练时长。大家也可以加入社群进行互动,有机会获得百度定制的极客周边。

本次课程作业先给大家介绍一下,是生活垃圾分类,大家可以随手拍一拍身边的日常垃圾作为数据集来使用,然后作业提交是通过扫码右下角二维码,这个二维码也会共享到社群里面。

我们第三节课主题是“端与边缘计算技术解析与垃圾分类模型开发部署实战”,将由我川峰和我的同事译文跟大家分享。主要也是分两个部分,第一是技术解析,然后是带大家一起实战一个垃圾分类的模型。

在正式开始我们今天的内容之前先给大家介绍一下我们本次实战主题:垃圾分类。左图是上海市生活垃圾的分类标准,一般可分为:可回收垃圾、有害垃圾、湿垃圾和干垃圾四大类。我记得当时这个标准出台的时候大家也都在讨论这个是什么垃圾,那个是什么垃圾,小区的垃圾回收站有时候我们会提到大爷大妈会发出一个灵魂拷问,“你是什么垃圾”不知道大家有没有听到过这样一句话。

    有一些垃圾分类跟我们想象中不太一样,容易比较容易误分,比如说一次性的干电池是属于什么垃圾,大家可以在弹幕回答一下。其实它是属于干垃圾。本次实战的数据集是右边所示生活垃圾的图片,作为抛砖引玉我们收集了13种生活垃圾的图片,稍后译文会跟大家详细介绍这个数据集,并带大家从实操的角度看看如何利用EasyDL训练一个分类的模型去识别这13种垃圾,并把这个训练好的模型并行到EdgeBoard软硬一体化方案当中。   

首先进入到我们第一部分,端与边缘计算技术解析。大家知道目前人工智能技术是越来越成熟了,基于深度学习模型精度也是一直在提升,基于人工智能的应用也是越来越广泛。就端侧和边缘侧的应用场景而言,像生产安全、监控识别、工业质监、智能硬件、烟火检测、园区安全等等都有广泛应用。同时我们知道深度学习精度往往是伴随网络层数的加深以及参数计算量的大大增加。

这就导致了一个问题,深度学习模型它通常会对内存和算力有比较高的要求,比如说表格里面的三个模型,分别是图像分类、物体监测和物体分割。图像分类模型会小一点,但它依然是有4个G的计算量,监测和分割的计算量就更大了。所以通常我们会把模型部署在云计算中心或者是高性能的服务器上,从而可以达到一个比较好的推理速度。

    同时部署在云计算中心它还会有一定的弊端,比如说我们要时刻保持网络的连通性,以及这个端到端的时延比较长,无法满足我们有些时候的实时的推理要求。另外一个,有一些用户觉得他的数据比较有隐私性,他希望发到云端,这是一个安全性的问题。

还有一个伸缩性的问题,这是我们现在边缘节点或者是设备端采集到的图片会随着5G铺开它会大大地增加,所以就会给我们云计算中心的计算存储压力和网络带宽带来很大的压力。

基于这几项弊端,我们自然而然想到的是我们是不是可以把模型部署在现场做离线计算,其实这种就近提供服务的思想早就有了,就是我们现在常常提到的边缘计算。什么是边缘计算呢,边缘计算它的概念就是靠近物或数据源头一侧采用网络计算、存储、应用核心能力为一体的开放平台,就近地去提供端服务

    边缘计算优点:第一是低时延,因为我们是计算服务是就近数据源或者是在数据源的产生节点,可以大大降低端到端的数据延迟。

    第二是高安全,可以把AI模型部署在本地可信服务器或者是端设备上做离线计算,避免向云端发送数据可能带来的安全问题。

    第三是可伸缩,AI模型既可以部署在云端也可以部署在边缘节点端设备。通过这种多种方式的拓扑结构的组合,我们可以在数据源或者是接近数据源的地方把数据处理掉,从而可以大大缓解网络带宽和云服务的压力。

这张图是大概描绘了我们可以把AI模型部署在云数据中心、边缘节点以及设备端拓扑部署结构。除了可以讲AI部署云计算中心之外还可以把模型进一步下沉,可以把AI模型部署在边缘节点上或者部署在设备端上,比如说手机、开发板、智能摄像头等等的设备。

但是AI模型在端侧或者之边缘侧的部署也会面临一些新的问题,AI模型应用一般是包括三个阶段,数据集准备、训练、部署。边缘侧的AI模型部署不同于在云端的部署,端侧设备的硬件往往包含了各种异构形态,很多AI芯片需要自己独特的推理引擎,可以做到一个高效的推理。所以我们可能会遇到硬件对于模型格式和模型转化的要求。

    还有在这个过程当中我们会遇到模型算力的支持度和兼容性的问题,以及在计算资源比较有效的硬件上我们还怎么样达到一个理想的模型的推理速度。当然还有工程测的设备管理、服务分发等等,很多问题都是需要比较高的门槛以及比较大的工作量的。

为了解决大家的AI模型端侧部署的痛点,我们接下来就是为大家介绍的是EasyDL零门槛AI开发平台,它支持大家零代码完成数据标注、模型训练,并支持将大家训练好的模型部署在实际的应用场景中。整体部署方式中支持公有云、私有化、设备端、软硬一体等等不同的部署方式。

    对应到本次的垃圾分类的内容,我们可以到EasyDL的平台图像任务中选择一个图像分类的模型,然后上传数据集,利用EasyDL提供的标注功能之后,点点鼠标基本上可以做到一个垃圾分类的模型训练。训练之后可以把训练好的模型发布到适配于各种硬件平台各种服务包,然后下载下来我们就可以直接把这个模型跑起来了。

对于我们刚刚提到的针对私有化、设备端、软硬一体的部署方式我们也是给大家提供一个比较全的服务部署平台,也叫EasyEdge。EasyEdge这个产品主要是为了解决端与边缘侧部署难题而诞生的,它可以帮助大家快速将自己训练好的模型部署到端设备或者是边缘设备上。这个模型可以是来自EasyDL训练好的模型,当然也可以是其他地方自己训练好的模型都可以。

这张图可以对EasyEdge是一个什么东西可以有一个大致的了解,左侧是代表了EasyEdge的输入,通常是一个训练好的AI模型,可以是从EasyDL过来的,也可以是自己训练的,自己训练的可能是基于PaddlePaddle、TensorFlow、PyTorch等等,中间就是平台,我们将大家输入的模型进行EasyEdge后端一系列的转换、优化以及面向设备的兼容和加速等等,最终发布成为右侧多种的计算服务。部署方式也是包括私有化部署、设备端部署、软硬一体部署,同时可以支持Demo体验,如果是手机端的部署包还可以通过扫码二维码直接下载APP进行体验。另外是可以支持端云协同,可以在云端对设备进行管理以及在线的服务部署等等。

关于刚刚提到这集中部署方式我这里稍微展开介绍一下,私有化部署是支持将模型部署到本地的企业服务器上,比如说CPU、GPU、百度昆仑服务器、华为昇腾计算卡等等,提供一个低时延、高可靠的计算服务。

    部署方式包括两种,一种是可以集成我们部署包当中提供的开发接口,将模型直接集成到自己的模型当中也可以通过Docker方式直接部署。设备端通常是支将模型部署在一些轻量级的边缘设备上,比如说基于ARM嵌入式设备,比如说手机、公共机等等,以适应不同的端计算和边缘计算场景。

    同时还支持了几款软硬一体方案,通过百度自研的硬件和厂商合作,对于硬件和模型做了深度优化适配,从而给大家提供一个极致性能的软硬一体的方案。

我们具体来看一下目前EasyEdge对于AI框架和神经网络的支持。EasyEdge是PaddlePaddle的,并且支持大家比较熟悉其他的框架,比如说像TensorFlow、PyTorch、mxnet、Caffe等等,支持模型种类也是非常多的,这里只是列举了一些大家比较常见的模型。这些常见的或者是比较重要的模型我们也会优先进行支持的。然后这里列举主要是一些视觉模型,有图像分类、物体检测、实体分割、人脸检测、姿态估计等等。

然后再看一下EasyEdge对硬件还有操作系统方面的支持,目前EasyEdge是支持了10余类芯片和4大操作系统。芯片方面我们支持常见的英特尔的CPU平台和英伟达的GPU平台,ARM的CPU、GPU平台。除了支持性能比较高的CPU、GPU平台之外还有支持各式各样的ASIC专有芯片,比如说华为的NPU、NNIE、昇腾,另外还有英特尔的VPU、英特尔神经计算一代和二代,还有百度自研的EdgeBoard VMX以及昆仑XPU芯片的支持。FPGA方面主要是百度自研的EdgeBoard FZ系列。   

同时EasyEdge也开源一些模型,包括OCR、物体检测、人脸检测、图像分割、姿态估计等等。这些模型大家只要登录官网可以直接扫码二维码进行ATV直接体验。右边这个录屏就是扫描EasyEdge开源OCR模型直接下载到的体验APP,可以快速体验这样一个效果。左上角这个是自带估计的体验APP,左下角这个是基于物体检测模型,再结合Jetson项目,集成到小车实现跟踪苹果运动的效果。

    前面的介绍大家应该对EasyEdge的产品功能有了一定了解,下面我给大家介绍一下EasyEdge背后有哪些工作。

EasyEdge内容大致可以分为模型与转化模块、模型压缩模块、芯片定向优化模块、编译打包模块、自动评测模块以及开发者套件。

    对于模型转化和优化模块,包括了多部的模型转换以及基于图本身的一些优化,包括算子融合、裁剪等等一系列的策略。

    对于模型压缩模块主要是模块小型化的一些工作,比如说训练后量化,量化感知训练,通道剪枝蒸馏等等,通过这些手段对于模型的体积计算量进行缩减,从而提升模型推理的性能

    对于芯片定向优化主要是针对刚刚说过的各种部署硬件进行特定的优化工作。比如说异构算子的实现、子树计算模式以及端到端的推理优化等等。

    经过刚刚提到这些模块,模型优化、模型压缩、硬件优化后最后可以部署到端上的模型,然后来到了编译打包模块,这个会产生一个实际可执行的SDK,如果最后部署在手机上面的可以生成一个demo的APP,并且会提供一个二维码可以扫描安装,方便看到自己模型的效果,这个就是编译打包模块提供的。打包之后还会通过评估模块,把模型下发到对应的设备上进行评估,评估时除了拿到精度和性能指标以外,我们还会对资源的使用情况进行收集、展示。

    一个模型进行这几个模块之后最后会以EasyEdge开发者套件形式提供给大家,这个套件里面包括一些自定义算子的实现还有优化后的模型以及跟各种类型的Demo等等。

    EasyEdge是如何做到可以把众多的模型适配到各种硬件上面的,首先一个一个模块是EasyEdge模型转换模块。模型转换的意思其实很简单,就是把一种框架格式的模型转化为另外一种框架格式的模型。现在边缘侧的硬件形态是呈现出多样化的发展,特别是各种异构硬件,各种AI芯片的出现。为了保证推理性能,通常都是有着独特的推理框架,这种推理框架对于模型的输入格式都是有要求的。为了支持这些丰富的输入格式,我们理论上需要讲任何意中格式的模型转化到任何硬件所需要的格式的模型。

为了支持这种转化,EasyEdge的做法是将输入的模型格式统一转化为中间表示,然后再由中间表示转化为目标格式的模型。这个转化过程中有一定的技术难点,比如说不同框架之间所支持算子范围不同,不同算子计算逻辑可能不同。另外是一般推理框架对于转化后的框架模型还会做进一步优化工作,在这个优化过程当中可能又会出现算子不支持以及不兼容。这些问题都加大了模型配置的困难。EasyEdge这个模型转化模块就是为了解决模型格式的问题。

    解决了模型格式之后,EasyEdge的模型优化模块要解决的问题是模型推理性的问题以及前面提到的算子兼容问题。这里面是基于计算图所做的优化工作的一部分,为了减少模型计算量,从计算图的角度进行全局分析,可以将一些优化策略应用到计算图当中。比如说OP融合、OP拆分、计算剪枝、常量折叠、子树替换等等。

OP融合其实是非常常见的一个例子,就是Batch Norm和卷积的融合。可以把Batch Norm的参数经过提前计算融合进卷积的参数,从而把这两个融合为一个算子,这样在实际推理的时候也减少了计算量。

    OP拆分是指我们会面向硬件平台,将一些算子拆分为硬件平台支持的或者是计算更高效的算子或者是算子组合。

    计算剪枝就是模型训练出来以后有一些算子在推理阶段不需要,那就直接删掉,这样也可以节省计算。

    其他的优化策略其实还有很多,不仅仅是包括这里的常量折叠、子树替换,还有很多,我这里就不做过多介绍。

除了针对计算图的优化之外,还有针对端上芯片进行特定的优化,比如说在英伟达GPU上我们会尽量端到端使用GPU,就是说从我们输入图片之后,我们针对这张图片的预处理、推理、后处理操作都是在GPU上进行的,从而利用GPU的编译计算的优势去加速推理过程。

另外在ARM方面也有针对部分算子做一个优化,以及在ASIC芯片方面我们利用子树模式进行了对接等等,主要目标是为了极致地去提升我们模型的推理速度。

    为了提升模型的推理性能,我们还利用了模型压缩的技术,模型压缩是为了在不降低或者说不显著降低模型精度的情况下尽量去减少模型的体积和提升模型的预测速度。一般的方法是包括量化、剪枝和蒸馏。当然模型压缩的整个过程是比较复杂的,在我们的实践当中根据大家提交不同的任务我们会生成一个模型压缩DAG,这个DAG会执行具体的一些模型压缩的任务,比如说有基于模型量化的,基于模型剪枝的,有基于模型蒸馏的。

    我们后端这些工作中我们是利用了PaddleSlim做了量化训练,使得量化后的模型不仅在推理速度上大大提升,在模型精度上也可以做到微损甚至无损。剪枝也是在计算图上做一些结构化或者是非结构化策略的剪枝,通过降低模型体积和减少参数来加速模型端到端的推理速度。

    EasyEdge基于模型压缩的技术在保证模型精度的情况下,最终也是做到降低模型大小,加速模型推理的效果。

针对AI工程化部署的这些难题之外,除了产出优化模型之外我们也是给大家提供了开发者套件,这个图就是EasyEdge的开发者套件一个整体结构,是大家发布模型之后下载到的开发者套件里面包含的一些东西。EasyEdge开发者套件在接口层面是针对不同平台支持多种语言,而且接口高度统一,使用也非常简单。

    从EasyDL发布得到的部署包或者是EasyEdge外部页获取到的部署包,手机可以通过扫描二维码直接体现它的效果,PC端也是带了H5体验页面,并且提供了轻量级的serving可视性文件,可以让大家很轻松搭建一个AI服务。

    另外提供了一些demo工程代码供大家参考,大家获取到的这样一个部署包里面,不管大家在哪个硬件平台上看到它的接口都是高度统一的,而且接口非常简单,应用非常简单。其实在底层我们已经给大家做好了模型的优化和硬件适配,所以大家训练的时候也会让大家选择你需要跑在什么样的硬件上。

除了在推理计算上做一个深度优化,我们还对这个模型做了安全加固,针对不同硬件做了自动推理校准等等一些工作。

这里展示的是ResNet50这个模型经过EasyEdge之后在各个芯片上的性能数据,可以看到在Tesla P4卡上达到的速度是已经达到了3毫秒的速度,其他的就是更多的性能数据,包括其他模型的大家都可以在EasyEdge主页上找到EasyEdge本地部署里面的查看算法性能及适配硬件做一个更多地了解。

除了上述这些技术工作之外,其实还针对一些特定的硬件做了一些更深度的适配,也就是软硬一体方案。大体是可以分为超高性能、高性能、低成本小能耗三类,具体参数大家可以到AI市场去查看更详细的资料,也可以在上面直接进行购买。待会儿我们译文老师使用的就是EdgeBoard FZ部署垃圾分类的模型,大家可以跟着他学习一下这个EasyDL模型训练和部署的大概的步骤。

然后再给大家分享两个基于百度EasyDL软硬一体方案实现的案智能垃圾箱的案例,这个是“搭把手”这家公司使用了EdgeBoard软硬一体方案,它是把EdgeBoard卡机整合在垃圾箱内做一个实时垃圾的识别和分类。它的使用的模型是EasyDL训练出来的图像分类的模型,然后准确率也是有91.57%。

第二家公司,分形科技也是软硬一体方案,通过EasyDL平台训练的模型最终实现了7种常见垃圾的自动分类,识别准确率达到的99%以上,目前智能垃圾箱在北京的海淀公园落地了。

    我的部分基本上就给大家介绍到这里,下面是由我的同事译文跟大家带来垃圾分类模型开发与部署的实战部分,然后步骤的话也分为三个部分,一个是垃圾分类数据集准备,然后是EasyDL模型训练,然后软硬一体方案部署,有请我的同事译文。

   

    译文:大家好,我现在给大家带来一个垃圾分类的实战演练,首先是登录到EasyDL的官网。然后进去之后把你的鼠标放在操作平台这个地方,可以看到我们的平台是支持很多种不同的模型类型,包括图像类、文本类、语音类、OCR等等。因为我们这个案例是图像分类的案例,所以我们点到图像分类这里去。打开这个页面首先看一下左边,第一是一个模型中心,模型中心它主要管理是模拟训练、创建等等。模型中心下面是数据服务,我们平台为大家提供了一些数据清洗、标注等等服务。最下面是一个模型部署,我们平台是支持非常多的部署方式的。然后我们可以先创建数据集,点到这个数据总揽这边看一下,创建数据集,可以为数据集取一个比较合适的名称,注意不要和之前的重复了。然后直接点完成,完成之后数据集就创建好了。

    这个时候要导入,我们现在需要从本地导入一个数据集,本地数据体是有标注信息的,导入方式有很多种,我们选择本地导入。本地导入也有两种方式,我们选择上传压缩包,点完上传压缩包之后可以看到平台支持很多不同类似的压缩包的上传。如果你不知道怎么组织你的数据可以点这边的问号,点一下可以下载一个标注的样例下来。我之前已经下载好了一个,点开看一下它的文件组织结构,这是一个QQ(音)的数据集,分两个文件夹,一个是(英),这是一个标准的QQ的标注,里面是一个杰森(音)的文件,然后images下面是我们要沉淀的一个图片。然后我这边数据按照它的要求准备好了,大家可以看一下,这里面是我们的数据,里面都是一些实战,我们一会儿实战用到的一些垃圾。

    然后要把这个打成一个zip包,上传到平台,然后选择到刚刚的zip包,然后点上传,然后等待片刻就可以了。因为这个时间稍微会有一点久,所以我之前已经提前上传好一份了,是垃圾分类170847这个数据集,一共是2000多张图片。然后上传完了之后我们可以来大致浏览一下这个数据,点击查看与标注。点进去之后我们可以看到数据的一个基本的情况,左侧是不同的class,可以看到这个数据集难度是比较大的,这个不同的class数据差得比较多,有的几十张,有的800多张。

    点进去看一下大概的图片,这个是厨余湿垃圾,里面是西瓜皮什么乱七八糟的。然后下面有带包装袋的,点进去看一下,都是一些包装的袋子。然后也有这种包装盒的,这些都是平时使用过程中的物品的包装盒。然后数据大概就是这个样子,一共有13个class。

    这边可以点击一下质监报告,它会告诉你一个更详细的数据的质量。点进去看一下这个数据的色彩分布,都是2GB的。然后大小分布一般好的数据集大小分布尽可能集中,不然有的大有的小这个难度是稍微有点大的。

    然后看一下这个比例,然后色片分布,这个一般公开的数据集色片分布会相对比较均匀的。因为这边是一个偏实战的场景,它肯定色片会集中到某一处,这是比较正常的。

    然后看完这个我们现在就可以点到我的模型里面,数据集创建好了,我们可以创建模型了。模型随便说一个名字,我这边就输一个“垃圾分类的”,为了避免重复我加一个后缀。功能描述一定要超过10个字,你们的描述应该尽可能详细一些,我这边就随便描述一下,“对于多种垃圾的分类任务”。然后点击下一步,模型就创建好了。

    现在数据创建好了,数据也准备好了,不用再创建了,可以点击训练,这是一个训练的配置页面,可以配置要训练什么样的模型,怎么去训练等等。部署方式这边大家可以看到一共有2种,一种是公有云的,一种是EasyEdge本地的。顾名思义,公有云是整个模型推理过程发生在云端,我们会给你一个接口,直接照这个接口。计算过程不发生在本地,但是它有一个缺点,会受到网络带宽的影响。EasyEdge本地部署就是说设备在本地,然后整个推理过程是在本地发生的,所以会稍微快一些。

    这边选设备,一共是三种,服务器、通用、小型设备。今天的demo是一个软硬一体的解决方案,所以选择专项的适配硬件,然后硬件选择EdgeBoard FZ这个产品。然后算法有两种,一种是高精度,高性能,如果你不知道怎么选可以把鼠标放到问号这边,它可以告诉你不同的选择带来不同的后果。这边高性能的话就是可能会快一些,但是准确率会降低,这边为了训练速度我就选择高性能。然后打开高级训练配置,然后看一下,第一是可以选择图片的分辨率的,如果你本身的这个数据集图片分辨率比较高,你又不想去损失一些图片细节的纹路特征可以选择比较高的分辨度,这个接入的话训练精度会稍微高一些。

    然后这边也是可以去手工去配epoch数量,epoch越大训练时间越久。数据库平衡优化,刚刚看到这个数据集是不怎么平衡的,有的图片很少,有的图片很多,这个对于分类是比较困难的。这个在我们的任务中是建议打开的,包括这边为了方便我把它关掉了,这个高级训练配置都不开了。然后添加数据集,点击这个。然后点击垃圾分类,刚刚垃圾分类X就是我们创建的行动数据集,这边全选,点击添加就可以了,然后这个数据集就添加成功了。

    接下来有两个选项,一个是自定义验证集,一个是自定义测试集。如果你手里有更贴合实际应用场景的一个数据,你可以去自定义这个数据集,这样可以达到一个更好的训练效果。你可以点旁边的问号,可以看一下它是什么意思。然后这边我们还支持一个多种的数据分享测算,点开看一下,这边有很多数据增强的方法,如果你不知道什么意思可以点旁边的效果展示。

    比如说这很明显是一个仿生变化,然后再点这个,这是一个平移。我们的数据增强是支持多种同时选的,配好数据增强之后可以选择训练环境,这个时候推荐大家构建GPU V100的卡,这个卡的话会很快地加快你训练的速度。卡选好之后整个配置训练完就可以开始训练了,它会很贴心告诉你你的数据分布不是很均匀,可能效果不是很理想,这是我们继续训练。

    然后这个训练任务就算创建成功了,然后有一个模型ID,点击这个感叹号可以看到训练的进度,这个训练完成之后会给你发一个短信。我这边提前训练好了一个,大家可以看一下,是一个分类高性能的,然后可以申请发布了。申请发布页面这些选项我们都已经配置好了,你不用去做额外的选择,可以直接点击发布。这边也没有别的训练,Linux SDK,然后点确定,这个时候到了发布页面了,发布的话它发布完之后不会有一个短信通知的,所以你还是要多来这个网页刷新查看一下你发布的情况。

    由于这个发布时间还是比较久的,所以我这边就不做过多的等待了,我之前是已经发布好了一个模型,然后我们直接点到这个服务详情里面。这里面有三个选项,前往AI市场购买下载SDK,获取序列号。然后我们点击下载SDK,点击完之后SDK下载在本地了。这个SDK要部署到EdgeBoard上,无论是用网络传输还是USB拷贝都是可以的,把zip包放在EdgeBoard。我这边已经放好了,给大家看一下。这个zip包就是刚刚的SDK,然后我还准备了几张图片放在这个images文件下面。这个图片有两张。第零张是一个包装袋,是不是应该对应我们刚刚的On broken bag,然后这是一个包装盒,一会儿我们会来推理这两张图片。

    现在我们就解压SDK,解压完看一下,发现多了几个文件夹,有一个RES、Images、cpp,看一下RES,这个RES本质上就是指我们的模型,可以直接把它理解为SDK模型就可以了,里面包括一些模型的网络定义、参数、前处理、后处理文件。比如说我们打开这个Label list之后看一下它有哪些label,这是模型检测之后数字对应的label是哪一个,是不是跟刚刚的13个label是一一对应的。

    下面我们进入到CPP文件夹下面,看一下有什么东西。发现有两个拓包,这次我们用的拓包是SC1.5的拓包。然后解压这个拓包,解压好之后就可以进去看一下里面有什么东西。

    这多了几个文件夹,我们一个一个看一下,先看一下demo,demo就是如果你要基于SDK进行二次开发的话,这个demo文件夹应该就是一个工作区间,会给你提供一个最基本的demo cpp文件和可视性文件,可以直接基于这个demo进行编译,都是很方便的。

    然后接下来看一下include,这是我们给你提供的一个库,我们提供这个SDK库是非常简洁的,只有一个ez.H就可以满足所有的要求。然后到这个label文件夹下看一下,这个是我们为你编译好的一个动态库,这个动态库可以使用的,省去了你一些编译的烦恼。

    现在我们进demo页面看一下,有一个东西要提醒一下,这个label文件夹里面有一些动态库,这个动态库放在环境变量下面,不然运行demo会告诉你找不到这些动态库。

    看完之后我们进入demo文件夹下面,这里面有一个BIM(音)文件夹,这是我们帮你编译好的二进制文件,一个是Easy demo,一个是Easy serving。然后运行一下,它会提醒你有几个参数,RES、images和序列号,RES是我说的RES文件夹,然后images是我之前准备好的两张图片,随便选一张。序列号怎么办,切出去看一下。这边实际上是可以直接申请序列号的。如果你不知道怎么进这个页面,可以点击右边的服务,找到你刚刚发布的SDK,比如说我们这个SDK已经发布好了,我们点了之后可以获取序列号。

    这边需要登录一下,登录好之后就可以直接新增测试序列号,然后点进去,序列号类型要选你的硬件设备,这个就是EdgeBoard FZ,新增设备一般点1,然后点确定就可以了。因为我之前已经申请过了,大概长这个样子,把这个序列号直接拷贝过去就可以直接用了。点回车直接推理。第一张图片预算On broken bag,我们再看看刚刚这个图片是不是这个,第一个是包装袋。我们看看第二个图片,是一个包装盒,再推理一下第二张图片看一下。可以看到结果,包装盒执行度0.97,我们发现我们的模型准确率还是可以的。

    然后现在我们要运行第二个demo,serving,运行之前查看一下本级AP,因为这个demo会把你的EdgeBoard当成一个服务器起一个serving,然后可以在别的设备端调用这个serving,然后看一下IP,然后运行EasyEdge serving,看一下它要什么参数,RES,还是刚刚那个,序列号直接拷过来。拷过来之后host一般选择0000,可以让别的设备访问你。端口号不要取那种冲突的,取一个经常使用的端口号点击回车,这样服务就启动起来了。然后在本地访问一下IP、端口号,点击回车,大家可以看到这个服务已经起来了,点击上传图片,还是上传刚刚这两张图片,看看这个0,这是袋子。然后换一张,是包装盒,执行度0.98,是正确的。

    针对整个SDK的demo演练就到这边了。这个时候有人可能会问,这个结果有时候不是很理想,作为用户可以做什么,除了攻关群里面提问的话还能做什么,这个时候其实可以点到这个完整的屏幕结果里面看一下为什么它不理想。

    点进去看,这里面有很多评估指标,第一是整体评估,有准确率和f1 score,这是一个调和平均数。它其实阐述的是这个模型到底好不好。从不同的角度去进行阐述。然后下面是一个错误样例很详细的分析,会把每个Class的 F1 score展示出来,这个得分是越高越好。上面有的得分是比较低的,像这个饮料盒,这旁边也展示了它的原因是因为搞混了,是包装盒、饮料盒混了,这个从我们人的角度来讲这两个东西本来是很接近的,其实这个里面本身又有包装盒又有饮料盒,所以我们模型把它分错了。然后下面也是一样的,都是饮料盒和包装盒,非常多。然后可以看一下这个泡沫和包装盒是怎么搞混了,这里面又有泡沫又有包装盒,说明这个数据不是特别的纯净。

    这个看完之后我们看一下混淆矩阵,这个展示的是不同Class之间哪些混淆的会比较多,主要是关于左上到右下中心对称的矩阵,这个得分越高说明这两个Class混得越厉害。可以看到包装盒和塑料袋混得数量是最多的,相对数值是饮料盒和包装盒混得比较多。为什么更倾向于看相对数值呢,因为绝对数值对于我们这种每一个class数据分布不是很均匀的情况下是不很公平的,所以尽量推荐大家看这个相对的数值。

    混淆矩阵看完之后,接着往下看一个热力图的分析。大家看一下,这边会给你一个错误分类的一个热力图,热力图会展示模型的注意力会放到图片的哪一个位置,点击查看这个热力图,会发现这边颜色比较深的地方都是模型所注意的地方。我们发现它就是没有注意到袋子上,注意到旁边这一块,旁边这是包装盒,它本身是一个塑料袋,但是它分成包装盒,它实际上是有包装盒的。所以说这整个分析就完美地呈现了为什么我们这个任务它的精度不特别的高。

    作为用户的话,你所能做的就是提供一个更好的数据集,什么是更好的数据集,就是说你所给的label是很好地表征图片表达的内容,而不是说这个数据集里面本来里面什么垃圾都有,然后你直接一个label,它模型分类出来精度肯定是不会很高的,然后关于整个的实操演练就到此结束了。

    然后接下来的话就到了激动人心的布置作业环节,现在大家可以拍拍身边的垃圾收集一个关于分析垃圾的数据集,按照我们刚刚说的平台要求的格式,然后用我们平台去训练一个垃圾分类的demo部署到SDK进行推理。作业提交可以通过扫码提交,现在进入到接下来的Q&A环节,我们收集一下刚才的问题。

Q:要求进行本地部署对于设备端硬件要求高吗?

A:实际上一看这个问题就是没有对于我们EasyEdge好好做了解,你看过文章知道我们EasyEdge支持的设备端非常多,既包括通用的推理芯片CPU、GPU,ARM的GPU和很多专用新品,包括高通DSP,然后华为DDK等等,你完全可以根据自己的预算去购买你合适的设备。

Q:模型量化蒸馏是什么?

A:这个问题你可以好好地去看一下论文。量化简单说,模型本身是一个SPAR浮点模型,我们设备端推理浮点32个BT占得太多了,我们会适当压缩这个表达的比特数,有用英特尔8的,还有用更多比特,英特尔4或者英特尔2等等。蒸馏是通过大模型去学习一些知识,然后用这些知识更好地去调教这个小模型,小模型达到一个逼近大模型的精度前。

Q:可以将训练好的模型放到单片机上吗?

A:当然是可以的,我们EasyEdge是支持很多硬件设备的,现在单片机完全可以跑一个小的Linux系统,作为一个Linux的RAM来部署SDK是完全是够用的。

Q:这个分类任务对于样本量有什么要求?

A:实际上这个看你的应用场景,我们本地有时候做试验,图片都是可以进行分类的,对于样本量没有过多要求。当然从实际情况来讲你样本越多越能充满整个表达空间就更好。

现在的Q&A环节大概就到此为止,然后接下来5月11号我们会再次和大家见面,哈利和阿达会为大家带来:视频流车辆技术与轨迹跟踪的一个实战演练分享,希望大家到时候不见不散,扫码关注。

收藏
点赞
0
个赞
TOP
切换版块