《边缘智能计算应用》课件 项目三 基于TensorFlow的图像上色模型部署_第1页
《边缘智能计算应用》课件 项目三 基于TensorFlow的图像上色模型部署_第2页
《边缘智能计算应用》课件 项目三 基于TensorFlow的图像上色模型部署_第3页
《边缘智能计算应用》课件 项目三 基于TensorFlow的图像上色模型部署_第4页
《边缘智能计算应用》课件 项目三 基于TensorFlow的图像上色模型部署_第5页
已阅读5页,还剩122页未读 继续免费阅读

下载本文档

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

文档简介

项目三基于TensorFlow的图像上色模型部署边缘智能计算应用项目引导案例TensorFlow是Google开源的第二代用于数字计算(numericalcomputation)的软件库。它是基于数据流图的处理框架,图中的节点表示数学运算(mathematicaloperations),边表示运算节点之间的数据交互。TensorFlow从字面意义上来讲有两层含义,一个是Tensor,它代表的是节点之间传递的数据,通常这个数据是一个多维度矩阵(multidimensionaldataarrays)或者一维向量;第二层意思Flow,指的是数据流,形象理解就是数据按照流的形式进入数据运算图的各个节点。项目引导案例本项目将带着大家体验基于TensorFlow的图像上色模型部署,主要任务有:基于TensorFlow的图像彩色化TensorFlow模型转RKNN模型并进行预测项目中所涉及的操作过程主要如下图所示:基于TensorFlow的图像彩色化TensorFlow模型转RKNN模型并进行预测任务一

基于TensorFlow的图像彩色化边缘智能计算应用职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一基于TensorFlow的图像彩色化了解TensorFlow的相关知识;了解图像彩色化应用及意义;了解RGB与LAB颜色空间。掌握使用TensorFlow进行搭建神经网络;掌握模型训练过程;掌握数据可视化方法。职业能力目标01知识目标技能目标职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一基于TensorFlow的图像彩色化

此任务的主要内容是了解图像彩色化的相关知识,通过TensorFlow构建,训练模型,并使用模型对黑白图像进行彩色化。任务描述任务要求完成数据集的加载;完成模型的定义;完成模型训练;完成模型测试。任务描述与要求02职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一基于TensorFlow的图像彩色化任务分析如何使TensorFlow进行模型的搭建?什么是RGB?什么又是LAB?两者有何区别?任务分析与计划03任务计划表项目名称基于TensorFlow的图像上色模型部署任务名称基于TensorFlow的图像彩色化计划方式自主设计计划要求请用8个计划步骤来完整描述出如何完成本次任务序号任务计划1

2

3

45678通过上面的思考,你是否对本任务要完成的工作有所了解?让我们一起来制订完成本次任务的实施计划吧!任务分析与计划03职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一基于TensorFlow的图像彩色化图像彩色化应用及意义204知识储备TensorFlow简介1RGB与LAB颜色空间3TensorFlow是一个基于数据流编程(dataflowprogramming)的符号数学系统,被广泛应用于各类机器学习(machinelearning)算法的编程实现,其前身是谷歌的神经网络算法库DistBelief04TensorFlow简介为什么选择TensorFlow?04TensorFlow简介1.轻松地构建模型在EagerExecution中使用Keras等直观的高阶API轻松地构建和训练机器学习模型,EagerExecution使我们能够快速迭代模型并轻松地调试模型为什么选择TensorFlow?04TensorFlow简介2.随时随地进行可靠的机器学习生产无论您使用哪种语言,都可以在云端、本地、浏览器中或设备上轻松地训练和部署模型。为什么选择TensorFlow?04TensorFlow简介3.强大的研究实验一个简单而灵活的架构,可以更快地将新想法从概念转化为代码,然后创建出先进的模型,并最终对外发布。图像彩色化应用及意义204知识储备TensorFlow简介1RGB与LAB颜色空间3图像彩色化应用及意义04

