《边缘智能计算应用》课件 项目四 基于Pytorch(YOLOv5)目标检测模型部署_第1页
《边缘智能计算应用》课件 项目四 基于Pytorch(YOLOv5)目标检测模型部署_第2页
《边缘智能计算应用》课件 项目四 基于Pytorch(YOLOv5)目标检测模型部署_第3页
《边缘智能计算应用》课件 项目四 基于Pytorch(YOLOv5)目标检测模型部署_第4页
《边缘智能计算应用》课件 项目四 基于Pytorch(YOLOv5)目标检测模型部署_第5页
已阅读5页,还剩175页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目四基于Pytorch(YOLOv5)目标检测模型部署边缘智能计算应用项目引导案例目标检测的目标是确定并返回某张给定图像中是否存在给定类别(比如人、车、自行车、狗和猫)的空间位置和覆盖范围(比如返回一个边界框)。目标检测是解决分割、场景理解、目标追踪、图像描述、事件检测和活动识别等视觉任务的基础。应用:机器人视觉、消费电子产品、安保、自动驾驶、人机交互、基于内容的图像检索、智能视频监控和增强现实。项目引导案例本项目将带着大家部署基于Pytorch的yolov5目标检测模型,主要涉及到的知识有:Pytorch框架YOLO算法Git使用方法ONNX格式和RKNN格式项目中所涉及的操作过程主要如下图所示:基于Pytorch的YOLOv5模型训练及转换Pytorch模型转ONNX模型ONNX模型转RKNN模型边缘端部署RKNN模型任务一基于Pytorch的YOLOv5模型训练及转换边缘智能计算应用职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一基于Pytorch的YOLOv5模型训练及转换了解Pytorch的安装方法;了解Pytorch的组件与工作原理;了解使用Pytorch进行模型训练的方法。掌握开源数据集的下载使用掌握基于开源项目YOLOv5训练环境搭建掌握基于Pytorch的YOLOv5模型训练及预测掌握Pytorch模型文件转ONNX模型文件的环境搭建掌握Pytorch模型文件转ONNX模型文件及预测职业能力目标01知识目标技能目标职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一基于Pytorch的YOLOv5模型训练及转换此任务要求读者完成基于PyTorch框架和YOLOv5开源项目训练并生成模型并将Pytorch模型文件转onnx模型文件,任务完成后可使用训练好的YOLOv5模型进行目标检测。任务描述任务要求使用git下载项目源码安装所需的依赖包使用训练脚本进行训练验证训练好的模型任务描述与要求02职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一基于Pytorch的YOLOv5模型训练及转换任务分析模型训练开始之前需要做哪些准备工作?模型训练过程中涉及到哪些参数?任务分析与计划03任务计划表项目名称基于Pytorch(yolov5)目标检测模型部署任务名称基于Pytorch的YOLOv5模型训练及转换计划方式自主设计计划要求请用10个计划步骤来完整描述出如何完成本次任务序号任务计划1

2

3

4

5

6

