版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
項(xiàng)目三基于TensorFlow的圖像上色模型部署邊緣智能計(jì)算應(yīng)用項(xiàng)目引導(dǎo)案例TensorFlow是Google開(kāi)源的第二代用于數(shù)字計(jì)算(numericalcomputation)的軟件庫(kù)。它是基于數(shù)據(jù)流圖的處理框架,圖中的節(jié)點(diǎn)表示數(shù)學(xué)運(yùn)算(mathematicaloperations),邊表示運(yùn)算節(jié)點(diǎn)之間的數(shù)據(jù)交互。TensorFlow從字面意義上來(lái)講有兩層含義,一個(gè)是Tensor,它代表的是節(jié)點(diǎn)之間傳遞的數(shù)據(jù),通常這個(gè)數(shù)據(jù)是一個(gè)多維度矩陣(multidimensionaldataarrays)或者一維向量;第二層意思Flow,指的是數(shù)據(jù)流,形象理解就是數(shù)據(jù)按照流的形式進(jìn)入數(shù)據(jù)運(yùn)算圖的各個(gè)節(jié)點(diǎn)。項(xiàng)目引導(dǎo)案例本項(xiàng)目將帶著大家體驗(yàn)基于TensorFlow的圖像上色模型部署,主要任務(wù)有:基于TensorFlow的圖像彩色化TensorFlow模型轉(zhuǎn)RKNN模型并進(jìn)行預(yù)測(cè)項(xiàng)目中所涉及的操作過(guò)程主要如下圖所示:基于TensorFlow的圖像彩色化TensorFlow模型轉(zhuǎn)RKNN模型并進(jìn)行預(yù)測(cè)任務(wù)一
基于TensorFlow的圖像彩色化邊緣智能計(jì)算應(yīng)用職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)一基于TensorFlow的圖像彩色化了解TensorFlow的相關(guān)知識(shí);了解圖像彩色化應(yīng)用及意義;了解RGB與LAB顏色空間。掌握使用TensorFlow進(jìn)行搭建神經(jīng)網(wǎng)絡(luò);掌握模型訓(xùn)練過(guò)程;掌握數(shù)據(jù)可視化方法。職業(yè)能力目標(biāo)01知識(shí)目標(biāo)技能目標(biāo)職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)一基于TensorFlow的圖像彩色化
此任務(wù)的主要內(nèi)容是了解圖像彩色化的相關(guān)知識(shí),通過(guò)TensorFlow構(gòu)建,訓(xùn)練模型,并使用模型對(duì)黑白圖像進(jìn)行彩色化。任務(wù)描述任務(wù)要求完成數(shù)據(jù)集的加載;完成模型的定義;完成模型訓(xùn)練;完成模型測(cè)試。任務(wù)描述與要求02職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)一基于TensorFlow的圖像彩色化任務(wù)分析如何使TensorFlow進(jìn)行模型的搭建?什么是RGB?什么又是LAB??jī)烧哂泻螀^(qū)別?任務(wù)分析與計(jì)劃03任務(wù)計(jì)劃表項(xiàng)目名稱(chēng)基于TensorFlow的圖像上色模型部署任務(wù)名稱(chēng)基于TensorFlow的圖像彩色化計(jì)劃方式自主設(shè)計(jì)計(jì)劃要求請(qǐng)用8個(gè)計(jì)劃步驟來(lái)完整描述出如何完成本次任務(wù)序號(hào)任務(wù)計(jì)劃1
2
3
45678通過(guò)上面的思考,你是否對(duì)本任務(wù)要完成的工作有所了解?讓我們一起來(lái)制訂完成本次任務(wù)的實(shí)施計(jì)劃吧!任務(wù)分析與計(jì)劃03職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)一基于TensorFlow的圖像彩色化圖像彩色化應(yīng)用及意義204知識(shí)儲(chǔ)備TensorFlow簡(jiǎn)介1RGB與LAB顏色空間3TensorFlow是一個(gè)基于數(shù)據(jù)流編程(dataflowprogramming)的符號(hào)數(shù)學(xué)系統(tǒng),被廣泛應(yīng)用于各類(lèi)機(jī)器學(xué)習(xí)(machinelearning)算法的編程實(shí)現(xiàn),其前身是谷歌的神經(jīng)網(wǎng)絡(luò)算法庫(kù)DistBelief04TensorFlow簡(jiǎn)介為什么選擇TensorFlow?04TensorFlow簡(jiǎn)介1.輕松地構(gòu)建模型在EagerExecution中使用Keras等直觀的高階API輕松地構(gòu)建和訓(xùn)練機(jī)器學(xué)習(xí)模型,EagerExecution使我們能夠快速迭代模型并輕松地調(diào)試模型為什么選擇TensorFlow?04TensorFlow簡(jiǎn)介2.隨時(shí)隨地進(jìn)行可靠的機(jī)器學(xué)習(xí)生產(chǎn)無(wú)論您使用哪種語(yǔ)言,都可以在云端、本地、瀏覽器中或設(shè)備上輕松地訓(xùn)練和部署模型。為什么選擇TensorFlow?04TensorFlow簡(jiǎn)介3.強(qiáng)大的研究實(shí)驗(yàn)一個(gè)簡(jiǎn)單而靈活的架構(gòu),可以更快地將新想法從概念轉(zhuǎn)化為代碼,然后創(chuàng)建出先進(jìn)的模型,并最終對(duì)外發(fā)布。圖像彩色化應(yīng)用及意義204知識(shí)儲(chǔ)備TensorFlow簡(jiǎn)介1RGB與LAB顏色空間3圖像彩色化應(yīng)用及意義04
圖像彩色化技術(shù)廣闊的應(yīng)用前景使其成為數(shù)字圖像處理領(lǐng)域的重要研究?jī)?nèi)容。近十年伴隨著數(shù)碼技術(shù)和信息技術(shù)的進(jìn)步,圖像彩色化一度成為使用圖像處理軟件的用戶(hù)相當(dāng)感興趣的話題,這可以由萬(wàn)維網(wǎng)上各種各樣的彩色化教程得到證實(shí)。其次,其研究成果對(duì)彩色圖像合成、圖像顏色處理、圖像處理等相關(guān)領(lǐng)域的研究具有重要的參考價(jià)值和研究意義圖像彩色化應(yīng)用及意義04以下是近年來(lái)圖像彩色化技術(shù)在各學(xué)科方面的典型應(yīng)用:遙感圖像黑白照片和黑白電影的著色醫(yī)療影像黑白動(dòng)畫(huà)片和漫畫(huà)著色電影特技制作和處理夜視圖像處理古建筑及古文物的保護(hù)和修復(fù)圖像彩色化應(yīng)用及意義204知識(shí)儲(chǔ)備TensorFlow簡(jiǎn)介1RGB與LAB顏色空間31RGB顏色空間2LAB顏色空間04RGB顏色空間04RGB色彩模式是工業(yè)界的一種顏色標(biāo)準(zhǔn),是通過(guò)對(duì)紅(R)、綠(G)、藍(lán)(B)三個(gè)顏色通道的變化以及它們相互之間的疊加來(lái)得到各式各樣的顏色的,RGB即是代表紅、綠、藍(lán)三個(gè)通道的顏色,這個(gè)標(biāo)準(zhǔn)幾乎包括了人類(lèi)視力所能感知的所有顏色,是運(yùn)用最廣的顏色系統(tǒng)之一。根據(jù)人眼睛的結(jié)構(gòu),所有的顏色都可以看成三個(gè)基本顏色-紅色(red)、綠色(green)和藍(lán)色(blue)的不同組合,大部分顯示器都采用這種顏色模型。RGB顏色空間04我們現(xiàn)在使用的電腦或是電視機(jī)的屏幕,其實(shí)都是紅色(R)、綠色(G)、藍(lán)色(B)這三種顏色的按照不同的比例混合而成的。一組紅色、綠色、藍(lán)色就是一個(gè)最小的顯示單位。屏幕上的任何一個(gè)顏色都可以由一組RGB值來(lái)記錄和表達(dá)。在右面所看到的最上面的圖片實(shí)際上是由下方的三個(gè)部分組成的。RGB顏色空間04紅色、綠色、藍(lán)色我們把它們稱(chēng)為“三原色光”,英文就是R(red),G(green),B(blue)。用過(guò)ps的同學(xué)應(yīng)該會(huì)很熟悉,就是我們新建文檔時(shí)候的顏色模式。你可以把他們想象成菜譜中的3種調(diào)料,在現(xiàn)實(shí)中,三者的比例不同,出來(lái)的菜肴會(huì)是迥異的。因此,在不同的圖像中,RGB成分也是不一樣的,可能有的圖中R(紅色)成分多些,有的B(藍(lán)色)成分多一些。RGB顏色空間04做菜的時(shí)候,菜譜上會(huì)提示類(lèi)似“糖3克、鹽1克”等,來(lái)表示調(diào)料的多少,在電腦中,RGB的所謂“多少”就是指亮度,并使用整數(shù)來(lái)表示。通常情況下,RGB各有256級(jí)亮度,用數(shù)字表示為從0、1、2...直到255。注意雖然數(shù)字最高是255,但0也是數(shù)值之一,因此共256級(jí)。如同2000年到2010年共是11年一樣。按照計(jì)算,256級(jí)的RGB色彩總共能組合出約1678萬(wàn)種色彩,即256×256×256=16777216。通常也被簡(jiǎn)稱(chēng)為1600萬(wàn)色或千萬(wàn)色。也稱(chēng)為24位色(2的24次方)。1RGB顏色空間2LAB顏色空間04LAB顏色空間04同RGB顏色空間相比,Lab是一種不常用的色彩空間。它是在1931年國(guó)際照明委員會(huì)(CIE)制定的顏色度量國(guó)際標(biāo)準(zhǔn)的基礎(chǔ)上建立起來(lái)的。1976年,經(jīng)修改后被正式命名為CIELab。Lab顏色模型彌補(bǔ)了RGB和CMYK兩種色彩模式的不足。它是一種設(shè)備無(wú)關(guān)的顏色模型,也是一種基于生理特征的顏色模型。
Lab顏色模型由三個(gè)要素組成,一個(gè)要素是亮度(L),a和b是兩個(gè)顏色通道。a包括的顏色是從深綠色(低亮度值)到灰色(中亮度值)再到亮粉紅色(高亮度值);b是從亮藍(lán)色(低亮度值)到灰色(中亮度值)再到黃色(高亮度值)。因此,這種顏色混合后將產(chǎn)生具有明亮效果的色彩。Lab相較于RGB與CMYK等顏色空間更符合人類(lèi)視覺(jué),也更容易調(diào)整:想要調(diào)節(jié)亮度(不考慮Helmholtz–Kohlrauscheffect,見(jiàn)下注)就調(diào)節(jié)L通道,想要調(diào)節(jié)只色彩平衡就分別調(diào)a和b。LAB顏色空間04Lab顏色空間中的L分量用于表示像素的亮度,取值范圍是[0,100],表示從純黑到純白;a表示從紅色到綠色的范圍,取值范圍是[127,-128];b表示從黃色到藍(lán)色的范圍,取值范圍是[127,-128]。-
L越大,亮度越高。L*為0時(shí)代表黑色,為100時(shí)代表白色。
-
a和b為0時(shí)都代表灰色。
-
a從負(fù)數(shù)變到正數(shù),對(duì)應(yīng)顏色從綠色變到紅色。
-
b從負(fù)數(shù)變到正數(shù),對(duì)應(yīng)顏色從藍(lán)色變到黃色。Lab有個(gè)很好的特性——設(shè)備無(wú)關(guān)(device-independent)。也就是說(shuō),在給定了顏色空間白點(diǎn)(whitepoint)(下圖中表示了一種顏色空間的白點(diǎn))之后,這個(gè)顏色空間就能明確地確定各個(gè)顏色是如何被創(chuàng)建和顯示的,與使用的顯示介質(zhì)沒(méi)有關(guān)系。職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)一基于TensorFlow的圖像彩色化42加載數(shù)據(jù)集1導(dǎo)入一些必要的包和模塊3定義模型
模型訓(xùn)練5模型測(cè)試任務(wù)實(shí)施05基于TensorFlow的圖像彩色化導(dǎo)入一些必要的包和模塊05? os:對(duì)文件以及文件夾或者其他的進(jìn)行一系列的操作。? pathlib:面向?qū)ο蟮奈募到y(tǒng)路徑庫(kù)? numpy:Python語(yǔ)言的一個(gè)擴(kuò)展程序庫(kù),支持大量的維度數(shù)組與矩陣運(yùn)算,此外也針對(duì)數(shù)組運(yùn)算提供大量的數(shù)學(xué)函數(shù)庫(kù)。? matplotlib:Python的一個(gè)繪圖庫(kù),是Python中最常用的可視化工具之一,可以非常方便地創(chuàng)建2D圖表和一些基本的3D圖表。? tensorflow:一個(gè)基于數(shù)據(jù)流編程的符號(hào)數(shù)學(xué)系統(tǒng),被廣泛應(yīng)用于各類(lèi)機(jī)器學(xué)習(xí)算法的編程實(shí)現(xiàn),其前身是谷歌的神經(jīng)網(wǎng)絡(luò)算法庫(kù)DistBelief。? Conv2D,Conv2DTranspose,BatchNormalization,UpSampling2D,Dense,Reshape,Input,Flatten:導(dǎo)入一些必要的包和模塊05a. 常用層? Dense:全連接層本質(zhì)就是由一個(gè)特征空間線性變換到另一個(gè)特征空間。因此,dense層的目的是將前面提取的特征,在dense經(jīng)過(guò)非線性變化,提取這些特征之間的關(guān)聯(lián),最后映射到輸出空間上。簡(jiǎn)單來(lái)說(shuō)全連接就是把以前的局部特征重新通過(guò)權(quán)值矩陣組裝成完整的圖。? BatchNormalization:批量標(biāo)準(zhǔn)化層,用于將數(shù)據(jù)標(biāo)準(zhǔn)化,可加快訓(xùn)練過(guò)程并提高性能,解決梯度消失的問(wèn)題,規(guī)范權(quán)重,優(yōu)化網(wǎng)絡(luò)梯度流等等。? UpSampling2D:對(duì)卷積結(jié)果進(jìn)行上采樣從而將特征圖放大。? Reshape:將一定維度的多維矩陣重新排列構(gòu)造一個(gè)新的保持同樣元素?cái)?shù)量但是不同維度尺寸的矩陣。? Input:用于構(gòu)建網(wǎng)絡(luò)的第一層-輸入層,該層會(huì)告訴網(wǎng)絡(luò)我們的輸入的尺寸是什么.? Flatten:Flatten層用來(lái)將輸入“壓平”,即把多維的輸入一維化,常用在從卷積層到全連接層的過(guò)渡。導(dǎo)入一些必要的包和模塊05b. 卷積層? Conv2D:二維卷積層,提取局部特征。? Conv2DTranspose:二維卷積層的逆運(yùn)算。卷積有一維卷積、二維卷積、三維卷積。一般情況下,卷積核在幾個(gè)維度上滑動(dòng),就是幾維卷積。本次是二維卷積。導(dǎo)入一些必要的包和模塊05!pipinstallmatplotlibtensorflow==2.1h5py==2.8.0-i/simple/#Preprocessingimportosimportpathlibimportnumpyasnp#Visualizationimportmatplotlib.pyplotasplt#DeepLearningimporttensorflowastffromtensorflow.keras.layersimportConv2D,Conv2DTranspose,BatchNormalization,UpSampling2D,Dense,\Reshape,Input,Flattenimportutils加載數(shù)據(jù)集05圖像數(shù)據(jù)已經(jīng)準(zhǔn)備好,存放在data/train/images文件夾內(nèi),我們需要讀取這個(gè)文件夾下所有的jpg圖片當(dāng)作數(shù)據(jù)集加載數(shù)據(jù)集051定義數(shù)據(jù)集路徑#定義模型輸入圖片的大小img_height,img_width=128,128dataset_path="data/train/images"dataset_path=pathlib.Path(dataset_path)pathlib.Path:一個(gè)PurePath的子類(lèi),此類(lèi)以當(dāng)前系統(tǒng)的路徑風(fēng)格表示路徑Path.glob(pattern):解析相對(duì)于此路徑的通配符pattern,產(chǎn)生所有匹配的文件統(tǒng)計(jì)數(shù)據(jù)集的jpg圖片數(shù)量加載數(shù)據(jù)集051定義數(shù)據(jù)集路徑list_ds=tf.data.Dataset.list_files(str(dataset_path/'*.jpg'),shuffle=False)shuffle(buffer_size,seed=None,reshuffle_each_iteration=None):將數(shù)據(jù)集進(jìn)行隨機(jī)洗牌 參數(shù)說(shuō)明:– buffer_size:表示新數(shù)據(jù)集將從此數(shù)據(jù)集中采樣的元素?cái)?shù)。– seed:表示將用于創(chuàng)建數(shù)據(jù)集的隨機(jī)種子。– reshuffle_each_iteration:表示每次迭代數(shù)據(jù)集時(shí)是否都隨機(jī)地重新洗牌。list_files:獲取數(shù)據(jù)集路徑下所有jpg圖片名稱(chēng),該方法的默認(rèn)行為是以不確定的隨機(jī)無(wú)序順序返回文件名。傳遞種子或shuffle=False以確定順序獲得結(jié)果加載數(shù)據(jù)集052創(chuàng)建訓(xùn)練集和驗(yàn)證集在讀取數(shù)據(jù)集后,要將數(shù)據(jù)分割成兩部分:訓(xùn)練集和驗(yàn)證集。這樣就可以使用訓(xùn)練集的數(shù)據(jù)來(lái)訓(xùn)練模型,然后用驗(yàn)證集上的誤差作為最終模型在應(yīng)對(duì)現(xiàn)實(shí)場(chǎng)景中的泛化誤差。加載數(shù)據(jù)集052創(chuàng)建訓(xùn)練集和驗(yàn)證集有了驗(yàn)證集,當(dāng)要驗(yàn)證模型的最終效果時(shí),只需將訓(xùn)練好的模型在驗(yàn)證集上計(jì)算誤差,即可認(rèn)為此誤差即為泛化誤差的近似值,可以通過(guò)比較訓(xùn)練好的模型在驗(yàn)證集上的誤差大小來(lái)評(píng)估模型的泛化能力。skip:創(chuàng)建一個(gè)從list_ds數(shù)據(jù)集中跳過(guò)val_size元素的數(shù)據(jù)集。take:創(chuàng)建一個(gè)從list_ds數(shù)據(jù)集中選取最多包含val_size個(gè)元素的數(shù)據(jù)集。加載數(shù)據(jù)集053顯示數(shù)據(jù)集從訓(xùn)練集中選取一個(gè)batch_size的圖片進(jìn)行顯示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")加載數(shù)據(jù)集054數(shù)據(jù)預(yù)處理在訓(xùn)練模型之前,數(shù)據(jù)集必須先進(jìn)行預(yù)處理。圖像通常都是使用RGB顏色空間表示。然而,根據(jù)研究表明,使用LAB顏色空間可以獲得更好的結(jié)果。因此需要將讀取的數(shù)據(jù)從RGB顏色空間轉(zhuǎn)換到LAB顏色空間,然后提取L通道數(shù)據(jù)用于預(yù)測(cè)將數(shù)據(jù)集中的每張圖片都分離L通道和AB通道加載數(shù)據(jù)集054數(shù)據(jù)預(yù)處理get_l_ab_channels(img_path,height=img_height,width=img_width):封裝的一個(gè)函數(shù),實(shí)現(xiàn)讀取一張圖片,將圖像變換為模型所需的大小,返回LAB顏色空間的L通道和AB通道圖像數(shù)據(jù)。 參數(shù)說(shuō)明:– img_path:讀取的圖像路徑。– height:圖像變換后的高。– width:圖像變換后的寬。加載數(shù)據(jù)集054數(shù)據(jù)預(yù)處理map:此轉(zhuǎn)換將utils.get_l_ab_channels應(yīng)用于此數(shù)據(jù)集的每個(gè)元素,并返回一個(gè)包含已轉(zhuǎn)換元素的新數(shù)據(jù)集,其順序與它們?cè)谳斎胫谐霈F(xiàn)的順序相同。tf.data.experimental.AUTOTUNE:根據(jù)可用的CPU動(dòng)態(tài)設(shè)置并行調(diào)用的數(shù)量#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)加載數(shù)據(jù)集054數(shù)據(jù)預(yù)處理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')配置一些數(shù)據(jù)集的參數(shù)以加快訓(xùn)練速度cache:緩存此數(shù)據(jù)集中元素的目錄的名稱(chēng)。shuffle:隨機(jī)洗牌數(shù)據(jù)集。batch:數(shù)據(jù)集批處理大小。prefetch:創(chuàng)建從該數(shù)據(jù)集中預(yù)取元素的數(shù)據(jù)集。定義模型05參數(shù)說(shuō)明:– 當(dāng)使用該層作為模型第一層時(shí),需要提供input_shape參數(shù)。在keras中,數(shù)據(jù)是以張量的形式表示的,張量的形狀稱(chēng)之為shape,表示從最外層向量逐步到達(dá)最底層向量的降維解包過(guò)程。– filters:整數(shù),卷積輸出濾波器的數(shù)量。– kernel_size:指定卷積窗口的高度和寬度。– padding:有valid或same。(注:卷積會(huì)導(dǎo)致輸出圖像越來(lái)越小,圖像邊界信息丟失,若想保持卷積后的圖像大小不變,需要設(shè)置padding參數(shù)為same)– activation:如relu、sigmoid等。使用激活函數(shù)。如果不特別指定,將不會(huì)使用任何的激活函數(shù)。– strides:卷積核步長(zhǎng)– dilation_rate:空洞卷積的kernel間隔數(shù)量使用Sequential()方法可以自定義網(wǎng)絡(luò)結(jié)構(gòu),通過(guò)使用.add()添加自定義網(wǎng)絡(luò)層。Conv2D(filters,kernel_size,strides,dilation_rate,padding='valid',activation=None):二維卷積層,提取局部特征定義模型05參數(shù)說(shuō)明:參數(shù)與Conv2D一樣。參數(shù)說(shuō)明:– size:int或者tuple,行與列的采樣數(shù),一個(gè)int表示兩個(gè)值都相同。– data_format:數(shù)據(jù)格式。str,默認(rèn)"channels_last",還有"channels_first",表示輸入圖片格式的通道是在前還是在后。– interpolation:差值方式,str,"nearest"最近采樣方式或者"bilinear"雙直線采樣方式,默認(rèn)"nearest"BatchNormalization():數(shù)據(jù)批標(biāo)準(zhǔn)化。Conv2DTranspose(filters,kernel_size,strides,dilation_rate,padding='valid',activation=None):二維逆卷積層,用于增大圖像的尺寸UpSampling2D(size=(2,2),data_format=None,interpolation='nearest'):對(duì)圖片數(shù)據(jù)在高與寬的方向進(jìn)行數(shù)據(jù)插值倍增模型訓(xùn)練051設(shè)置模型保存定義checkpoint保存路徑,如果路徑不存在則創(chuàng)建定義checkpoint保存的格式outputFolder='models/checkpoints'ifnotos.path.exists(outputFolder):os.makedirs(outputFolder)filepath=outputFolder+"/model-mse-nosotfmax-{val_accuracy:.3f}.hdf5模型訓(xùn)練051設(shè)置模型保存tf.keras.callbacks.ModelCheckpoint(filepath,monitor='val_loss',verbose=0,save_best_only=False,save_weights_only=False,save_frequency=1,**kwargs)在每個(gè)訓(xùn)練期(epoch)后保存模型.定義保存checkpoint的回調(diào)函數(shù) 參數(shù)說(shuō)明:– filepath:模型保存的位置,可以只指定到文件夾,也可以指定到具體的文件名。– monitor:需要監(jiān)視的值,通常為:val_accuracy或val_loss或accuracy或loss。– verbose:信息展示模式,0或1。為1表示輸出epoch模型保存信息,默認(rèn)為0表示不輸出該信息。– save_best_only:設(shè)為T(mén)rue或False,為T(mén)rue就是保存在驗(yàn)證集上性能最好的模型。– save_weights_only:如果為T(mén)rue,則只有模型的權(quán)重保存,否則保存完整模型。– save_frequency:檢查點(diǎn)之間的間隔模型訓(xùn)練052編譯模型在訓(xùn)練模型之前,需要定義損失函數(shù)和優(yōu)化器等? 損失函數(shù)就是用來(lái)表現(xiàn)預(yù)測(cè)與實(shí)際數(shù)據(jù)的差距程度,衡量模型模型預(yù)測(cè)的好壞? 優(yōu)化器就是在反向傳播過(guò)程中,指引損失函數(shù)的各個(gè)參數(shù)往正確的方向更新合適的大小,使得更新后的各個(gè)參數(shù)讓損失函數(shù)值不斷逼近全局最小。? 評(píng)測(cè)標(biāo)準(zhǔn)是用于評(píng)估模型在訓(xùn)練和驗(yàn)證時(shí)的性能的指標(biāo)? pile(optimizer,loss,metrics):用于在配置訓(xùn)練方法時(shí),告知訓(xùn)練時(shí)用的優(yōu)化器、損失函數(shù)和準(zhǔn)確率評(píng)測(cè)標(biāo)準(zhǔn)。模型訓(xùn)練052編譯模型參數(shù)說(shuō)明:– optimizer:優(yōu)化器– loss:損失函數(shù);多分類(lèi)損失函數(shù)有:二分類(lèi)交叉熵?fù)p失函數(shù)binary_crossentropy、多類(lèi)別交叉熵?fù)p失函數(shù)categorical_crossentropy– metrics:評(píng)價(jià)指標(biāo);提供了六種準(zhǔn)確率accuracy、二分類(lèi)準(zhǔn)確率binary_accuracy、分類(lèi)準(zhǔn)確率categorical_accuracy、稀疏分類(lèi)準(zhǔn)確率sparse_categorical_accuracy、多分類(lèi)TopK準(zhǔn)確率top_k_categorical_accuracy和稀疏多分類(lèi)TopK準(zhǔn)確率parse_top_k_categorical_accuracy模型訓(xùn)練053加載預(yù)訓(xùn)練模型權(quán)重參數(shù)load_weights(filepath):加載模型權(quán)重參數(shù)。參數(shù)說(shuō)明:– filepath:模型權(quán)重參數(shù)文件路徑model_weights_path="models/cnn_model_last.h5"train_model.load_weights(model_weights_path)模型訓(xùn)練054模型訓(xùn)練model.fit(x=None,y=None,epochs=1,initial_epoch=0,callbacks=None,validation_data=None)以給定數(shù)量的輪次(數(shù)據(jù)集上的迭代)訓(xùn)練模型.參數(shù)說(shuō)明:x:訓(xùn)練數(shù)據(jù)。y:訓(xùn)練數(shù)據(jù)的標(biāo)簽。epochs:訓(xùn)練模型最終輪次。一個(gè)輪次是在整個(gè)x和y上的一輪迭代。initial_epoch:開(kāi)始訓(xùn)練的輪次。callbacks:訓(xùn)練時(shí)使用的回調(diào)函數(shù)。validation_data:用來(lái)評(píng)估損失,以及在每輪結(jié)束時(shí)的任何模型度量指標(biāo)。模型將不會(huì)在這個(gè)數(shù)據(jù)上進(jìn)行訓(xùn)練。模型訓(xùn)練055訓(xùn)練結(jié)果可視化繪制模型精度變化圖plt.plot(x,y):繪制折線圖 參數(shù)說(shuō)明:– x:X軸數(shù)據(jù),列表或數(shù)組,可選– y:Y軸數(shù)據(jù),列表或數(shù)組在模型訓(xùn)練完成后,會(huì)保存模型訓(xùn)練過(guò)程中每個(gè)epoch的精度和損失值。模型訓(xùn)練055訓(xùn)練結(jié)果可視化繪制模型損失變化圖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")模型訓(xùn)練057模型驗(yàn)證使用驗(yàn)證集驗(yàn)證模型,查看圖像彩色化效果參數(shù)說(shuō)明:– a1,a2,...:待拼接的序列數(shù)據(jù),所有序列的shape必須一致。– axis:序列將沿其連接的軸,默認(rèn)為0。– out:拼接后的數(shù)據(jù)。? lab_to_rgb(lab):封裝的一個(gè)函數(shù),實(shí)現(xiàn)將圖像數(shù)據(jù)從LAB轉(zhuǎn)換到RGB顏色空間。 參數(shù)說(shuō)明:– lab:LAB顏色空間的圖像數(shù)據(jù)。numpy.concatenate((a1,a2,...),axis=0,out=None):沿著axis軸拼接序列模型測(cè)試05定義一個(gè)函數(shù),實(shí)現(xiàn)輸入一個(gè)圖像,對(duì)圖像進(jìn)行彩色化并顯示結(jié)果職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)一基于TensorFlow的圖像彩色化任務(wù)檢查與評(píng)價(jià)06序號(hào)評(píng)價(jià)內(nèi)容評(píng)價(jià)標(biāo)準(zhǔn)分值得分1知識(shí)運(yùn)用(20%)掌握相關(guān)理論知識(shí),理解本次任務(wù)要求,制定詳細(xì)計(jì)劃,計(jì)劃條理清晰,邏輯正確(20分)20分
理解相關(guān)理論知識(shí),能根據(jù)本次任務(wù)要求、制定合理計(jì)劃(15分)了解相關(guān)理論知識(shí),有制定計(jì)劃(10分)無(wú)制定計(jì)劃(0分)2專(zhuān)業(yè)技能(40%)很好的完成數(shù)據(jù)集的加載,模型的定義,模型訓(xùn)練和模型測(cè)試。(40分)40分
大體完成數(shù)據(jù)集的加載,模型的定義,模型訓(xùn)練和模型測(cè)試。(30分)只完成數(shù)據(jù)集的加載,模型的定義。(20分)只完成數(shù)據(jù)集的加載。(10分)沒(méi)有完成目標(biāo)檢測(cè)算法接口的定義和使用。(0分)3核心素養(yǎng)(20%)具有良好的自主學(xué)習(xí)能力、分析解決問(wèn)題的能力、整個(gè)任務(wù)過(guò)程中有指導(dǎo)他人(20分)20分
具有較好的學(xué)習(xí)能力和分析解決問(wèn)題的能力,任務(wù)過(guò)程中無(wú)指導(dǎo)他人(15分)能夠主動(dòng)學(xué)習(xí)并收集信息,有請(qǐng)教他人進(jìn)行解決問(wèn)題的能力(10分)不主動(dòng)學(xué)習(xí)(0分)4課堂紀(jì)律(20%)設(shè)備無(wú)損壞、設(shè)備擺放整齊、工位區(qū)域內(nèi)保持整潔、無(wú)干擾課堂秩序(20分)20分
設(shè)備無(wú)損壞、無(wú)干擾課堂秩序(15分)無(wú)干擾課堂秩序(10分)干擾課堂秩序(0分)總得分1、請(qǐng)參照評(píng)價(jià)標(biāo)準(zhǔn)完成自評(píng)和對(duì)其他小組的互評(píng)。2、各組請(qǐng)代表分析本組任務(wù)實(shí)施經(jīng)驗(yàn)。職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)一基于TensorFlow的圖像彩色化任務(wù)小結(jié)07職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)一基于TensorFlow的圖像彩色化任務(wù)拓展08嘗試將一段黑白影像彩色化1構(gòu)建TensorFlow模型根據(jù)上述內(nèi)容完成拓展。解題
思路提示任務(wù)要求2完整敘述出操作流程謝謝大家學(xué)習(xí)項(xiàng)目三基于TensorFlow的圖像上色模型部署邊緣智能計(jì)算應(yīng)用任務(wù)二TensorFlow模型轉(zhuǎn)RKNN模型并進(jìn)行預(yù)測(cè)邊緣智能計(jì)算應(yīng)用職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)二TensorFlow模型轉(zhuǎn)RKNN模型并進(jìn)行預(yù)測(cè)了解TensorFlow和rknn的相關(guān)知識(shí)了解TensorFlow模型轉(zhuǎn)rknn模型的意義掌握如何將TensorFlow模型轉(zhuǎn)成rknn模型掌握如何使用rknn模型進(jìn)行預(yù)測(cè)掌握將rknn模型部署到AI邊緣開(kāi)發(fā)板并進(jìn)行預(yù)測(cè)職業(yè)能力目標(biāo)01知識(shí)目標(biāo)技能目標(biāo)職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)二TensorFlow模型轉(zhuǎn)RKNN模型并進(jìn)行預(yù)測(cè)
此任務(wù)的主要內(nèi)容是了解TensorFlow模型轉(zhuǎn)換成rknn模型流程,通過(guò)代碼將TensorFlow模型轉(zhuǎn)換成rknn模型,并使用rknn模型進(jìn)行預(yù)測(cè)。任務(wù)描述任務(wù)要求完成TensorFlow模型轉(zhuǎn)rknn模型;完成部署到AI邊緣開(kāi)發(fā)板。任務(wù)描述與要求02職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)二TensorFlow模型轉(zhuǎn)RKNN模型并進(jìn)行預(yù)測(cè)任務(wù)分析什么時(shí)rknn模型,為什么要將TensorFlow模型轉(zhuǎn)rknn模型?如何將TensorFlow模型轉(zhuǎn)rknn模型任務(wù)分析與計(jì)劃03任務(wù)計(jì)劃表項(xiàng)目名稱(chēng)基于TensorFlow的圖像上色模型部署任務(wù)名稱(chēng)TensorFlow模型轉(zhuǎn)RKNN模型并進(jìn)行預(yù)測(cè)計(jì)劃方式自主設(shè)計(jì)計(jì)劃要求請(qǐng)用8個(gè)計(jì)劃步驟來(lái)完整描述出如何完成本次任務(wù)序號(hào)任務(wù)計(jì)劃1
2
3
45678通過(guò)上面的思考,你是否對(duì)本任務(wù)要完成的工作有所了解?讓我們一起來(lái)制訂完成本次任務(wù)的實(shí)施計(jì)劃吧!任務(wù)分析與計(jì)劃03職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)二TensorFlow模型轉(zhuǎn)RKNN模型并進(jìn)行預(yù)測(cè)TensorFlow模型轉(zhuǎn)rknn模型的意義204知識(shí)儲(chǔ)備初識(shí)RKNN104初識(shí)RKNNRKNN是Rockchipnpu平臺(tái)使用的模型類(lèi)型,以.rknn后綴結(jié)尾的模型文件。Rockchip提供了完整了模型轉(zhuǎn)換Python工具,方便用戶(hù)將自主研發(fā)的算法模型轉(zhuǎn)換成RKNN模型,同時(shí)Rockchip也提供了C/C++和PythonAPI接口。RKNN-Toolkit04初識(shí)RKNNRKNN-Toolkit是為用戶(hù)提供在PC、RockchipNPU平臺(tái)上進(jìn)行模型轉(zhuǎn)換、推理和性能評(píng)估的開(kāi)發(fā)套件,用戶(hù)通過(guò)該工具提供的Python接口可以便捷地完成以下功能:模型轉(zhuǎn)換,量化功能,模型推理,性能評(píng)估,內(nèi)存評(píng)估,模型預(yù)編譯,模型分段,自定義算子功能,量化精度分析功能,可視化功能,模型優(yōu)化等級(jí)功能,模型加密功能。RKNN-Toolkit04初識(shí)RKNNWindows只提供Python3.6的安裝包。MacOS提供python3.6和python3.7的安裝包。ARM64平臺(tái)(安裝Debian9或10操作系統(tǒng))提供Python3.5(Debain9)和Python3.7(Debian10)的安裝包。因?yàn)镻yTorch/TensorFlow等逐漸停止對(duì)Python3.5的支持,RKNN-Toolkit下一個(gè)大版本將移除Linuxx86平臺(tái)上Python3.5的安裝包,轉(zhuǎn)而提供Python3.6和Python3.7的安裝包。除MacOS平臺(tái)外,其他平臺(tái)的scipy依賴(lài)為>=1.1.0。ARM64平臺(tái)不需要依賴(lài)sklearn和opencv-python。Jinja2只在使用自定義OP時(shí)用到。RKNN-Toolkit04初識(shí)RKNNRKNN-Toolkit是一個(gè)跨平臺(tái)的開(kāi)發(fā)套件,已支持的操作系統(tǒng)如下:(1.7.1版本toolkit)Ubuntu:16.04(x64)及以上Windows:7(x64)及以上MacOS:10.13.5(x64)及以上Debian:9.8(aarch64)及以上RKNN-Toolkit04初識(shí)RKNN模型轉(zhuǎn)換:支持Caffe、TensorFlow、TensorFlowLite、ONNX、Darknet、Pytorch、MXNet模型轉(zhuǎn)成RKNN模型,支持RKNN模型導(dǎo)入導(dǎo)出,后續(xù)能夠在RockchipNPU平臺(tái)上加載使用。從1.2.0版本開(kāi)始支持多輸入模型。從1.3.0版本開(kāi)始支持Pytorch和MXNet。TensorFlow模型轉(zhuǎn)rknn模型的意義204知識(shí)儲(chǔ)備初識(shí)RKNN1TensorFlow模型轉(zhuǎn)rknn模型04將TensorFlow模型轉(zhuǎn)換成rknn目標(biāo)模型的意義在于與AI邊緣計(jì)算終端結(jié)合。TensorFlow模型轉(zhuǎn)rknn模型04將rknn模型部署到終端上,利用AI邊緣終端的高速NPU處理能力來(lái)進(jìn)行推理,進(jìn)而實(shí)現(xiàn)實(shí)際場(chǎng)景化的應(yīng)用。TensorFlow模型轉(zhuǎn)rknn模型04真實(shí)場(chǎng)景中,可以利用高算力設(shè)備,實(shí)現(xiàn)圖像彩色化實(shí)時(shí)運(yùn)行,在醫(yī)療,遙感,航天等各個(gè)領(lǐng)域,可以實(shí)時(shí)觀測(cè)彩色化的圖像,增強(qiáng)其可視化效果,增強(qiáng)信息量。職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)二TensorFlow模型轉(zhuǎn)RKNN模型并進(jìn)行預(yù)測(cè)部署到AI邊緣開(kāi)發(fā)板204知識(shí)儲(chǔ)備TensorFlow模型轉(zhuǎn)rknn模型11轉(zhuǎn)換模型2運(yùn)行RKNN模型3預(yù)編譯rknn模型05轉(zhuǎn)換模型05利用rknn_toolkit講tensorflow模型轉(zhuǎn)換成rknn模型,基本轉(zhuǎn)換流程為:注解:以上步驟請(qǐng)按順序執(zhí)行。藍(lán)色框標(biāo)注的步驟導(dǎo)出的RKNN模型可以通過(guò)load_keras接口導(dǎo)入并使用。紅色框標(biāo)注的模型推理、性能評(píng)估和內(nèi)存評(píng)估的步驟先后順序不固定,根據(jù)實(shí)際使用情況決定。只有當(dāng)目標(biāo)平臺(tái)是開(kāi)發(fā)板時(shí),才可以調(diào)用eval_memory接口獲取內(nèi)存使用情況。轉(zhuǎn)換模型05!python36-mpipinstallnumpymatplotlibtensorflow==2.1.0./packages/rknn_toolkit-1.7.1-cp36-cp36m-linux_x86_64.whl--ignore-installed-i/simple/1環(huán)境配置與安裝安裝環(huán)境importosimportsysimportnumpyasnpfromrknn.apiimportRKNN引入必要的環(huán)境轉(zhuǎn)換模型05rknn=RKNN(verbose=True,verbose_file=None)2創(chuàng)建RKNN對(duì)象初始化rknnSDK環(huán)境verbose
指定是否要在屏幕上打印詳細(xì)日志信息;默認(rèn)False不打印,verbose_file
調(diào)試信息指定轉(zhuǎn)儲(chǔ)到文件路徑,默認(rèn)為None。如果設(shè)置了verbose_file參數(shù),且verbose參數(shù)值為T(mén)rue,日志信息還將寫(xiě)到該參數(shù)指定的文件中轉(zhuǎn)換模型05rknn.config(mean_values=[[0,0,0]],std_values=[[255,255,255]],reorder_channel='012',target_platform='rk3399pro',output_optimize=1)3設(shè)置模型預(yù)處理參數(shù)調(diào)用config接口設(shè)置模型的預(yù)處理參數(shù)轉(zhuǎn)換模型05ret=rknn.load_keras(model,convert_engine='Keras’)ret=rknn.load_keras(model='./models/model.h5')print(ret)4加載原始模型調(diào)用load_keras接口,加載原始的h5模型主要參數(shù)說(shuō)明:model:h5模型文件(.h5后綴)所在的路徑convert_engine:按順序使用指定引擎轉(zhuǎn)換,支持引擎包含[Keras,TFLite],默認(rèn)為Keras。返回值:0表示導(dǎo)入成功,-1表示導(dǎo)入失敗轉(zhuǎn)換模型05ret=rknn.build(do_quantization=True,dataset='./rknn/dataset.txt',pre_compile=False,rknn_batch_size=1)5構(gòu)建RKNN模型調(diào)用build接口,依照加載的模型結(jié)構(gòu)及權(quán)重?cái)?shù)據(jù),構(gòu)建對(duì)應(yīng)的RKNN模型。主要參數(shù)說(shuō)明:do_quantization:是否對(duì)模型進(jìn)行量化,值為T(mén)rue或False。dataset:量化校正數(shù)據(jù)的數(shù)據(jù)集。目前支持文本文件格式,用戶(hù)可以把用于校正的圖片(jpg或png格式)或
npy文件路徑放到一個(gè).txt文件中。轉(zhuǎn)換模型055構(gòu)建RKNN模型文本文件里每一行一條路徑信息。如:如有多個(gè)輸入,則每個(gè)輸入對(duì)應(yīng)的文件用空格隔開(kāi),如:a.jpga2.jpg轉(zhuǎn)換模型055構(gòu)建RKNN模型pre_compile:預(yù)編譯開(kāi)關(guān),如果設(shè)置成True,可以減小模型大小,及模型在硬件設(shè)備上的首次啟動(dòng)速度。但是打開(kāi)這個(gè)開(kāi)關(guān)后,構(gòu)建出來(lái)的模型就只能在硬件平臺(tái)上運(yùn)行,無(wú)法通過(guò)模擬器進(jìn)行推理或性能評(píng)估。如果硬件有更新,則對(duì)應(yīng)的模型要重新構(gòu)建。注意事項(xiàng):1.該選項(xiàng)不能在RK3399ProLinux開(kāi)發(fā)板/WindowsPC/MacOSXPC上使用。2.RKNN-Toolkit-V1.0.0及以上版本生成的預(yù)編譯模型不能在NPU驅(qū)動(dòng)版本小于0.9.6的設(shè)備上運(yùn)行;RKNN-Toolkit-V1.0.0以前版本生成的預(yù)編譯模型不能在NPU驅(qū)動(dòng)版本大于等于0.9.6的設(shè)備上運(yùn)行。
驅(qū)動(dòng)版本號(hào)可以通過(guò)get_sdk_version接口查詢(xún)。3.如果多個(gè)輸入,該選項(xiàng)需要設(shè)置成False。轉(zhuǎn)換模型055構(gòu)建RKNN模型rknn_batch_size:模型的輸入Batch參數(shù)調(diào)整,默認(rèn)值為1。如果大于1,則可以在一次推理中同時(shí)推理多幀輸入圖像或輸入數(shù)據(jù),如MobileNet模型的原始input維度為[1,224,224,3],output維度為[1,1001],當(dāng)rknn_batch_size設(shè)為4時(shí),input的維度變?yōu)閇4,224,224,3],output維度變?yōu)閇4,1001]。注意事項(xiàng):1.rknn_batch_size的調(diào)整并不會(huì)提高一般模型在NPU上的執(zhí)行性能,但卻會(huì)顯著增加內(nèi)存消耗以及增加單幀的延遲。2.rknn_batch_size的調(diào)整可以降低超小模型在CPU上的消耗,提高超小模型的平均幀率。(適用于模型太小,CPU的開(kāi)銷(xiāo)大于NPU的開(kāi)銷(xiāo))。3.rknn_batch_size的值建議小于32,避免內(nèi)存占用太大而導(dǎo)致推理失敗。4.rknn_batch_size修改后,模型的input/output維度會(huì)被修改,使用inference推理模型時(shí)需要設(shè)置相應(yīng)的input的大小,后處理時(shí),
也需要對(duì)返回的outputs進(jìn)行處理。返回值:0表示構(gòu)建成功,-1表示構(gòu)建失敗轉(zhuǎn)換模型05ret=rknn.export_rknn('./rknn/models/best.rknn')6導(dǎo)出RKNN模型調(diào)用export_rknn接口,將RKNN模型保存到指定文件中(.rknn后綴)。主要參數(shù)說(shuō)明:export_path:導(dǎo)出模型文件的路徑。返回值:0表示導(dǎo)出成功,-1表示導(dǎo)出失敗1轉(zhuǎn)換模型2運(yùn)行RKNN模型3預(yù)編譯rknn模型05運(yùn)行RKNN模型05運(yùn)行RKNN模型時(shí),用戶(hù)不需要設(shè)置模型預(yù)處理參數(shù),也不需要構(gòu)建RKNN模型,其使用流程如下圖所示:注意事項(xiàng):1、
以上步驟請(qǐng)按順序執(zhí)行。2、
紅色框標(biāo)注的模型推理、性能評(píng)估和內(nèi)存評(píng)估的步驟先后順序不固定,根據(jù)實(shí)際使用情況決定。3、
調(diào)用eval_memory接口獲取內(nèi)存使用情況時(shí),模型必須運(yùn)行在硬件平臺(tái)上。運(yùn)行RKNN模型05rknn=RKNN(verbose=True)1創(chuàng)建RKNN對(duì)象創(chuàng)建RKNN對(duì)象,以初始化RKNNSDK環(huán)境運(yùn)行RKNN模型05ret=rknn.load_rknn(path,load_model_in_npu=False)2加載RKNN模型調(diào)用load_rknn接口,加載RKNN模型,參數(shù)load_model_in_npu通常默認(rèn)就行主要的參數(shù)說(shuō)明:path:RKNN模型文件路徑。load_model_in_npu:是否直接加載npu中的rknn模型。其中path為rknn模型在npu中的路徑。只有當(dāng)RKNN-Toolkit運(yùn)行在運(yùn)行在RK3399ProLinux開(kāi)發(fā)板或連有開(kāi)發(fā)板或連有NPU設(shè)備設(shè)備的的PC上時(shí)才可以設(shè)為上時(shí)才可以設(shè)為T(mén)rue。默認(rèn)值為False。返回值:0表示加載成功,-1表示加載失敗ret=rknn.load_rknn('./quantization/model.rknn’)print(ret)運(yùn)行RKNN模型05ret=rknn.init_runtime(target=None,device_id=None,perf_debug=False,eval_mem=False,async_mode=False)3初始化運(yùn)行時(shí)環(huán)境調(diào)用init_runtime接口,初始化運(yùn)行時(shí)環(huán)境。在模型推理或性能評(píng)估之前,必須先初始化運(yùn)行時(shí)環(huán)境,明確模型在的運(yùn)行平臺(tái)(具體的目標(biāo)硬件平臺(tái)或軟件模擬器),以及性能評(píng)估時(shí)是否啟用debug模式,以獲取更詳細(xì)的性能信息等。返回值:0表示初始化運(yùn)行時(shí)環(huán)境成功,-1表示初始化運(yùn)行時(shí)環(huán)境失敗。ret=rknn.init_runtime()
print(ret)運(yùn)行RKNN模型054模型推理,性能評(píng)估,獲取內(nèi)存使用情況模型推理,模型性能評(píng)估,獲取模型的內(nèi)存使用情況,這三個(gè)并沒(méi)有哪個(gè)先后,都可以執(zhí)行。比較常用到的就是模型推理,因?yàn)楝F(xiàn)實(shí)當(dāng)中,更需要的是模型推理出來(lái)的結(jié)果,比如目標(biāo)檢測(cè)的結(jié)果類(lèi)別是什么,在圖片上的位置信息等等運(yùn)行RKNN模型054模型推理,性能評(píng)估,獲取內(nèi)存使用情況對(duì)當(dāng)前模型進(jìn)行推理,返回推理結(jié)果。推理結(jié)果只是一個(gè)numpy數(shù)組列表,這列表還需要我們進(jìn)一步分析才能等到相對(duì)應(yīng)的現(xiàn)實(shí)結(jié)果如果RKNN-Toolkit運(yùn)行在PC上,且初始化運(yùn)行環(huán)境時(shí)設(shè)置target為RockchipNPU設(shè)備
,得到的是模型在硬件平臺(tái)上的推理結(jié)果。如果RKNN-Toolkit運(yùn)行在PC上,且初始化運(yùn)行環(huán)境時(shí)沒(méi)有設(shè)置target,得到的是模型在模擬器上的推理結(jié)果。模擬器可以模擬哪款芯片,取決于RKNN模型target參數(shù)值。如果RKNN-Toolkit運(yùn)行在RK3399ProLinux開(kāi)發(fā)板上,得到的是模型在實(shí)際硬件上的推理結(jié)果。模型推理運(yùn)行RKNN模型054模型推理,性能評(píng)估,獲取內(nèi)存使用情況模型推理results=rknn.inference(inputs=[img])主要的參數(shù)說(shuō)明:inputs:待推理的輸入,比如,經(jīng)過(guò)cv2處理的圖片。格式是ndarraylist。data_type:輸入數(shù)據(jù)的類(lèi)型,可填以下值
:float32,float16,int8,uint8,int16。默認(rèn)值為uint8。data_format:數(shù)據(jù)模式,可以填以下值:nchw,nhwc。默認(rèn)值為nhwc。這兩個(gè)的不同之處在于channel放置的位置。inputs_pass_through:將輸入透?jìng)鹘oNPU驅(qū)動(dòng)。非透?jìng)髂J较?,在將輸入傳給NPU驅(qū)動(dòng)之前,工具會(huì)對(duì)輸入進(jìn)行減均值、除方差等操作;而透?jìng)髂J较?,不?huì)做這些操作。這個(gè)參數(shù)的值是一個(gè)數(shù)組,比如要透?jìng)鱥nput0,不透徹input1,則這個(gè)參數(shù)的值為[1,0]。默認(rèn)值為None,即對(duì)所有輸入都不透?jìng)鳌7祷刂担簉esults為推理結(jié)果,類(lèi)型是ndarraylist。運(yùn)行RKNN模型054模型推理,性能評(píng)估,獲取內(nèi)存使用情況模型推理importutilsimportmatplotlib.pyplotasplt定義一個(gè)函數(shù),用于將tensorflow的tensor類(lèi)型轉(zhuǎn)換成numpyarray類(lèi)型importtensorflowastfdeftensor2numpy(data):sess=pat.v1.Session()sess.run(pat.v1.global_variables_initializer())data_numpy=data.eval(session=sess)returndata_numpy定義一個(gè)函數(shù),實(shí)現(xiàn)讀取圖片數(shù)據(jù)并使用RKNN模型進(jìn)行預(yù)測(cè)及展示運(yùn)行RKNN模型054模型推理,性能評(píng)估,獲取內(nèi)存使用情況模型性能評(píng)估通過(guò)評(píng)估模型性能,來(lái)決定是否采用這個(gè)模型。當(dāng)然,在不同的平臺(tái)上,評(píng)估模型性能的結(jié)果也是不一樣的。比如:模型運(yùn)行在PC上初始化運(yùn)行環(huán)境時(shí)不指定target,得到的是模型在模擬器上運(yùn)行的性能數(shù)據(jù),包含逐層的運(yùn)行時(shí)間及模型完整運(yùn)行一次需要的時(shí)間。模擬器可以模擬RK1808,也可以模擬RV1126,具體模擬哪款芯片,取決于RKNN模型的target_platform參數(shù)值
。模型運(yùn)行在與PC連接的RockchipNPU上,且初始化運(yùn)行環(huán)境時(shí)設(shè)置perf_debug為False,則獲得的是模型在硬件上運(yùn)行的總時(shí)間;如果設(shè)置perf_debug為T(mén)rue,除了返回總時(shí)間外,還將返回每一層的耗時(shí)情況。模型運(yùn)行在RK3399ProLinux開(kāi)發(fā)板上時(shí),如果初始化運(yùn)行環(huán)境時(shí)設(shè)置perf_debug為False,獲得的也是模型在硬件上運(yùn)行的總時(shí)間;如果設(shè)置perf_debug為T(mén)rue,返回總時(shí)間及每一層的耗時(shí)情況。運(yùn)行RKNN模型054模型推理,性能評(píng)估,獲取內(nèi)存使用情況模型性能評(píng)估調(diào)用eval_perf接口,來(lái)評(píng)估模型性能。主要參數(shù)說(shuō)明:inputs:類(lèi)型為ndarraylist的輸入,在1.3.1之后的版本是非必須的is_print:是否格式化打印結(jié)果返回值:返回一個(gè)字典類(lèi)型的評(píng)估結(jié)果perf_result:性能信息。類(lèi)型為字典。在硬件平臺(tái)上運(yùn)行,且初始運(yùn)行環(huán)境時(shí)設(shè)置perf_debug為False時(shí),得到的字典只有一個(gè)字段’total_time’,示例如下{‘total_time’:1000}運(yùn)行RKNN模型054模型推理,性能評(píng)估,獲取內(nèi)存使用情況模型性能評(píng)估其他場(chǎng)景下,得到的性能信息字典多一個(gè)’layers’字段,這個(gè)字段的值也是一個(gè)字典,這個(gè)字典以每一層的ID作為key,其值是一個(gè)包含’name’(層名)、’operation’(操作符,只有運(yùn)行在硬件平臺(tái)上時(shí)才有這個(gè)字段)、’time’(該層耗時(shí))等信息的字典。舉例如下運(yùn)行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()運(yùn)行RKNN模型054模型推理,性能評(píng)估,獲取內(nèi)存使用情況獲取內(nèi)存使用情況獲取模型在硬件平臺(tái)運(yùn)行時(shí)的內(nèi)存使用情況。(模型必須運(yùn)行在與PC連接的RockchipNPU設(shè)備上,或直接運(yùn)行在RK3399ProLinux開(kāi)發(fā)板上時(shí)才可查看內(nèi)存使用情況)注意:使用該功能時(shí),對(duì)應(yīng)的驅(qū)動(dòng)版本必須要大于等于0.9.4。驅(qū)動(dòng)版本可以通過(guò)get_sdk_version接口查詢(xún)。運(yùn)行RKNN模型054模型推理,性能評(píng)估,獲取內(nèi)存使用情況獲取內(nèi)存使用情況主要參數(shù)說(shuō)明:is_print:是否以規(guī)范格式打印內(nèi)存使用情況。默認(rèn)值為T(mén)r
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 急救設(shè)備操作與維護(hù)護(hù)理
- 中職護(hù)理護(hù)理技術(shù)操作規(guī)范
- 人工智能助力護(hù)理質(zhì)量提升
- 崇義中學(xué)高二下學(xué)期第二次月考物理試題
- 2025年并購(gòu)重組承銷(xiāo)補(bǔ)充協(xié)議
- 2025年搬家服務(wù)合同協(xié)議
- 2025年AI煤礦安全監(jiān)測(cè)系統(tǒng)中傳感器漂移實(shí)時(shí)校正
- 破陣子·為陳同甫賦壯詞以寄之 課件 2025-2026學(xué)年語(yǔ)文九年級(jí)下冊(cè)統(tǒng)編版
- 疫情防控宣傳試題及答案
- 2026 年中職酒店管理(酒店基礎(chǔ))試題及答案
- 紡織業(yè)賬務(wù)知識(shí)培訓(xùn)課件
- 1688采購(gòu)合同范本
- 購(gòu)買(mǎi)鐵精粉居間合同范本
- GB/T 29730-2025冷熱水用分集水器
- 污水廠安全知識(shí)培訓(xùn)
- (2025年標(biāo)準(zhǔn))存單轉(zhuǎn)讓協(xié)議書(shū)
- 醫(yī)學(xué)科研誠(chéng)信專(zhuān)項(xiàng)培訓(xùn)
- 電力通信培訓(xùn)課件
- 第五版FMEA控制程序文件編制
- 藥物致癌性試驗(yàn)必要性指導(dǎo)原則
- 軟骨肉瘤護(hù)理查房
評(píng)論
0/150
提交評(píng)論