图像彩色化技术广阔的应用前景使其成为数字图像处理领域的重要研究内容。近十年伴随着数码技术和信息技术的进步,图像彩色化一度成为使用图像处理软件的用户相当感兴趣的话题,这可以由万维网上各种各样的彩色化教程得到证实。其次,其研究成果对彩色图像合成、图像颜色处理、图像处理等相关领域的研究具有重要的参考价值和研究意义图像彩色化应用及意义04以下是近年来图像彩色化技术在各学科方面的典型应用:遥感图像黑白照片和黑白电影的着色医疗影像黑白动画片和漫画着色电影特技制作和处理夜视图像处理古建筑及古文物的保护和修复图像彩色化应用及意义204知识储备TensorFlow简介1RGB与LAB颜色空间31RGB颜色空间2LAB颜色空间04RGB颜色空间04RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是运用最广的颜色系统之一。根据人眼睛的结构,所有的颜色都可以看成三个基本颜色-红色(red)、绿色(green)和蓝色(blue)的不同组合,大部分显示器都采用这种颜色模型。RGB颜色空间04我们现在使用的电脑或是电视机的屏幕,其实都是红色(R)、绿色(G)、蓝色(B)这三种颜色的按照不同的比例混合而成的。一组红色、绿色、蓝色就是一个最小的显示单位。屏幕上的任何一个颜色都可以由一组RGB值来记录和表达。在右面所看到的最上面的图片实际上是由下方的三个部分组成的。RGB颜色空间04红色、绿色、蓝色我们把它们称为“三原色光”,英文就是R(red),G(green),B(blue)。用过ps的同学应该会很熟悉,就是我们新建文档时候的颜色模式。你可以把他们想象成菜谱中的3种调料,在现实中,三者的比例不同,出来的菜肴会是迥异的。因此,在不同的图像中,RGB成分也是不一样的,可能有的图中R(红色)成分多些,有的B(蓝色)成分多一些。RGB颜色空间04做菜的时候,菜谱上会提示类似“糖3克、盐1克”等,来表示调料的多少,在电脑中,RGB的所谓“多少”就是指亮度,并使用整数来表示。通常情况下,RGB各有256级亮度,用数字表示为从0、1、2...直到255。注意虽然数字最高是255,但0也是数值之一,因此共256级。如同2000年到2010年共是11年一样。按照计算,256级的RGB色彩总共能组合出约1678万种色彩,即256×256×256=16777216。通常也被简称为1600万色或千万色。也称为24位色(2的24次方)。1RGB颜色空间2LAB颜色空间04LAB颜色空间04同RGB颜色空间相比,Lab是一种不常用的色彩空间。它是在1931年国际照明委员会(CIE)制定的颜色度量国际标准的基础上建立起来的。1976年,经修改后被正式命名为CIELab。Lab颜色模型弥补了RGB和CMYK两种色彩模式的不足。它是一种设备无关的颜色模型,也是一种基于生理特征的颜色模型。

Lab颜色模型由三个要素组成,一个要素是亮度(L),a和b是两个颜色通道。a包括的颜色是从深绿色(低亮度值)到灰色(中亮度值)再到亮粉红色(高亮度值);b是从亮蓝色(低亮度值)到灰色(中亮度值)再到黄色(高亮度值)。因此,这种颜色混合后将产生具有明亮效果的色彩。Lab相较于RGB与CMYK等颜色空间更符合人类视觉,也更容易调整:想要调节亮度(不考虑Helmholtz–Kohlrauscheffect,见下注)就调节L通道,想要调节只色彩平衡就分别调a和b。LAB颜色空间04Lab颜色空间中的L分量用于表示像素的亮度,取值范围是[0,100],表示从纯黑到纯白;a表示从红色到绿色的范围,取值范围是[127,-128];b表示从黄色到蓝色的范围,取值范围是[127,-128]。-

L越大,亮度越高。L*为0时代表黑色,为100时代表白色。

-

a和b为0时都代表灰色。

-

a从负数变到正数,对应颜色从绿色变到红色。

-

b从负数变到正数,对应颜色从蓝色变到黄色。Lab有个很好的特性——设备无关(device-independent)。也就是说,在给定了颜色空间白点(whitepoint)(下图中表示了一种颜色空间的白点)之后,这个颜色空间就能明确地确定各个颜色是如何被创建和显示的,与使用的显示介质没有关系。职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一基于TensorFlow的图像彩色化42加载数据集1导入一些必要的包和模块3定义模型