78通过上面的思考,你是否对本任务要完成的工作有所了解?让我们一起来制订完成本次任务的实施计划吧!任务分析与计划03职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一基于Pytorch的YOLOv5模型训练及转换PyTorch与YOLOv5简介204知识储备目标检测简介1Pytorch转onnx的意义433COCO数据集目标检测是在给定的图片中精确找到物体所在位置,并标注出物体的类别。04目标检测简介目标检测任务的挑战在什么地方呢?04目标检测简介目标物在图像中的属性04目标检测简介多目标示例04目标检测简介近几年来,目标检测算法取得了很大的突破;随着卷积神经网络的广泛使用,许多目标检测算法已与卷积神经网络结合起来;根据目标检测算法的工作流程,可以将目标检测算法分为双步法(TwoStage)和单步法(OneStage)。04目标检测简介两步法(TwoStage)确定那些更有可能出现目标的位置,再有针对性的用CNN进行检测;通过启发式方法或CNN网络产生一系列稀疏的候选框(RegionProposal),然后对这些候选框进行分类或者回归;两步法的优势是准确度高,但是运行速度较慢;两步法的代表算法有R-CNN、FastR-CNN、FasterR-CNN等。04目标检测简介04目标检测简介一步法(OneStage)均匀地在图片的不同位置进行密集抽样,利用CNN提取特征后,直接在提取的特征上进行分类或者回归,整个过程只需要一步;所以一步法的优势是速度快,但是模型精确度相对较低;一步法的代表算法有YOLO和SSD等;目前广泛应用于目标检测的算法是基于YOLO目标检测算法的YOLOv5和YOLOX。04目标检测简介PyTorch与YOLOv5简介204知识储备目标检测简介1Pytorch转onnx的意义433COCO数据集04PyTorch与Torch基于Torch的Python开源机器学习库用于自然语言处理等应用程序支持GPU加速、动态神经网络等功能两个高级功能:强大的GPU加速的张量计算(如Numpy)自动求导系统的深度神经网络04PyTorch与TorchTorch是一个有大量机器学习算法支持的科学计算框架,其诞生已有十年之久,但是真正起势得益于Facebook开源了大量Torch的深度学习模块和扩展;Torch的特点在于特别灵活,是以Lua为编程语言的框架。Torch简洁速度快社区活跃易用PyTorch特性04PyTorch灵活性不以速度为代价。在许多评测中,PyTorch的速度表现胜过TensorFlow和Keras等框架。PyTorch的面向对象的接口设计来源于Torch,而Torch的接口设计以灵活易用而著称,Keras作者最初就是受Torch的启发才开发了Keras。PyTorch的设计最符合人们的思维,即所思即所得。PyTorch的设计追求最少的封装,尽量避免重复造轮子。PyTorch的源码只有TensorFlow的十分之一左右,简洁直观,十分易于阅读。PyTorch提供了完整的文档,循序渐进的指南,作者亲自维护的论坛供用户交流和求教问题。Facebook人工智能研究院对PyTorch提供了强力支持,以确保PyTorch获得持续的开发更新。04导入PyTorch包Python中导入PyTorch依赖库04YOLO算法简介YOLO将对象检测重新定义为一个回归问题。它将单个卷积神经网络(CNN)应用于整个图像,将图像分成网格,并预测每个网格的类概率和边界框。YOLO非常快。由于检测问题是一个回归问题,所以不需要复杂的管道。它比“R-CNN”快1000倍,比“FastR-CNN”快100倍。它能够处理实时视频流,延迟小于25毫秒。它的精度是以前实时系统的两倍多。同样重要的是,YOLO遵循的是“端到端深度学习”的实践。04YOLO目标检测算法YOLOv3对比其他算法04YOLO目标检测算法YOLO:YouOnlyLookOnce04YOLO目标检测算法YOLO是一种基于深度卷积神经网络的物体目标检测算法;YOLO网格中的每个单元格负责检测自身内部的对象;YOLOv5-X、YOLOX-X:mAP>50%,60fps,COCO-640×640。04YOLO目标检测算法YOLO的第五代改进算法使用PyTorch框架,使用方便P模型权重文件可转化为ONXX格式以适配安卓可转换为Opencv的使用格式可通过CoreML转化为IOS格式部署至手机应用端YOLOv504YOLO目标检测算法网络的容量越大->参数越多->准确率越高相同硬件配置的条件下,训练参数越多的网络需要越多的时间YOLOv5的四种网络结构四种YOLOv5网络结构中,移动端的部署建议使用的网络为YOLOv5sYOLOv5m云平台端的部署建议使用的网络为YOLOv5lYOLOv5x04YOLO目标检测算法YOLOv5的四种网络结构PyTorch与YOLOv5简介204知识储备目标检测简介1Pytorch转onnx的意义433COCO数据集04COCO数据集的由来COCO的全称是MicrosoftCommonObjectsinContext(场景中的常见物体)起源于微软于2014年出资标注的MicrosoftCOCO数据集ImageNet计算机视觉竞赛停办后,COCO竞赛就成为目标识别和检测等领域的一个最权威、最重要的标杆。04COCO数据集简介COCO数据集是一个大型目标分类(识别)、检测、分割、语义标注数据集。这个数据集以场景理解(ScenceUnderstanding)为目标,主要从复杂的日常场景中截取,图像中的目标通过精确的分割进行位置的标定。COCO是目前为止有语义分割的最大数据集:80个类别;超过33万张图片;其中20万张有标注,整个数据集中个体的数目超过150万个。04COCO数据集简介COCO数据集中的部分图片如右图所示。COCO数据集中标注类别包含:人:1类交通工具:8类,自行车,汽车等公路常见:5类,信号灯,停车标志等动物:10类,猫狗等携带物品:5类,背包,雨伞等运动器材:10类,飞盘,滑雪板,网球拍等。厨房餐具:7类,瓶子,勺子等水果及食品:10类家庭用品:7类,椅子、床,电视等家庭常见物品:17类,笔记本,鼠标,遥控器等PyTorch与YOLOv5简介204知识储备目标检测简介1Pytorch转onnx的意义433COCO数据集Pytorch转onnx的意义04一般来说转ONNX只是一个手段,在之后得到ONNX模型后还需要再将它做转换,比如:转换到TensorRT上完成部署,或者有的人多加一步,从ONNX先转换到caffe,再从caffe到tensorRT。原因是Caffe对tensorRT更为友好。转换成我们边缘端需要用到的rknn模型,完成部署等各类情况因此在转ONNX工作开展之前,首先必须明确目标后端。ONNX只是一个格式,就和json一样。只要你满足一定的规则,都算是合法的,因此单纯从Pytorch转成一个ONNX文件很简单。但是不同后端设备接受的onnx是不一样的。职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一基于Pytorch的YOLOv5模型训练及转换05任务实施基于YOLOv5进行模型训练1预测模型2Pytorch模型文件转onnx模型文件1131133基于YOLOv5进行模型训练05下载项目源码基于YOLOv5进行模型训练05安装所需要的依赖包基于YOLOv5进行模型训练05验证PyTorch包基于YOLOv5进行模型训练05准备数据集05模型训练(1)基于YOLOv5进行模型训练05模型训练(2)基于YOLOv5进行模型训练05基于YOLOv5进行模型训练利用以下脚本显示相关图片,只需要修改图片路径即可:img=cv2.imread(图片路径)frommatplotlibimportpyplotasplt

importnumpyasnp

importcv2

img=cv2.imread('yolov5/runs/detect/exp/bus.jpg')

img2=img[:,:,::-1]#列表数组左右翻转,实现BGR赚RGB

plt.figure(figsize=(20,20))

plt.imshow(img2)05任务实施基于YOLOv5进行模型训练1预测模型2Pytorch模型文件转onnx模型文件113113305预测模型yolov5项目有提供模型检测脚本detect.py,利用这个脚本可以对自己训练的模型文件进行预测,默认会将预测结果输出到yolov5/runs/detect/。05预测模型根据模型训练出来的结果路径,指定权重weights输出结果如下:05预测模型检测前后效果对比05任务实施基于YOLOv5进行模型训练1预测模型2Pytorch模型文件转onnx模型文件113113305Pytorch模型文件转onnx模型文件在做模型文件转换之前,需要搭建环境,安装所需的Python依赖包,手动安装以下依赖包:coremltools==4.1

