边缘智能计算应用课件:TensorFlow模型转RKNN模型并进行预测_第1页
边缘智能计算应用课件:TensorFlow模型转RKNN模型并进行预测_第2页
边缘智能计算应用课件:TensorFlow模型转RKNN模型并进行预测_第3页
边缘智能计算应用课件:TensorFlow模型转RKNN模型并进行预测_第4页
边缘智能计算应用课件:TensorFlow模型转RKNN模型并进行预测_第5页
已阅读5页,还剩58页未读, 继续免费阅读

下载本文档

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

文档简介

基于TensorFlow的图像上色模型部署边缘智能计算应用TensorFlow模型转RKNN模型并进行预测边缘智能计算应用职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08

TensorFlow模型转RKNN模型并进行预测了解TensorFlow和rknn的相关知识了解TensorFlow模型转rknn模型的意义掌握如何将TensorFlow模型转成rknn模型掌握如何使用rknn模型进行预测掌握将rknn模型部署到AI边缘开发板并进行预测职业能力目标01知识目标技能目标职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08

TensorFlow模型转RKNN模型并进行预测

此任务的主要内容是了解TensorFlow模型转换成rknn模型流程,通过代码将TensorFlow模型转换成rknn模型,并使用rknn模型进行预测。任务描述任务要求完成TensorFlow模型转rknn模型;完成部署到AI边缘开发板。任务描述与要求02职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08

TensorFlow模型转RKNN模型并进行预测任务分析什么时rknn模型,为什么要将TensorFlow模型转rknn模型?如何将TensorFlow模型转rknn模型任务分析与计划03任务计划表项目名称基于TensorFlow的图像上色模型部署任务名称TensorFlow模型转RKNN模型并进行预测计划方式自主设计计划要求请用8个计划步骤来完整描述出如何完成本次任务序号任务计划1

2

3

45678通过上面的思考,你是否对本任务要完成的工作有所了解?让我们一起来制订完成本次任务的实施计划吧!任务分析与计划03职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08

TensorFlow模型转RKNN模型并进行预测TensorFlow模型转rknn模型的意义204知识储备初识RKNN104初识RKNNRKNN是Rockchipnpu平台使用的模型类型,以.rknn后缀结尾的模型文件。Rockchip提供了完整了模型转换Python工具,方便用户将自主研发的算法模型转换成RKNN模型,同时Rockchip也提供了C/C++和PythonAPI接口。RKNN-Toolkit04初识RKNNRKNN-Toolkit是为用户提供在PC、RockchipNPU平台上进行模型转换、推理和性能评估的开发套件,用户通过该工具提供的Python接口可以便捷地完成以下功能:模型转换,量化功能,模型推理,性能评估,内存评估,模型预编译,模型分段,自定义算子功能,量化精度分析功能,可视化功能,模型优化等级功能,模型加密功能。RKNN-Toolkit04初识RKNNWindows只提供Python3.6的安装包。MacOS提供python3.6和python3.7的安装包。ARM64平台(安装Debian9或10操作系统)提供Python3.5(Debain9)和Python3.7(Debian10)的安装包。因为PyTorch/TensorFlow等逐渐停止对Python3.5的支持,RKNN-Toolkit下一个大版本将移除Linuxx86平台上Python3.5的安装包,转而提供Python3.6和Python3.7的安装包。除MacOS平台外,其他平台的scipy依赖为>=1.1.0。ARM64平台不需要依赖sklearn和opencv-python。Jinja2只在使用自定义OP时用到。RKNN-Toolkit04初识RKNNRKNN-Toolkit是一个跨平台的开发套件,已支持的操作系统如下:(1.7.1版本toolkit)Ubuntu:16.04(x64)及以上Windows:7(x64)及以上MacOS:10.13.5(x64)及以上Debian:9.8(aarch64)及以上RKNN-Toolkit04初识RKNN模型转换:支持Caffe、TensorFlow、TensorFlowLite、ONNX、Darknet、Pytorch、MXNet模型转成RKNN模型,支持RKNN模型导入导出,后续能够在RockchipNPU平台上加载使用。从1.2.0版本开始支持多输入模型。从1.3.0版本开始支持Pytorch和MXNet。TensorFlow模型转rknn模型的意义204知识储备初识RKNN1TensorFlow模型转rknn模型04将TensorFlow模型转换成rknn目标模型的意义在于与AI边缘计算终端结合。TensorFlow模型转rknn模型04将rknn模型部署到终端上,利用AI边缘终端的高速NPU处理能力来进行推理,进而实现实际场景化的应用。TensorFlow模型转rknn模型04真实场景中,可以利用高算力设备,实现图像彩色化实时运行,在医疗,遥感,航天等各个领域,可以实时观测彩色化的图像,增强其可视化效果,增强信息量。职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08