模型训练5模型测试任务实施05基于TensorFlow的图像彩色化导入一些必要的包和模块05• os:对文件以及文件夹或者其他的进行一系列的操作。• pathlib:面向对象的文件系统路径库• numpy:Python语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。• matplotlib:Python的一个绘图库,是Python中最常用的可视化工具之一,可以非常方便地创建2D图表和一些基本的3D图表。• tensorflow:一个基于数据流编程的符号数学系统,被广泛应用于各类机器学习算法的编程实现,其前身是谷歌的神经网络算法库DistBelief。• Conv2D,Conv2DTranspose,BatchNormalization,UpSampling2D,Dense,Reshape,Input,Flatten:导入一些必要的包和模块05a. 常用层• Dense:全连接层本质就是由一个特征空间线性变换到另一个特征空间。因此,dense层的目的是将前面提取的特征,在dense经过非线性变化,提取这些特征之间的关联,最后映射到输出空间上。简单来说全连接就是把以前的局部特征重新通过权值矩阵组装成完整的图。• BatchNormalization:批量标准化层,用于将数据标准化,可加快训练过程并提高性能,解决梯度消失的问题,规范权重,优化网络梯度流等等。• UpSampling2D:对卷积结果进行上采样从而将特征图放大。• Reshape:将一定维度的多维矩阵重新排列构造一个新的保持同样元素数量但是不同维度尺寸的矩阵。• Input:用于构建网络的第一层-输入层,该层会告诉网络我们的输入的尺寸是什么.• Flatten:Flatten层用来将输入“压平”,即把多维的输入一维化,常用在从卷积层到全连接层的过渡。导入一些必要的包和模块05b. 卷积层• Conv2D:二维卷积层,提取局部特征。• Conv2DTranspose:二维卷积层的逆运算。卷积有一维卷积、二维卷积、三维卷积。一般情况下,卷积核在几个维度上滑动,就是几维卷积。本次是二维卷积。导入一些必要的包和模块05!pipinstallmatplotlibtensorflow==2.1h5py==2.8.0-i/simple/#Preprocessingimportosimportpathlibimportnumpyasnp#Visualizationimportmatplotlib.pyplotasplt#DeepLearningimporttensorflowastffromtensorflow.keras.layersimportConv2D,Conv2DTranspose,BatchNormalization,UpSampling2D,Dense,\Reshape,Input,Flattenimportutils加载数据集05图像数据已经准备好,存放在data/train/images文件夹内,我们需要读取这个文件夹下所有的jpg图片当作数据集加载数据集051定义数据集路径#定义模型输入图片的大小img_height,img_width=128,128dataset_path="data/train/images"dataset_path=pathlib.Path(dataset_path)pathlib.Path:一个PurePath的子类,此类以当前系统的路径风格表示路径Path.glob(pattern):解析相对于此路径的通配符pattern,产生所有匹配的文件统计数据集的jpg图片数量加载数据集051定义数据集路径list_ds=tf.data.Dataset.list_files(str(dataset_path/'*.jpg'),shuffle=False)shuffle(buffer_size,seed=None,reshuffle_each_iteration=None):将数据集进行随机洗牌 参数说明:– buffer_size:表示新数据集将从此数据集中采样的元素数。– seed:表示将用于创建数据集的随机种子。– reshuffle_each_iteration:表示每次迭代数据集时是否都随机地重新洗牌。list_files:获取数据集路径下所有jpg图片名称,该方法的默认行为是以不确定的随机无序顺序返回文件名。传递种子或shuffle=False以确定顺序获得结果加载数据集052创建训练集和验证集在读取数据集后,要将数据分割成两部分:训练集和验证集。这样就可以使用训练集的数据来训练模型,然后用验证集上的误差作为最终模型在应对现实场景中的泛化误差。加载数据集052创建训练集和验证集有了验证集,当要验证模型的最终效果时,只需将训练好的模型在验证集上计算误差,即可认为此误差即为泛化误差的近似值,可以通过比较训练好的模型在验证集上的误差大小来评估模型的泛化能力。skip:创建一个从list_ds数据集中跳过val_size元素的数据集。take:创建一个从list_ds数据集中选取最多包含val_size个元素的数据集。加载数据集053显示数据集从训练集中选取一个batch_size的图片进行显示forimage_batch,label_batchintrain_ds.take(1):foriinrange(batch_size):ax=plt.subplot(4,4,i+1)plt.imshow(image_batch[i][:,:,0].numpy(),cmap='gray')plt.title(i)plt.axis("off")加载数据集054数据预处理在训练模型之前,数据集必须先进行预处理。图像通常都是使用RGB颜色空间表示。然而,根据研究表明,使用LAB颜色空间可以获得更好的结果。因此需要将读取的数据从RGB颜色空间转换到LAB颜色空间,然后提取L通道数据用于预测将数据集中的每张图片都分离L通道和AB通道加载数据集054数据预处理get_l_ab_channels(img_path,height=img_height,width=img_width):封装的一个函数,实现读取一张图片,将图像变换为模型所需的大小,返回LAB颜色空间的L通道和AB通道图像数据。 参数说明:– img_path:读取的图像路径。– height:图像变换后的高。– width:图像变换后的宽。加载数据集054数据预处理map:此转换将utils.get_l_ab_channels应用于此数据集的每个元素,并返回一个包含已转换元素的新数据集,其顺序与它们在输入中出现的顺序相同。tf.data.experimental.AUTOTUNE:根据可用的CPU动态设置并行调用的数量#Set`num_parallel_calls`somultipleimagesareloaded/processedinparallel.AUTOTUNE=tf.data.experimental.AUTOTUNEtrain_ds=train_ds.map(utils.get_l_ab_channels,num_parallel_calls=AUTOTUNE)val_ds=val_ds.map(utils.get_l_ab_channels,num_parallel_calls=AUTOTUNE)加载数据集054数据预处理batch_size=16defconfigure_for_performance(ds,cache_dir):ds=ds.cache(cache_dir)ds=ds.shuffle(buffer_size=image_count)ds=ds.batch(batch_size)ds=ds.prefetch(buffer_size=AUTOTUNE)returndstrain_ds=configure_for_performance(train_ds,'./data/cache/train_ds')val_ds=configure_for_performance(val_ds,'./data/cache/val_ds')配置一些数据集的参数以加快训练速度cache:缓存此数据集中元素的目录的名称。shuffle:随机洗牌数据集。batch:数据集批处理大小。prefetch:创建从该数据集中预取元素的数据集。定义模型05参数说明:– 当使用该层作为模型第一层时,需要提供input_shape参数。在keras中,数据是以张量的形式表示的,张量的形状称之为shape,表示从最外层向量逐步到达最底层向量的降维解包过程。– filters:整数,卷积输出滤波器的数量。– kernel_size:指定卷积窗口的高度和宽度。– padding:有valid或same。(注:卷积会导致输出图像越来越小,图像边界信息丢失,若想保持卷积后的图像大小不变,需要设置padding参数为same)– activation:如relu、sigmoid等。使用激活函数。如果不特别指定,将不会使用任何的激活函数。– strides:卷积核步长– dilation_rate:空洞卷积的kernel间隔数量使用Sequential()方法可以自定义网络结构,通过使用.add()添加自定义网络层。Conv2D(filters,kernel_size,strides,dilation_rate,padding='valid',activation=None):二维卷积层,提取局部特征定义模型05参数说明:参数与Conv2D一样。参数说明:– size:int或者tuple,行与列的采样数,一个int表示两个值都相同。– data_format:数据格式。str,默认"channels_last",还有"channels_first",表示输入图片格式的通道是在前还是在后。– interpolation:差值方式,str,"nearest"最近采样方式或者"bilinear"双直线采样方式,默认"nearest"BatchNormalization():数据批标准化。Conv2DTranspose(filters,kernel_size,strides,dilation_rate,padding='valid',activation=None):二维逆卷积层,用于增大图像的尺寸UpSampling2D(size=(2,2),data_format=None,interpolation='nearest'):对图片数据在高与宽的方向进行数据插值倍增模型训练051设置模型保存定义checkpoint保存路径,如果路径不存在则创建定义checkpoint保存的格式outputFolder='models/checkpoints'ifnotos.path.exists(outputFolder):os.makedirs(outputFolder)filepath=outputFolder+"/model-mse-nosotfmax-{val_accuracy:.3f}.hdf5模型训练051设置模型保存tf.keras.callbacks.ModelCheckpoint(filepath,monitor='val_loss',verbose=0,save_best_only=False,save_weights_only=False,save_frequency=1,**kwargs)在每个训练期(epoch)后保存模型.定义保存checkpoint的回调函数 参数说明:– filepath:模型保存的位置,可以只指定到文件夹,也可以指定到具体的文件名。– monitor:需要监视的值,通常为:val_accuracy或val_loss或accuracy或loss。– verbose:信息展示模式,0或1。为1表示输出epoch模型保存信息,默认为0表示不输出该信息。– save_best_only:设为True或False,为True就是保存在验证集上性能最好的模型。– save_weights_only:如果为True,则只有模型的权重保存,否则保存完整模型。– save_frequency:检查点之间的间隔模型训练052编译模型在训练模型之前,需要定义损失函数和优化器等• 损失函数就是用来表现预测与实际数据的差距程度,衡量模型模型预测的好坏• 优化器就是在反向传播过程中,指引损失函数的各个参数往正确的方向更新合适的大小,使得更新后的各个参数让损失函数值不断逼近全局最小。• 评测标准是用于评估模型在训练和验证时的性能的指标• pile(optimizer,loss,metrics):用于在配置训练方法时,告知训练时用的优化器、损失函数和准确率评测标准。模型训练052编译模型参数说明:– optimizer:优化器– loss:损失函数;多分类损失函数有:二分类交叉熵损失函数binary_crossentropy、多类别交叉熵损失函数categorical_crossentropy– metrics:评价指标;提供了六种准确率accuracy、二分类准确率binary_accuracy、分类准确率categorical_accuracy、稀疏分类准确率sparse_categorical_accuracy、多分类TopK准确率top_k_categorical_accuracy和稀疏多分类TopK准确率parse_top_k_categorical_accuracy模型训练053加载预训练模型权重参数load_weights(filepath):加载模型权重参数。参数说明:– filepath:模型权重参数文件路径model_weights_path="models/cnn_model_last.h5"train_model.load_weights(model_weights_path)模型训练054模型训练model.fit(x=None,y=None,epochs=1,initial_epoch=0,callbacks=None,validation_data=None)以给定数量的轮次(数据集上的迭代)训练模型.参数说明:x:训练数据。y:训练数据的标签。epochs:训练模型最终轮次。一个轮次是在整个x和y上的一轮迭代。initial_epoch:开始训练的轮次。callbacks:训练时使用的回调函数。validation_data:用来评估损失,以及在每轮结束时的任何模型度量指标。模型将不会在这个数据上进行训练。模型训练055训练结果可视化绘制模型精度变化图plt.plot(x,y):绘制折线图 参数说明:– x:X轴数据,列表或数组,可选– y:Y轴数据,列表或数组在模型训练完成后,会保存模型训练过程中每个epoch的精度和损失值。模型训练055训练结果可视化绘制模型损失变化图plt.plot(model_info.history['loss'])plt.plot(model_info.history['val_loss'])plt.title('modelloss')plt.ylabel('loss')plt.xlabel('epoch')plt.legend(['train','test'],loc='upperleft')plt.show()6模型保存train_model.save("models/model.h5")模型训练057模型验证使用验证集验证模型,查看图像彩色化效果参数说明:– a1,a2,...:待拼接的序列数据,所有序列的shape必须一致。– axis:序列将沿其连接的轴,默认为0。– out:拼接后的数据。• lab_to_rgb(lab):封装的一个函数,实现将图像数据从LAB转换到RGB颜色空间。 参数说明:– lab:LAB颜色空间的图像数据。numpy.concatenate((a1,a2,...),axis=0,out=None):沿着axis轴拼接序列模型测试05定义一个函数,实现输入一个图像,对图像进行彩色化并显示结果职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一基于TensorFlow的图像彩色化任务检查与评价06序号评价内容评价标准分值得分1知识运用(20%)掌握相关理论知识,理解本次任务要求,制定详细计划,计划条理清晰,逻辑正确(20分)20分

理解相关理论知识,能根据本次任务要求、制定合理计划(15分)了解相关理论知识,有制定计划(10分)无制定计划(0分)2专业技能(40%)很好的完成数据集的加载,模型的定义,模型训练和模型测试。(40分)40分

大体完成数据集的加载,模型的定义,模型训练和模型测试。(30分)只完成数据集的加载,模型的定义。(20分)只完成数据集的加载。(10分)没有完成目标检测算法接口的定义和使用。(0分)3核心素养(20%)具有良好的自主学习能力、分析解决问题的能力、整个任务过程中有指导他人(20分)20分

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

设备无损坏、无干扰课堂秩序(15分)无干扰课堂秩序(10分)干扰课堂秩序(0分)总得分1、请参照评价标准完成自评和对其他小组的互评。2、各组请代表分析本组任务实施经验。职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一基于TensorFlow的图像彩色化任务小结07职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一基于TensorFlow的图像彩色化任务拓展08尝试将一段黑白影像彩色化1构建TensorFlow模型根据上述内容完成拓展。解题

思路提示任务要求2完整叙述出操作流程谢谢大家学习项目三基于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:是否以规范格式打印内存使用情况。默认值为Tr

温馨提示

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

评论

0/150

提交评论