onnx==1.10.1

scikit-learn==0.19.2

onnx-simplifier==0.3.6在命令行中,安装依赖包可以写一个或多个包同时安装例如:!sudopipinstallcoremltools==4.1onnx==1.10.1scikit-learn==0.19.2onnx-simplifier==0.3.6-i/simple05Pytorch模型文件转onnx模型文件在上一节,准备好的Pytorch模型best.pt,具体路径,比如:yolov5/runs/train/exp3/weights/best.pt,转换后的onnx模型默认是在Pytorch的模型路径里面,比如:yolov5/runs/train/exp3/weights/best.onnx05Pytorch模型文件转onnx模型文件指定模型路径,利用以下命令进行转换:python3path/to/export.py--weights$m.pt--img640--batch-size1输出结果为:05Pytorch模型文件转onnx模型文件指定模型路径,利用以下命令进行转换:python3path/to/export.py--weights$m.pt--img640--batch-size1输出结果为:05Pytorch模型文件转onnx模型文件利用预测脚本detect.py指定onnx模型文件路径,和需要预测的图片源,结果默认输出到yolov5/runs/detect/exp*目录下面。由于Pytorch模型文件转出来的onnx模型文件默认输入为640*640图片源,所以需要把图片先转成640*640的图片后,再进行使用05Pytorch模型文件转onnx模型文件转换出来的原图:预测模型命令:!pythonyolov5/detect.py--weightsyolov5/runs/train/exp/weights/best.onnx--sourceyolov5/data/images/zidane2.jpg--projectyolov5/runs/detect结果为:职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一基于Pytorch的YOLOv5模型训练及转换任务检查与评价061、请参照评价标准完成自评和对其他小组的互评。2、各组请代表分析本组任务实施经验。序号评价内容评价标准分值得分1知识运用(20%)掌握相关理论知识,理解本次任务要求,制定详细计划,计划条理清晰,逻辑正确(20分)20分

理解相关理论知识,能根据本次任务要求、制定合理计划(15分)了解相关理论知识,有制定计划(10分)无制定计划(0分)2专业技能(40%)完成Pytorch-yolov5的模型训练,预测自己训练的模型以及将Pytorch模型文件转onnx模型文件。(40分)40分

完成Pytorch-yolov5的模型训练,预测自己训练的模型。(30分)完成Pytorch-yolov5的模型训练。(20分)完成环境的配置。(10分)没有完成Pytorch-yolov5的模型训练。(0分)3核心素养(20%)具有良好的自主学习能力、分析解决问题的能力、整个任务过程中有指导他人(20分)20分

具有较好的学习能力和分析解决问题的能力,任务过程中无指导他人(15分)能够主动学习并收集信息,有请教他人进行解决问题的能力(10分)不主动学习(0分)4课堂纪律(20%)设备无损坏、设备摆放整齐、工位区域内保持整洁、无干扰课堂秩序(20分)20分

设备无损坏、无干扰课堂秩序(15分)无干扰课堂秩序(10分)干扰课堂秩序(0分)总得分职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一基于Pytorch的YOLOv5模型训练及转换任务小结07职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一基于Pytorch的YOLOv5模型训练及转换任务拓展08尝试调整该任务中的模型训练参数并重新训练,提升模型的识别精度。谢谢大家项目四基于Pytorch(YOLOv5)目标检测模型部署边缘智能计算应用任务二ONNX模型文件转RKNN模型文件边缘智能计算应用职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二ONNX模型文件转RKNN模型文件了解转成rknn模型的意义了解rknn的相关知识掌握如何将onnx模型文件转成rknn模型文件掌握如何预测rknn模型文件职业能力目标01知识目标技能目标职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二ONNX模型文件转RKNN模型文件此任务要求读者了解转成rknn模型的意义,搭建onnx模型文件转rknn模型文件的环境,将onnx模型文件转换rknn模型文件,预测rknn模型文件并部署到AI边缘开发板。任务描述任务要求创建模型转换所需的虚拟环境配置脚本参数进行模型转换验证RKNN模型RKNN模型部署到边缘端任务描述与要求02职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二ONNX模型文件转RKNN模型文件任务分析onnx模型文件转成rknn模型文件开始之前需要做哪些准备工作?预测rknn模型文件过程中涉及到哪些参数?任务分析与计划03任务计划表项目名称基于Pytorch(yolov5)目标检测模型部署任务名称ONNX模型文件转RKNN模型文件计划方式自主设计计划要求请用8个计划步骤来完整描述出如何完成本次任务序号任务计划1

2

3

4

5

6