TensorFlow模型转RKNN模型并进行预测部署到AI边缘开发板204知识储备TensorFlow模型转rknn模型11转换模型2运行RKNN模型3预编译rknn模型05转换模型05利用rknn_toolkit讲tensorflow模型转换成rknn模型,基本转换流程为:注解:以上步骤请按顺序执行。蓝色框标注的步骤导出的RKNN模型可以通过load_keras接口导入并使用。红色框标注的模型推理、性能评估和内存评估的步骤先后顺序不固定,根据实际使用情况决定。只有当目标平台是开发板时,才可以调用eval_memory接口获取内存使用情况。转换模型05!python36-mpipinstallnumpymatplotlibtensorflow==2.1.0./packages/rknn_toolkit-1.7.1-cp36-cp36m-linux_x86_64.whl--ignore-installed-i/simple/1环境配置与安装安装环境importosimportsysimportnumpyasnpfromrknn.apiimportRKNN引入必要的环境转换模型05rknn=RKNN(verbose=True,verbose_file=None)2创建RKNN对象初始化rknnSDK环境verbose

指定是否要在屏幕上打印详细日志信息;默认False不打印,verbose_file

调试信息指定转储到文件路径,默认为None。如果设置了verbose_file参数,且verbose参数值为True,日志信息还将写到该参数指定的文件中转换模型05rknn.config(mean_values=[[0,0,0]],std_values=[[255,255,255]],reorder_channel='012',target_platform='rk3399pro',output_optimize=1)3设置模型预处理参数调用config接口设置模型的预处理参数转换模型05ret=rknn.load_keras(model,convert_engine='Keras’)ret=rknn.load_keras(model='./models/model.h5')print(ret)4加载原始模型调用load_keras接口,加载原始的h5模型主要参数说明:model:h5模型文件(.h5后缀)所在的路径convert_engine:按顺序使用指定引擎转换,支持引擎包含[Keras,TFLite],默认为Keras。返回值:0表示导入成功,-1表示导入失败转换模型05ret=rknn.build(do_quantization=True,dataset='./rknn/dataset.txt',pre_compile=False,rknn_batch_size=1)5构建RKNN模型调用build接口,依照加载的模型结构及权重数据,构建对应的RKNN模型。主要参数说明:do_quantization:是否对模型进行量化,值为True或False。dataset:量化校正数据的数据集。目前支持文本文件格式,用户可以把用于校正的图片(jpg或png格式)或

npy文件路径放到一个.txt文件中。转换模型055构建RKNN模型文本文件里每一行一条路径信息。如:如有多个输入,则每个输入对应的文件用空格隔开,如:a.jpga2.jpg转换模型055构建RKNN模型pre_compile:预编译开关,如果设置成True,可以减小模型大小,及模型在硬件设备上的首次启动速度。但是打开这个开关后,构建出来的模型就只能在硬件平台上运行,无法通过模拟器进行推理或性能评估。如果硬件有更新,则对应的模型要重新构建。注意事项:1.该选项不能在RK3399ProLinux开发板/WindowsPC/MacOSXPC上使用。2.RKNN-Toolkit-V1.0.0及以上版本生成的预编译模型不能在NPU驱动版本小于0.9.6的设备上运行;RKNN-Toolkit-V1.0.0以前版本生成的预编译模型不能在NPU驱动版本大于等于0.9.6的设备上运行。

驱动版本号可以通过get_sdk_version接口查询。3.如果多个输入,该选项需要设置成False。转换模型055构建RKNN模型rknn_batch_size:模型的输入Batch参数调整,默认值为1。如果大于1,则可以在一次推理中同时推理多帧输入图像或输入数据,如MobileNet模型的原始input维度为[1,224,224,3],output维度为[1,1001],当rknn_batch_size设为4时,input的维度变为[4,224,224,3],output维度变为[4,1001]。注意事项:1.rknn_batch_size的调整并不会提高一般模型在NPU上的执行性能,但却会显著增加内存消耗以及增加单帧的延迟。2.rknn_batch_size的调整可以降低超小模型在CPU上的消耗,提高超小模型的平均帧率。(适用于模型太小,CPU的开销大于NPU的开销)。3.rknn_batch_size的值建议小于32,避免内存占用太大而导致推理失败。4.rknn_batch_size修改后,模型的input/output维度会被修改,使用inference推理模型时需要设置相应的input的大小,后处理时,

也需要对返回的outputs进行处理。返回值:0表示构建成功,-1表示构建失败转换模型05ret=rknn.export_rknn('./rknn/models/best.rknn')6导出RKNN模型调用export_rknn接口,将RKNN模型保存到指定文件中(.rknn后缀)。主要参数说明:export_path:导出模型文件的路径。返回值:0表示导出成功,-1表示导出失败1转换模型2运行RKNN模型3预编译rknn模型05运行RKNN模型05运行RKNN模型时,用户不需要设置模型预处理参数,也不需要构建RKNN模型,其使用流程如下图所示:注意事项:1、

以上步骤请按顺序执行。2、

红色框标注的模型推理、性能评估和内存评估的步骤先后顺序不固定,根据实际使用情况决定。3、

调用eval_memory接口获取内存使用情况时,模型必须运行在硬件平台上。运行RKNN模型05rknn=RKNN(verbose=True)1创建RKNN对象创建RKNN对象,以初始化RKNNSDK环境运行RKNN模型05ret=rknn.load_rknn(path,load_model_in_npu=False)2加载RKNN模型调用load_rknn接口,加载RKNN模型,参数load_model_in_npu通常默认就行主要的参数说明:path:RKNN模型文件路径。load_model_in_npu:是否直接加载npu中的rknn模型。其中path为rknn模型在npu中的路径。只有当RKNN-Toolkit运行在运行在RK3399ProLinux开发板或连有开发板或连有NPU设备设备的的PC上时才可以设为上时才可以设为True。默认值为False。返回值:0表示加载成功,-1表示加载失败ret=rknn.load_rknn('./quantization/model.rknn’)print(ret)运行RKNN模型05ret=rknn.init_runtime(target=None,device_id=None,perf_debug=False,eval_mem=False,async_mode=False)3初始化运行时环境调用init_runtime接口,初始化运行时环境。在模型推理或性能评估之前,必须先初始化运行时环境,明确模型在的运行平台(具体的目标硬件平台或软件模拟器),以及性能评估时是否启用debug模式,以获取更详细的性能信息等。返回值:0表示初始化运行时环境成功,-1表示初始化运行时环境失败。ret=rknn.init_runtime()

print(ret)运行RKNN模型054模型推理,性能评估,获取内存使用情况模型推理,模型性能评估,获取模型的内存使用情况,这三个并没有哪个先后,都可以执行。比较常用到的就是模型推理,因为现实当中,更需要的是模型推理出来的结果,比如目标检测的结果类别是什么,在图片上的位置信息等等运行RKNN模型054模型推理,性能评估,获取内存使用情况对当前模型进行推理,返回推理结果。推理结果只是一个numpy数组列表,这列表还需要我们进一步分析才能等到相对应的现实结果如果RKNN-Toolkit运行在PC上,且初始化运行环境时设置target为RockchipNPU设备

,得到的是模型在硬件平台上的推理结果。如果RKNN-Toolkit运行在PC上,且初始化运行环境时没有设置target,得到的是模型在模拟器上的推理结果。模拟器可以模拟哪款芯片,取决于RKNN模型target参数值。如果RKNN-Toolkit运行在RK3399ProLinux开发板上,得到的是模型在实际硬件上的推理结果。模型推理运行RKNN模型054模型推理,性能评估,获取内存使用情况模型推理results=rknn.inference(inputs=[img])主要的参数说明:inputs:待推理的输入,比如,经过cv2处理的图片。格式是ndarraylist。data_type:输入数据的类型,可填以下值

:float32,float16,int8,uint8,int16。默认值为uint8。data_format:数据模式,可以填以下值:nchw,nhwc。默认值为nhwc。这两个的不同之处在于channel放置的位置。inputs_pass_through:将输入透传给NPU驱动。非透传模式下,在将输入传给NPU驱动之前,工具会对输入进行减均值、除方差等操作;而透传模式下,不会做这些操作。这个参数的值是一个数组,比如要透传input0,不透彻input1,则这个参数的值为[1,0]。默认值为None,即对所有输入都不透传。返回值:results为推理结果,类型是ndarraylist。运行RKNN模型054模型推理,性能评估,获取内存使用情况模型推理importutilsimportmatplotlib.pyplotasplt定义一个函数,用于将tensorflow的tensor类型转换成numpyarray类型importtensorflowastfdeftensor2numpy(data):sess=pat.v1.Session()sess.run(pat.v1.global_variables_initializer())data_numpy=data.eval(session=sess)returndata_numpy定义一个函数,实现读取图片数据并使用RKNN模型进行预测及展示运行RKNN模型054模型推理,性能评估,获取内存使用情况模型性能评估通过评估模型性能,来决定是否采用这个模型。当然,在不同的平台上,评估模型性能的结果也是不一样的。比如:模型运行在PC上初始化运行环境时不指定target,得到的是模型在模拟器上运行的性能数据,包含逐层的运行时间及模型完整运行一次需要的时间。模拟器可以模拟RK1808,也可以模拟RV1126,具体模拟哪款芯片,取决于RKNN模型的target_platform参数值

。模型运行在与PC连接的RockchipNPU上,且初始化运行环境时设置perf_debug为False,则获得的是模型在硬件上运行的总时间;如果设置perf_debug为True,除了返回总时间外,还将返回每一层的耗时情况。模型运行在RK3399ProLinux开发板上时,如果初始化运行环境时设置perf_debug为False,获得的也是模型在硬件上运行的总时间;如果设置perf_debug为True,返回总时间及每一层的耗时情况。运行RKNN模型054模型推理,性能评估,获取内存使用情况模型性能评估调用eval_perf接口,来评估模型性能。主要参数说明:inputs:类型为ndarraylist的输入,在1.3.1之后的版本是非必须的is_print:是否格式化打印结果返回值:返回一个字典类型的评估结果perf_result:性能信息。类型为字典。在硬件平台上运行,且初始运行环境时设置perf_debug为False时,得到的字典只有一个字段’total_time’,示例如下{‘total_time’:1000}运行RKNN模型054模型推理,性能评估,获取内存使用情况模型性能评估其他场景下,得到的性能信息字典多一个’layers’字段,这个字段的值也是一个字典,这个字典以每一层的ID作为key,其值是一个包含’name’(层名)、’operation’(操作符,只有运行在硬件平台上时才有这个字段)、’time’(该层耗时)等信息的字典。举例如下运行RKNN模型05{'total_time',4568,'layers',{'0':{'name':'convolution.relu.pooling.layer2_2','operation':'CONVOLUTION','time',362}'1':{'name':'convolution.relu.pooling.layer2_2','operation':'CONVOLUTION','time',158}}}image_to_predict_lab=utils.get_l_ab_channels("data/test/test.jpg")image_to_predict=tf.expand_dims(image_to_predict_lab[0],0)image_pre=tensor2numpy(image_to_predict)#results=rknn.inference(inputs=image_pre)performance_result=rknn.eval_perf(inputs=image_pre,is_print=True)print(performance_result)rknn.release()运行RKNN模型054模型推理,性能评估,获取内存使用情况获取内存使用情况获取模型在硬件平台运行时的内存使用情况。(模型必须运行在与PC连接的RockchipNPU设备上,或直接运行在RK3399ProLinux开发板上时才可查看内存使用情况)注意:使用该功能时,对应的驱动版本必须要大于等于0.9.4。驱动版本可以通过get_sdk_version接口查询。运行RKNN模型054模型推理,性能评估,获取内存使用情况获取内存使用情况主要参数说明:is_print:是否以规范格式打印内存使用情况。默认值为True。返回值:返回memory_detail内存使用情况。类型为字典。内存使用情况按照下面的格式封装在字典中:

{'system_memory',{

'maximum_allocation':128000000,

'total_allocation':152000000

},

'npu_memory',{

'maximum_allocation':30000000,

'total_allocation':40000000

},

'total_memory',{

'maximum_allocation':158000000,

'total_allocation':192000000

}}运行RKNN模型054模型推理,性能评估,获取内存使用情况获取内存使用情况主要参数说明:system_memory:字段表示系统内存占用。npu_memory:表示NPU内部内存的使用情况。#memory_detail=rknn.eval_memory(is_print=True)

#print(memory_detail)

1转换模型2运行RKNN模型3预编译rknn模型05预编译rknn模型05离线预编译(推荐)构建RKNN模型时,可以指定预编译选项以导出预编译模型,这被称为离线编译。离线预编译在之前有介绍过,就是在转换模型的时候,构建模型的接口上,加参数pre_compile=True注意:在使用预编译的时候,请重启内核,避免缓存干扰

预编译rknn模型05在线预编译(不推荐)同样,RKNNToolkit也提供在线编译的接口:export_rknn_precompile_model。使用该接口,可以将普通RKNN模型转成预编译模型,但这个模型需要有硬件的配合注意:使用该接口前必须先调用load_rknn接口加载普通rknn模型;使用该接口前必须调用init_runtime接口初始化模型运行环境,target必须是RKNPU设备,不能是模拟器;而且要设置参数为True。接口说明:ret=rknn.export_rknn_precompile_model()export_path:导出模型路径。必填参数。返回值:0是成功,-1是失败

部署到AI边缘开发板204知识储备TensorFlow模型转rknn模型1部署到AI边缘开发板05为了提高模型的加载速度,建议采用预编译后的模型(非预编译模型也可以),部署到开发板当中。部署到AI边缘开发板05部署步骤如下:(1)将模型(比如:model.rknn),预测脚本(rknn_demo.py),以及要测试的图片下载到本地;(2

温馨提示

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

最新文档

评论

0/150

提交评论