78通过上面的思考,你是否对本任务要完成的工作有所了解?让我们一起来制订完成本次任务的实施计划吧!任务分析与计划03职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二ONNX模型文件转RKNN模型文件转rknn模型文件的意义204知识储备ONNX简介133模型部署边缘计算404ONNX简介OpenNeuralNetworkExchange(ONNX,开放神经网络交换)格式,是一个用于表示深度学习模型的标准,可使模型在不同框架之间进行转移。04ONNX简介ONNX是一种针对机器学习所设计的开放式的文件格式,用于存储训练好的模型。它使得不同的人工智能框架(如Pytorch,MXNet)可以采用相同格式存储模型数据并交互。04ONNX简介ONNX的规范及代码主要由微软,亚马逊,Facebook和IBM等公司共同开发,以开放源代码的方式托管在Github上。04ONNX简介目前官方支持加载ONNX模型并进行推理的深度学习框架有:Caffe2,PyTorch,MXNet,ML.NET,Tensor和MicrosoftCNTK,并且TensorFlow也非官方的支持ONNX。04ONNX简介假设一个场景:现在某组织因为主要开发用TensorFlow为基础的框架,现在有一个深度算法,需要将其部署在移动设备上,以观测变现。传统地我们需要用caffe2重新将模型写好,然后再训练参数;试想下这将是一个多么耗时耗力的过程。04ONNX简介此时,ONNX便应运而生,Caffe2,PyTorch,MicrosoftCognitiveToolkit,ApacheMXNet等主流框架都对ONNX有着不同程度的支持。这就便于了我们的算法及模型在不同的框架之间的迁移。04ONNX简介开放式神经网络交换(ONNX)是迈向开放式生态系统的第一步,它使AI开发人员能够随着项目的发展选择合适的工具04ONNX简介

ONNX为AI模型提供开源格式。它定义了可扩展的计算图模型,以及内置运算符和标准数据类型的定义。04ONNX简介ONNX解释计算图的可移植,它使用graph的序列化格式。它不一定是框架选择在内部使用和操作计算的形式。例如,如果在优化过程中操作更有效,则实现可以在存储器中以不同方式表示模型。转rknn模型文件的意义204知识储备ONNX简介133模型部署边缘计算404转rknn模型文件的意义上一节,有提到,onnx模型文件格式是只是一个过渡格式,其主要目的是将其他框架的模型文件转成目标模型文件。04转rknn模型文件的意义在这里就是要将Pytorch模型文件转换成rknn这个目标模型文件。而转成rknn模型文件的意义在于与AI边缘计算终端结合04转rknn模型文件的意义将rknn模型文件部署到终端上,利用AI边缘终端的高速NPU处理能力来进行推理,进而实现实际场景化的应用。转rknn模型文件的意义204知识储备ONNX简介133模型部署边缘计算404模型部署模型训练重点关注的是如何通过训练策略来得到一个性能更好的模型,其过程似乎包含着各种“玄学”,被戏称为“炼丹”。整个流程包含从训练样本的获取(包括数据采集与标注),模型结构的确定,损失函数和评价指标的确定,到模型参数的训练,这部分更多是业务方去承接相关工作。一旦“炼丹”完成(即训练得到了一个指标不错的模型),如何将这颗“丹药”赋能到实际业务中,充分发挥其能力,这就是部署方需要承接的工作。04模型部署云端部署常见的模式是模型部署在云端服务器,用户通过网页访问或者API接口调用等形式向云端服务器发出请求,云端收到请求后处理并返回结果。边缘部署则主要用于嵌入式设备,主要通过将模型打包封装到SDK,集成到嵌入式设备,数据的处理和模型推理都在终端设备上执行。如何对应两种场景去合理部署我们的模型呢?04模型部署针对上面提到的两种场景,分别有两种不同的部署方案,Service部署和SDK部署。04模型部署Service部署:主要用于中心服务器云端部署,一般直接以训练的引擎库作为推理服务模式。04模型部署SDK部署:主要用于嵌入式端部署场景,以C++等语言实现一套高效的前后处理和推理引擎库(高效推理模式下的Operation/Layer/Module的实现),用于提供高性能推理能力。此种方式一般需要考虑模型转换(动态图静态化)、模型联合编译等进行深度优化。04模型部署SDK部署与Service部署的对比04模型部署部署的核心目标是合理把控成本、功耗、性价比三大要素。成本问题是部署硬件的重中之重,AI模型部署到硬件上的成本将极大限制用户的业务承受能力。成本问题主要聚焦于芯片的选型,比如,对比寒武纪MLU220和MLU270,MLU270主要用作数据中心级的加速卡,其算力和功耗都相对于边缘端的人工智能加速卡MLU220要低。至于Nvida推出的Jetson和TeslaT4也是类似思路,TeslaT4是主打数据中心的推理加速卡,而Jetson则是嵌入式设备的加速卡。转rknn模型文件的意义204知识储备ONNX简介133模型部署边缘计算4边缘计算04思考一下,边缘计算与云计算相比优势在哪里?边缘计算是将计算任务部署到靠近物或数据源头的网络边缘侧的设备上,融合网络、计算、存储、应用核心能力的分布式开放平台,就近提供边缘智能服务。边缘网关04边缘网关是部署在网络边缘侧的网关,通过网络联接、协议转换等功能联接物理和数字世界,提供轻量化的联接管理、实时数据分析及应用管理功能。数据优化敏捷连接实时响应智能分析减少流量边缘网关拥有强劲的边缘计算能力职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二ONNX模型文件转RKNN模型文件05任务实施onnx模型文件转rknn模型文件1部署到AI边缘开发板2onnx模型文件转rknn模型文件05搭建环境在RK3399Pro板子上,官方有提供rknn_toolkit-1.7.1-cp36-cp36m-linux_x86_64.whl的pip安装包;这个软件包,就是用来转换模型,加载模型,推理模型等等,但目前Linux版本只能支持python3.6的版本,最新安装包的版本,可以根据官方地址进行下载/rockchip-linux/rknn-toolkit/releasesonnx模型文件转rknn模型文件05搭建环境在虚拟环境下,安装依赖包,转换成rknn模型主要依赖一下几个包:• rknn_toolkit-1.7.1-cp36-cp36m-linux_x86_64.whl• torch==1.9.0• torchaudio==0.9.0• torchvision==0.10.0• tensorflow==2.1.0• numpy==1.19.5onnx模型文件转rknn模型文件05转换模型利用rknn_toolkit工具将onnx模型文件转换成rknn模型文件,基本转换流程为:onnx模型文件转rknn模型文件05转换模型为了后面部署方便,把上一节的onnx模型文件拷贝到yolov5/rknn/models/下面,然后再进行转换,转换完成后,将yolov5/rknn/目录打包下来,上传到开发板上importosimportsysimportnumpyasnpfromrknn.apiimportRKNN初始化rknnSDK环境rknn=RKNN(verbose=True,verbose_file=None)• verbose指定是否要在屏幕上打印详细日志信息;默认False不打印,• verbose_file调试信息指定转储到文件路径,默认为None。如果设置了verbose_file参数,且verbose参数值为True,日志信息还将写到该参数指定的文件中onnx模型文件转rknn模型文件05转换模型调用config接口设置模型的预处理参数rknn.config(reorder_channel='012',

mean_values=[[0,0,0]],

std_values=[[255,255,255]],

optimization_level=3,

target_platform='rk3399pro',

output_optimize=1,

quantize_input_node=True)onnx模型文件转rknn模型文件05转换模型调用load_onnx接口,加载原始的onnx模型文件ret=rknn.load_onnx(model='./yolov5/rknn/models/best.onnx',outputs=['378','439','500'])onnx模型文件转rknn模型文件05转换模型调用build接口,依照加载的模型结构及权重数据,构建对应的RKNN模型。ret=rknn.build(do_quantization=True,dataset=‘./rknn/dataset.txt’,pre_compile=False,rknn_batch_size=1)onnx模型文件转rknn模型文件05转换模型调用export_rknn接口,将RKNN模型文件保存到指定文件路径中(.rknn后缀)。ret=rknn.export_rknn('./rknn/models/best.rknn')onnx模型文件转rknn模型文件05运行RKNN模型运行RKNN模型时,用户不需要设置模型预处理参数,也不需要构建RKNN模型其使用流程如右图所示:onnx模型文件转rknn模型文件05创建RKNN对象,以初始化RKNNSDK环境(前面已经有创建过,可以忽略,具体说明参照2.2.1)importosimportsysimportnumpyasnpfromrknn.apiimportRKNNrknn=RKNN(verbose=True)调用load_rknn接口,加载RKNN模型,参数load_model_in_npu通常默认就行ret=rknn.load_rknn(path,load_model_in_npu=False)onnx模型文件转rknn模型文件05预编译rknn模型离线预编译(推荐)在线预编译(不推荐)同样,RKNNToolkit也提供在线编译的接口:export_rknn_precompile_model。使用该接口,可以将普通RKNN模型转成预编译模型,但这个模型需要有硬件的配合。构建RKNN模型时,可以指定预编译选项以导出预编译模型,这被称为离线编译。离线预编译在之前有介绍过,就是在转换模型的时候,构建模型的接口上,加参数pre_compile=Trueonnx模型文件转rknn模型文件05预测rknn模型利用预测脚本rknn_detect_yolov5.py对生成的rknn模型进行预测。如果在模拟器上(本机)进行预测,则导出的模型时,不能开启预编译(pre_compile)的开关,否则无法进行预测,预编译模型只能在硬件平台进行预测。根据实际转换后的模型,修改以下内容,进行预测:修改脚本中,自己的模型路径修改脚本中,要检测的图片路径设置检测结果保存的图片路径注意:

每一次运行预测模型时,需要重启一下内核,以免缓存干扰05任务实施onnx模型文件转rknn模型文件1部署到AI边缘开发板2部署到AI边缘开发板05部署步骤如下:(1)将模型(比如:yolov5.rknn),预测脚本(rknn_detect_yolov5.py),以及要测试的图片下载到本地;(2)在AI边缘开发板上,创建一个项目目录(比如:test_rknn),并将rknn_detect_yolov5.py、./models/best.rknn、bus.jpg上传至该目录;mkdirtest_rknn为了提高模型的加载速度,建议采用预编译后的模型(非预编译模型也可以),部署到开发板当中。部署到AI边缘开发板05(3)修改rknn_detect_yolov5.py脚本,将脚本中,模型路径,需要检测的图片路径,结果图片保存路径改为当前目录;(4)将模型,预测脚本,测试图片上传到开发板项目目录中,运行命令sudopython3rknn_detect_yolov5.py即可;部署到AI边缘开发板05(5)查看使用NPU进行加速的RKNN模型的推理结果。职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二ONNX模型文件转RKNN模型文件任务检查与评价061、请参照评价标准完成自评和对其他小组的互评。2、各组请代表分析本组任务实施经验。序号评价内容评价标准分值得分1知识运用(20%)掌握相关理论知识,理解本次任务要求,制定详细计划,计划条理清晰,逻辑正确(20分)20分

理解相关理论知识,能根据本次任务要求、制定合理计划(15分)了解相关理论知识,有制定计划(10分)无制定计划(0分)2专业技能(40%)完成onnx模型文件转rknn模型文件和部署到AI边缘开发板。(40分)40分

完成onnx模型文件转rknn模型文件。(30分)完成构建RKNN模型。(20分)完成环境的配置。(10分)没有完成任务。(0分)3核心素养(20%)具有良好的自主学习能力、分析解决问题的能力、整个任务过程中有指导他人(20分)20分

具有较好的学习能力和分析解决问题的能力,任务过程中无指导他人(15分)能够主动学习并收集信息,有请教他人进行解决问题的能力(10分)不主动学习(0分)4课堂纪律(20%)设备无损坏、设备摆放整齐、工位区域内保持整洁、无干扰课堂秩序(20分)20分

设备无损坏、无干扰课堂秩序(15分)无干扰课堂秩序(10分)干扰课堂秩序(0分)总得分职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二ONNX模型文件转RKNN模型文件任务小结07职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一基于Pytorch的YOLOv5模型训练及转换任务拓展08修改预测脚本,使其能识别视频流中的物体。谢谢大家项目四基于Pytorch(YOLOv5)目标检测模型部署边缘智能计算应用任务三基于YOLOv5的实时检测模型部署边缘智能计算应用职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务三基于YOLOv5的实时检测模型部署了解rknn模型部署流程。能够使用RKNN格式的模型进行推理;能够完成推理后的图片处理并输出结果;能够使用线程的方式实现模型的实时检测;能够在边缘网关完成应用的运行与调试。职业能力目标01知识目标技能目标职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务三基于YOLOv5的实时检测模型部署此任务在边缘端对RKNN格式的模型进行测试,并通过线程的方式实现边缘端实时目标检测的应用。任务描述任务要求加载RKNN模型并初始化运行环境;使用RKNN模型进行模型推理;使用线程进行实时目标检测。任务描述与要求02职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务三基于YOLOv5的实时检测模型部署任务分析实时推理为什么是用训练好的模型?模型可以部署在哪些端?任务分析与计划03任务计划表项目名称基于Pytorch(yolov5)目标检测模型部署任务名称基于YOLOv5的实时检测模型部署计划方式自主设计计划要求请用8个计划步骤来完整描述出如何完成本次任务序号任务计划1

2

3

4

5

6

78通过上面的思考,你是否对本任务要完成的工作有所了解?让我们一起来制订完成本次任务的实施计划吧!任务分析与计划03职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务三基于YOLOv5的实时检测模型部署设备端模型部署204知识储备云计算部署模式133边缘AI云计算部署模式04云计算有4种部署模式社区云混合云公共云私有云04私有云

如果一个云端的所有消费者只来自一个特定的单位组织(如微算科技公司),那么就是私有云。私有云的核心特征是云端资源只供一个企事业单位内的员工使用,其他的人和机构都无权租赁并使用云端计算资源。至于云端部署何处、所有权归谁、由谁负责日常管理,并没有严格的规定。

云端部署何处,这有两个可能,一是部署在单位内部(如机房),称为本地私有云;二是托管在别处(如阿里云端),称为托管私有云。云计算部署模式04本地私有云

由于本地私有云的云端部署在企业内部,私有云的安全及网络安全边界定义都由企业自己实现并管理,一切由企业掌控,所以本地私有云适合运行企业中关键的应用。云计算部署模式04托管私有云

托管私有云是把云端托管在第三方机房或者其他云端,计算设备可以自己购买,也可以租用第三方云端的计算资源,消费者所在的企业一般通过专线与托管的云端建立连接,或者利用叠加网络技术在因特网上建立安全通道(VPN),以便降低专线费用。托管私有云由于云端托管在公司之外,企业自身不能完全控制其安全性,所以要与信誉好、资金雄厚的托管方合作,这样的托管方抵御天灾人祸的能力更强。云计算部署模式04社区云

如果一个云端的所有消费者来自两个或两个以上特定的单位组织,那么就是社区云。社区云的核心特征是云端资源只给两个或者两个以上的特定单位组织内的员工使用,除此之外的人和机构都无权租赁和使用云端计算资源。参与社区云的单位组织具有共同的要求,如云服务模式、安全级别等。具备业务相关性或者隶属关系的单位组织建设社区云的可能性更大一些,因为一方面能降低各自的费用,另一方面能共享信息。与私有云类似,社区云的云端也有两种部署方法,即本地部署和托管部署。云计算部署模式04本地社区云

由于存在多个单位组织,所以本地部署存在三种情况:只部署在一个单位组织内部;部署在部分单位组织内部;部署在全部单位组织内部。如果云端部署在多个单位组织,那么每个单位组织只部署云端的一部分,或者做灾备。云计算部署模式04托管社区云

类似于托管私有云,托管社区云也是把云端部署到第三方,只不过用户来自多个单位组织,所以托管方还必须制订切实可行的共享策略。云计算部署模式04公共云

如果一个云端的所有消费者来自社会公众,那么就是公共云。公共云的核心特征是云端资源面向社会大众开放,符合条件的任何个人或者单位组织都可以租赁并使用云端资源。公共云的管理比私有云的管理要复杂得多,尤其是安全防范,要求更高。公共云的一些例子:深圳超算中心、亚马逊、微软的Azure、阿里云等。

云计算部署模式04混合云如果一个云端的资源来自两个或两个以上的云,那么就是混合云。混合云是由两个或两个以上不同类型的云(私有云、社区云、公共云)组成的,它其实不是一种特定类型的单个云,其对外呈现出来的计算资源来自两个或两个以上的云,只不过增加了一个混合云管理层。云服务消费者通过混合云管理层租赁和使用资源,感觉就像在使用同一个云端的资源,其实内部被混合云管理层路由到真实的云端了。

在右图中,假如用户在混合云上租赁了一台虚拟机(IaaS型资源)及开发工具(PaaS型资源),那么用户每次都是连接混合云端,并使用其中的资源。用户并不知道自己的虚拟机实际上位于另一个IaaS私有云端,而开发工具又在另一个公共云上。云计算部署模式04混合云部署方法由于私有云和社区云具有本地和托管两种类型,再加上公共云,共有5种类型,所以混合云的组keys[-1]合方式就有很多种形式了。

云计算部署模式04公/私混合云混合云属于多云这个大类,是多云大类中最主要的形式,而公/私混合云又是混合云中最主要的形式,因为它同时具备了公共云的资源规模和私有云的安全特征。从下图中可以看出私有云和公共云构成的混合云占比达到55%。

云计算部署模式04公/私混合云的优势1.架构更灵活:可以根据负载的重要性灵活分配最适合的资源,例如将内部重要数据保存在本地云端,而把非机密功能移动到公共云区域。2.技术方面更容易掌控。3.更安全:具备私有云的保密性,同时具有公共云的抗灾性(在公共云上建立虚拟的应急灾备中心或者静态数据备份点)。4.更容易满足合规性要求:云计算审计员对多租户的审查比较严格,他们往往要求云计算服务提供商必须为云端的某些(或者全部)基础设施提供专门的解决方案。而这种混合云由于融合了专门的硬件设备,提高了网络安全性,更容易通过审计员的合规性检查。5.更低的费用:租用第三方资源来平抑短时间内的季节性资源需求峰值,相比自己配置最大化资源以满足需求峰值的成本,这种短暂租赁的费用要低得多。如下图所示。

云计算部署模式04公/私混合云的构成1.私有云:这是混合云的主要组成部分,企业部署混合云的步骤一般是先“私”后“公”。2.公共云。3.公/私云之间的网络连接:一般为公共云提供商提供的高速专线,或者是第三方的VPN。4.混合云管理平台:是用户的统一接入点,实现资源的自动化、费用结算、报表生成、云端日常操作及API调用等,可以进一步细化为数据管理、虚机管理、应用管理等几个层面的软件。目前混合云管理平台产品有VMware。

公/私混合云的功能混合云可以做多个层面的事情,基本可以分为数据层面和业务负载层面。在这两个层面,有一些典型的应用场景,具体如下:1.数据备份:将私有云的数据备份到更便宜和可靠的公共云上。2.灾备:在私有云出现故障时,由公共云上的灾备环境提供服务。3.负载延伸:当私有云无法提供新增负载所需要的资源时,在公共云上创建虚拟主机来支持新的负载,当负载下降后再删除这些虚拟主机回到纯私有云。4.使用公共云作为开发测试云。

云计算部署模式设备端模型部署204知识储备云计算部署模式133边缘AI04设备端模型部署当我们把深度学习模型训练好之后,想要基于深度学习模型来开发实际应用的时候,主要有三种不同的应用场景移动端、桌面端和服务器端。移动端:我们将模型封装成SDK给Android和IOS调用,由于移动端算力有限通常还需要考虑基于移动端CPU或GPU框架的优化问题来提速。如果模型要求的算力比较大,就只能考虑以API的形式来调用了,这时候模型是部署在服务器上的。桌面端:桌面应用主要包括Windows和MacOS以及Linux,这时候我们还是需要将模型封装成SDK然后提供接口来进行调用。Windows将模型封装成dll或lib库,Linux封装成so或a库,MacOS封装为.a或.tbd库。服务器端:服务器端模型的部署如果对并发量要求不高,通常可能都是采用flask或tornado来封装一个API接口来给调用。但是这种方式有一个致命的缺点就是,能支持的并发量很低,可扩展性也不高,如果被工具服务器很容易奔溃。对于并发量要求高的应用建议使用基于modelserver的服务框架。04设备端模型部署近年来深度学习模型在计算机视觉、自然语言处理、搜索推荐广告等各种领域,不断刷新传统模型性能,并得到了广泛应用。随着移动端设备计算能力的不断提升,移动端AI落地也成为了可能。相比于服务端,移动端模型的优势有:1.减轻服务端计算压力,并利用云端一体化实现负载均衡。特别是在双11等大促场景,服务端需要部署很多高性能机器,才能应对用户流量洪峰。平时用户访问又没那么集中,存在巨大的流量不均衡问题。直接将模型部署到移动端,并在置信度较高情况下直接返回结果,而不需要请求服务端,可以大大节省服务端计算资源。同时在大促期间降低置信度阈值,平时又调高,可以充分实现云端一体负载均衡。2.实时性好,响应速度快。在feed流推荐和物体实时检测等场景,需要根据用户数据的变化,进行实时计算推理。如果是采用服务端方案,则响应速度得不到保障,且易造成请求过于密集的问题。利用端计算能力,则可以实现实时计算。3.稳定性高,可靠性好。在断网或者弱网情况下,请求服务端会出现失败。而采用端计算,则不会出现这种情况。在无人车和自动驾驶等可靠性要求很高的场景下,这一点尤为关键,可以保证在隧道、山区等场景下仍能稳定运行。4.安全性高,用户隐私保护好。由于直接在端上做推理,不需要将用户数据传输到服务端,免去了网络通信中用户隐私泄露风险,也规避了服务端隐私泄露问题。04设备端模型部署移动端部署深度学习模型也有很大的挑战。主要表现在,移动端等嵌入式设备,在计算能力、存储资源、电池电量等方面均是受限的。故移动端模型必须满足模型尺寸小、计算复杂度低、电池耗电量低、下发更新部署灵活等条件。因此模型压缩和加速就成为了目前移动端AI的一个热门话题。模型压缩和加速不仅仅可以提升移动端模型性能,在服务端也可以大大加快推理响应速度,并减少服务器资源消耗,大大降低成本。结合移动端AI模型和服务端模型,实现云端一体化,是目前越来越广泛采用的方案。模型压缩和加速是两个不同的话题,有时候压缩并不一定能带来加速的效果,有时候又是相辅相成的。压缩重点在于减少网络参数量,加速则侧重在降低计算复杂度、提升并行能力等。模型压缩和加速是一个很大的命题,可以从多个角度优化。总体来看,个人认为主要分为三个层次:1.算法应用层压缩加速。这个维度主要在算法应用层,也是大多数算法工程师的工作范畴。主要包括结构优化(如矩阵分解、分组卷积、小卷积核等)、量化与定点化、模型剪枝、模型蒸馏等。2.框架层加速。这个维度主要在算法框架层,比如tf-lite、NCNN、MNN等。主要包括编译优化、缓存优化、稀疏存储和计算、NEON指令应用、算子优化等3.硬件层加速。这个维度主要在AI硬件芯片层,目前有GPU、FPGA、ASIC等多种方案,各种TPU、NPU就是ASIC这种方案,通过专门为深度学习进行芯片定制,大大加速模型运行速度。设备端模型部署204知识储备云计算部署模式133边缘AI边缘AI04

边缘AI实际上指的就是终端智能,即在硬件设备上本地处理的AI算法。边缘AI是融合网络、计算、存储、应用核心能力的开放平台,将AI部署在边缘设备上可以使智能更贴近用户,更快、更好地为用户提供智能服务。随着终端设备的日益增长,海量的数据处理需要传送到云计算中心进行,这增大了系统的时延,同时对网络带宽带来了极大的压力。因此,实时性和带宽不足成为了云端AI的两大劣势,为了带来更快、更低成本、更安全的应用体验,AI开始由云端向边缘端蔓延。边缘AI04边缘AI与云端AI已经形成了对立面呢?随着边缘算力的丰富,包括5G大规模铺开,越来越多地应用场景选择在边缘进行展开,但这并不代表云和边缘是两个互相对立的角色,相反,这两者是相辅相成,分工协同的。云端有着非常强的算力,智能终端从技术和商业模式上来讲都是云端智能在边缘侧的一个延伸,是一个分布式的技术体现边缘AI最大的特点便是离客户更近,为云端减少负载,节省带宽,提升反馈效率。其次,让终端数据留在终端,让云端去处理一些抽象、有共性的数据,从而保护隐私。但问题也随之而来,在终端设备收到连接问题、功耗及小型化的困扰下,芯片的面积、功耗、算力都不能够完整满足客户所有的需求,这时就需要云端AI芯片。在分工协同的情况下,边缘侧会更加场景化,更加人性化,更加体现出它对于一些场景的理解和高效性,而云端芯片需要更加智能化,能够处理各种各样的业务。职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务三基于YOLOv5的实时检测模型部署05任务实施RKNN模型加载1RKNN模型推理测试2使用线程进行实时目标检测32加载RKNN模型1初始化RKNNSDK环境3初始化运行时环境RKNN模型加载05RKNN模型加载初始化RKNNSDK环境05rknn=RKNN(verbose=True)1.初始化RKNNSDK环境rknn=RKNN(verbose=True,verbose_file=None)Verbose:指定是否要在屏幕上打印详细日志信息;默认False不打印,verbose_file:调试信息指定转储到文件路径,默认为None。如果有设置,且verbose参数值为True,日志信息还将写到该参数指定的文件中importcv2importthreading#这是python的标准库,线程库fromrknn.apiimportRKNNfromyolov5.rknn.yolov5_rknn_detectimport*初始化RKNNSDK环境05RKNN_MODEL='./yolov5/rknn/models/best.rknn'ret=rknn.load_rknn(RKNN_MODEL)2.加载RKNN模型ret=rknn.load_rknn(path,load_model_in_npu=False)主要的参数说明:path:RKNN模型文件路径。load_model_in_npu:是否直接加载npu中的rknn模型。其中path为rknn模型在npu中的路径。返回值:0表示加载成功,-1表示加载失败只有当RKNN-Toolkit运行在运行在RK3399ProLinux开发板或连有开发板或连有NPU设备的的PC上时才可以设为True。默认值为False。初始化RKNNSDK环境05ret=rknn.init_runtime()3.初始化运行时环境ret=rknn.init_runtime(target=None,device_id=None,perf_debug=False,eval_mem=False,async_mode=False)主要的参数说明:target:目标硬件平台,目前支持rk3399pro、rk1806、rk1808、rv1109、rv1126。默认为None,即在PC使用工具时,模型在模拟器上运行;在RK3399ProLinux开发板运行时,模型在RK3399Pro自带NPU上运行;否则在设定的target上运行。如果是开发板上直接运行,通常不写。device_id:设备编号,如果PC连接多台设备时,需要指定该参数,设备编号可以通过list_devices接口查看。默认值为None。如果是开发板上直接运行,通常不写。perf_debug:进行性能评估时是否开启debug模式。在debug模式下,可以获取到每一层的运行时间,否则只能获取模型运行的总时间。默认值为False。eval_mem:是否进入内存评估模式。进入内存评估模式后,可以调用eval_memory接口获取模型运行时的内存使用情况。默认值为False。async_mode:是否使用异步模式。调用推理接口时,涉及设置输入图片、模型推理、获取推理结果三个阶段。如果开启了异步模式,设置当前帧的输入将与推理上一帧同时进行,所以除第一帧外,之后的每一帧都可以隐藏设置输入的时间,从而提升性能。在异步模式下,每次返回的推理结果都是上一帧的。该参数的默认值为False。返回值:0表示初始化运行时环境成功,-1表示初始化运行时环境失败。05任务实施RKNN模型加载1RKNN模型推理测试2使用线程进行实时目标检测32

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论