版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
項(xiàng)目三基于TensorFlow的圖像上色模型部署邊緣智能計(jì)算應(yīng)用項(xiàng)目引導(dǎo)案例TensorFlow是Google開源的第二代用于數(shù)字計(jì)算(numericalcomputation)的軟件庫。它是基于數(shù)據(jù)流圖的處理框架,圖中的節(jié)點(diǎn)表示數(shù)學(xué)運(yùn)算(mathematicaloperations),邊表示運(yùn)算節(jié)點(diǎn)之間的數(shù)據(jù)交互。TensorFlow從字面意義上來講有兩層含義,一個(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ù)測項(xiàng)目中所涉及的操作過程主要如下圖所示:基于TensorFlow的圖像彩色化TensorFlow模型轉(zhuǎn)RKNN模型并進(jìn)行預(yù)測任務(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)練過程;掌握數(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í),通過TensorFlow構(gòu)建,訓(xùn)練模型,并使用模型對(duì)黑白圖像進(jìn)行彩色化。任務(wù)描述任務(wù)要求完成數(shù)據(jù)集的加載;完成模型的定義;完成模型訓(xùn)練;完成模型測試。任務(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?兩者有何區(qū)別?任務(wù)分析與計(jì)劃03任務(wù)計(jì)劃表項(xiàng)目名稱基于TensorFlow的圖像上色模型部署任務(wù)名稱基于TensorFlow的圖像彩色化計(jì)劃方式自主設(shè)計(jì)計(jì)劃要求請(qǐng)用8個(gè)計(jì)劃步驟來完整描述出如何完成本次任務(wù)序號(hào)任務(wù)計(jì)劃1
2
3
45678通過上面的思考,你是否對(duì)本任務(wù)要完成的工作有所了解?讓我們一起來制訂完成本次任務(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簡介1RGB與LAB顏色空間3TensorFlow是一個(gè)基于數(shù)據(jù)流編程(dataflowprogramming)的符號(hào)數(shù)學(xué)系統(tǒng),被廣泛應(yīng)用于各類機(jī)器學(xué)習(xí)(machinelearning)算法的編程實(shí)現(xiàn),其前身是谷歌的神經(jīng)網(wǎng)絡(luò)算法庫DistBelief04TensorFlow簡介為什么選擇TensorFlow?04TensorFlow簡介1.輕松地構(gòu)建模型在EagerExecution中使用Keras等直觀的高階API輕松地構(gòu)建和訓(xùn)練機(jī)器學(xué)習(xí)模型,EagerExecution使我們能夠快速迭代模型并輕松地調(diào)試模型為什么選擇TensorFlow?04TensorFlow簡介2.隨時(shí)隨地進(jìn)行可靠的機(jī)器學(xué)習(xí)生產(chǎn)無論您使用哪種語言,都可以在云端、本地、瀏覽器中或設(shè)備上輕松地訓(xùn)練和部署模型。為什么選擇TensorFlow?04TensorFlow簡介3.強(qiáng)大的研究實(shí)驗(yàn)一個(gè)簡單而靈活的架構(gòu),可以更快地將新想法從概念轉(zhuǎn)化為代碼,然后創(chuàng)建出先進(jìn)的模型,并最終對(duì)外發(fā)布。圖像彩色化應(yīng)用及意義204知識(shí)儲(chǔ)備TensorFlow簡介1RGB與LAB顏色空間3圖像彩色化應(yīng)用及意義04
圖像彩色化技術(shù)廣闊的應(yīng)用前景使其成為數(shù)字圖像處理領(lǐng)域的重要研究內(nèi)容。近十年伴隨著數(shù)碼技術(shù)和信息技術(shù)的進(jìn)步,圖像彩色化一度成為使用圖像處理軟件的用戶相當(dāng)感興趣的話題,這可以由萬維網(wǎng)上各種各樣的彩色化教程得到證實(shí)。其次,其研究成果對(duì)彩色圖像合成、圖像顏色處理、圖像處理等相關(guān)領(lǐng)域的研究具有重要的參考價(jià)值和研究意義圖像彩色化應(yīng)用及意義04以下是近年來圖像彩色化技術(shù)在各學(xué)科方面的典型應(yīng)用:遙感圖像黑白照片和黑白電影的著色醫(yī)療影像黑白動(dòng)畫片和漫畫著色電影特技制作和處理夜視圖像處理古建筑及古文物的保護(hù)和修復(fù)圖像彩色化應(yīng)用及意義204知識(shí)儲(chǔ)備TensorFlow簡介1RGB與LAB顏色空間31RGB顏色空間2LAB顏色空間04RGB顏色空間04RGB色彩模式是工業(yè)界的一種顏色標(biāo)準(zhǔn),是通過對(duì)紅(R)、綠(G)、藍(lán)(B)三個(gè)顏色通道的變化以及它們相互之間的疊加來得到各式各樣的顏色的,RGB即是代表紅、綠、藍(lán)三個(gè)通道的顏色,這個(gè)標(biāo)準(zhǔn)幾乎包括了人類視力所能感知的所有顏色,是運(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值來記錄和表達(dá)。在右面所看到的最上面的圖片實(shí)際上是由下方的三個(gè)部分組成的。RGB顏色空間04紅色、綠色、藍(lán)色我們把它們稱為“三原色光”,英文就是R(red),G(green),B(blue)。用過ps的同學(xué)應(yīng)該會(huì)很熟悉,就是我們新建文檔時(shí)候的顏色模式。你可以把他們想象成菜譜中的3種調(diào)料,在現(xiàn)實(shí)中,三者的比例不同,出來的菜肴會(huì)是迥異的。因此,在不同的圖像中,RGB成分也是不一樣的,可能有的圖中R(紅色)成分多些,有的B(藍(lán)色)成分多一些。RGB顏色空間04做菜的時(shí)候,菜譜上會(huì)提示類似“糖3克、鹽1克”等,來表示調(diào)料的多少,在電腦中,RGB的所謂“多少”就是指亮度,并使用整數(shù)來表示。通常情況下,RGB各有256級(jí)亮度,用數(shù)字表示為從0、1、2...直到255。注意雖然數(shù)字最高是255,但0也是數(shù)值之一,因此共256級(jí)。如同2000年到2010年共是11年一樣。按照計(jì)算,256級(jí)的RGB色彩總共能組合出約1678萬種色彩,即256×256×256=16777216。通常也被簡稱為1600萬色或千萬色。也稱為24位色(2的24次方)。1RGB顏色空間2LAB顏色空間04LAB顏色空間04同RGB顏色空間相比,Lab是一種不常用的色彩空間。它是在1931年國際照明委員會(huì)(CIE)制定的顏色度量國際標(biāo)準(zhǔn)的基礎(chǔ)上建立起來的。1976年,經(jīng)修改后被正式命名為CIELab。Lab顏色模型彌補(bǔ)了RGB和CMYK兩種色彩模式的不足。它是一種設(shè)備無關(guān)的顏色模型,也是一種基于生理特征的顏色模型。
Lab顏色模型由三個(gè)要素組成,一個(gè)要素是亮度(L),a和b是兩個(gè)顏色通道。a包括的顏色是從深綠色(低亮度值)到灰色(中亮度值)再到亮粉紅色(高亮度值);b是從亮藍(lán)色(低亮度值)到灰色(中亮度值)再到黃色(高亮度值)。因此,這種顏色混合后將產(chǎn)生具有明亮效果的色彩。Lab相較于RGB與CMYK等顏色空間更符合人類視覺,也更容易調(diào)整:想要調(diào)節(jié)亮度(不考慮Helmholtz–Kohlrauscheffect,見下注)就調(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è)備無關(guān)(device-independent)。也就是說,在給定了顏色空間白點(diǎn)(whitepoint)(下圖中表示了一種顏色空間的白點(diǎn))之后,這個(gè)顏色空間就能明確地確定各個(gè)顏色是如何被創(chuàng)建和顯示的,與使用的顯示介質(zhì)沒有關(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模型測試任務(wù)實(shí)施05基于TensorFlow的圖像彩色化導(dǎo)入一些必要的包和模塊05? os:對(duì)文件以及文件夾或者其他的進(jìn)行一系列的操作。? pathlib:面向?qū)ο蟮奈募到y(tǒng)路徑庫? numpy:Python語言的一個(gè)擴(kuò)展程序庫,支持大量的維度數(shù)組與矩陣運(yùn)算,此外也針對(duì)數(shù)組運(yùn)算提供大量的數(shù)學(xué)函數(shù)庫。? matplotlib:Python的一個(gè)繪圖庫,是Python中最常用的可視化工具之一,可以非常方便地創(chuàng)建2D圖表和一些基本的3D圖表。? tensorflow:一個(gè)基于數(shù)據(jù)流編程的符號(hào)數(shù)學(xué)系統(tǒng),被廣泛應(yīng)用于各類機(jī)器學(xué)習(xí)算法的編程實(shí)現(xiàn),其前身是谷歌的神經(jīng)網(wǎng)絡(luò)算法庫DistBelief。? Conv2D,Conv2DTranspose,BatchNormalization,UpSampling2D,Dense,Reshape,Input,Flatten:導(dǎo)入一些必要的包和模塊05a. 常用層? Dense:全連接層本質(zhì)就是由一個(gè)特征空間線性變換到另一個(gè)特征空間。因此,dense層的目的是將前面提取的特征,在dense經(jīng)過非線性變化,提取這些特征之間的關(guān)聯(lián),最后映射到輸出空間上。簡單來說全連接就是把以前的局部特征重新通過權(quán)值矩陣組裝成完整的圖。? BatchNormalization:批量標(biāo)準(zhǔn)化層,用于將數(shù)據(jù)標(biāo)準(zhǔn)化,可加快訓(xù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層用來將輸入“壓平”,即把多維的輸入一維化,常用在從卷積層到全連接層的過渡。導(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的子類,此類以當(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ù)說明:– 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圖片名稱,該方法的默認(rèn)行為是以不確定的隨機(jī)無序順序返回文件名。傳遞種子或shuffle=False以確定順序獲得結(jié)果加載數(shù)據(jù)集052創(chuàng)建訓(xùn)練集和驗(yàn)證集在讀取數(shù)據(jù)集后,要將數(shù)據(jù)分割成兩部分:訓(xùn)練集和驗(yàn)證集。這樣就可以使用訓(xùn)練集的數(shù)據(jù)來訓(xùn)練模型,然后用驗(yàn)證集上的誤差作為最終模型在應(yīng)對(duì)現(xiàn)實(shí)場景中的泛化誤差。加載數(shù)據(jù)集052創(chuàng)建訓(xùn)練集和驗(yàn)證集有了驗(yàn)證集,當(dāng)要驗(yàn)證模型的最終效果時(shí),只需將訓(xùn)練好的模型在驗(yàn)證集上計(jì)算誤差,即可認(rèn)為此誤差即為泛化誤差的近似值,可以通過比較訓(xùn)練好的模型在驗(yàn)證集上的誤差大小來評(píng)估模型的泛化能力。skip:創(chuàng)建一個(gè)從list_ds數(shù)據(jù)集中跳過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ù)測將數(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ù)說明:– 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ù)集中元素的目錄的名稱。shuffle:隨機(jī)洗牌數(shù)據(jù)集。batch:數(shù)據(jù)集批處理大小。prefetch:創(chuàng)建從該數(shù)據(jù)集中預(yù)取元素的數(shù)據(jù)集。定義模型05參數(shù)說明:– 當(dāng)使用該層作為模型第一層時(shí),需要提供input_shape參數(shù)。在keras中,數(shù)據(jù)是以張量的形式表示的,張量的形狀稱之為shape,表示從最外層向量逐步到達(dá)最底層向量的降維解包過程。– filters:整數(shù),卷積輸出濾波器的數(shù)量。– kernel_size:指定卷積窗口的高度和寬度。– padding:有valid或same。(注:卷積會(huì)導(dǎo)致輸出圖像越來越小,圖像邊界信息丟失,若想保持卷積后的圖像大小不變,需要設(shè)置padding參數(shù)為same)– activation:如relu、sigmoid等。使用激活函數(shù)。如果不特別指定,將不會(huì)使用任何的激活函數(shù)。– strides:卷積核步長– dilation_rate:空洞卷積的kernel間隔數(shù)量使用Sequential()方法可以自定義網(wǎng)絡(luò)結(jié)構(gòu),通過使用.add()添加自定義網(wǎng)絡(luò)層。Conv2D(filters,kernel_size,strides,dilation_rate,padding='valid',activation=None):二維卷積層,提取局部特征定義模型05參數(shù)說明:參數(shù)與Conv2D一樣。參數(shù)說明:– 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ù)說明:– filepath:模型保存的位置,可以只指定到文件夾,也可以指定到具體的文件名。– monitor:需要監(jiān)視的值,通常為:val_accuracy或val_loss或accuracy或loss。– verbose:信息展示模式,0或1。為1表示輸出epoch模型保存信息,默認(rèn)為0表示不輸出該信息。– save_best_only:設(shè)為True或False,為True就是保存在驗(yàn)證集上性能最好的模型。– save_weights_only:如果為True,則只有模型的權(quán)重保存,否則保存完整模型。– save_frequency:檢查點(diǎn)之間的間隔模型訓(xùn)練052編譯模型在訓(xùn)練模型之前,需要定義損失函數(shù)和優(yōu)化器等? 損失函數(shù)就是用來表現(xiàn)預(yù)測與實(shí)際數(shù)據(jù)的差距程度,衡量模型模型預(yù)測的好壞? 優(yōu)化器就是在反向傳播過程中,指引損失函數(shù)的各個(gè)參數(shù)往正確的方向更新合適的大小,使得更新后的各個(gè)參數(shù)讓損失函數(shù)值不斷逼近全局最小。? 評(píng)測標(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)測標(biāo)準(zhǔn)。模型訓(xùn)練052編譯模型參數(shù)說明:– optimizer:優(yōu)化器– loss:損失函數(shù);多分類損失函數(shù)有:二分類交叉熵?fù)p失函數(shù)binary_crossentropy、多類別交叉熵?fù)p失函數(shù)categorical_crossentropy– metrics:評(píng)價(jià)指標(biāo);提供了六種準(zhǔn)確率accuracy、二分類準(zhǔn)確率binary_accuracy、分類準(zhǔn)確率categorical_accuracy、稀疏分類準(zhǔn)確率sparse_categorical_accuracy、多分類TopK準(zhǔn)確率top_k_categorical_accuracy和稀疏多分類TopK準(zhǔn)確率parse_top_k_categorical_accuracy模型訓(xùn)練053加載預(yù)訓(xùn)練模型權(quán)重參數(shù)load_weights(filepath):加載模型權(quán)重參數(shù)。參數(shù)說明:– 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ù)說明:x:訓(xùn)練數(shù)據(jù)。y:訓(xùn)練數(shù)據(jù)的標(biāo)簽。epochs:訓(xùn)練模型最終輪次。一個(gè)輪次是在整個(gè)x和y上的一輪迭代。initial_epoch:開始訓(xùn)練的輪次。callbacks:訓(xùn)練時(shí)使用的回調(diào)函數(shù)。validation_data:用來評(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ù)說明:– x:X軸數(shù)據(jù),列表或數(shù)組,可選– y:Y軸數(shù)據(jù),列表或數(shù)組在模型訓(xùn)練完成后,會(huì)保存模型訓(xùn)練過程中每個(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ù)說明:– 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ù)說明:– lab:LAB顏色空間的圖像數(shù)據(jù)。numpy.concatenate((a1,a2,...),axis=0,out=None):沿著axis軸拼接序列模型測試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分)無制定計(jì)劃(0分)2專業(yè)技能(40%)很好的完成數(shù)據(jù)集的加載,模型的定義,模型訓(xùn)練和模型測試。(40分)40分
大體完成數(shù)據(jù)集的加載,模型的定義,模型訓(xùn)練和模型測試。(30分)只完成數(shù)據(jù)集的加載,模型的定義。(20分)只完成數(shù)據(jù)集的加載。(10分)沒有完成目標(biāo)檢測算法接口的定義和使用。(0分)3核心素養(yǎng)(20%)具有良好的自主學(xué)習(xí)能力、分析解決問題的能力、整個(gè)任務(wù)過程中有指導(dǎo)他人(20分)20分
具有較好的學(xué)習(xí)能力和分析解決問題的能力,任務(wù)過程中無指導(dǎo)他人(15分)能夠主動(dòng)學(xué)習(xí)并收集信息,有請(qǐng)教他人進(jìn)行解決問題的能力(10分)不主動(dòng)學(xué)習(xí)(0分)4課堂紀(jì)律(20%)設(shè)備無損壞、設(shè)備擺放整齊、工位區(qū)域內(nèi)保持整潔、無干擾課堂秩序(20分)20分
設(shè)備無損壞、無干擾課堂秩序(15分)無干擾課堂秩序(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ù)測邊緣智能計(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ù)測了解TensorFlow和rknn的相關(guān)知識(shí)了解TensorFlow模型轉(zhuǎn)rknn模型的意義掌握如何將TensorFlow模型轉(zhuǎn)成rknn模型掌握如何使用rknn模型進(jìn)行預(yù)測掌握將rknn模型部署到AI邊緣開發(fā)板并進(jìn)行預(yù)測職業(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ù)測
此任務(wù)的主要內(nèi)容是了解TensorFlow模型轉(zhuǎn)換成rknn模型流程,通過代碼將TensorFlow模型轉(zhuǎn)換成rknn模型,并使用rknn模型進(jìn)行預(yù)測。任務(wù)描述任務(wù)要求完成TensorFlow模型轉(zhuǎn)rknn模型;完成部署到AI邊緣開發(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ù)測任務(wù)分析什么時(shí)rknn模型,為什么要將TensorFlow模型轉(zhuǎn)rknn模型?如何將TensorFlow模型轉(zhuǎn)rknn模型任務(wù)分析與計(jì)劃03任務(wù)計(jì)劃表項(xiàng)目名稱基于TensorFlow的圖像上色模型部署任務(wù)名稱TensorFlow模型轉(zhuǎn)RKNN模型并進(jìn)行預(yù)測計(jì)劃方式自主設(shè)計(jì)計(jì)劃要求請(qǐng)用8個(gè)計(jì)劃步驟來完整描述出如何完成本次任務(wù)序號(hào)任務(wù)計(jì)劃1
2
3
45678通過上面的思考,你是否對(duì)本任務(wù)要完成的工作有所了解?讓我們一起來制訂完成本次任務(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ù)測TensorFlow模型轉(zhuǎn)rknn模型的意義204知識(shí)儲(chǔ)備初識(shí)RKNN104初識(shí)RKNNRKNN是Rockchipnpu平臺(tái)使用的模型類型,以.rknn后綴結(jié)尾的模型文件。Rockchip提供了完整了模型轉(zhuǎn)換Python工具,方便用戶將自主研發(fā)的算法模型轉(zhuǎn)換成RKNN模型,同時(shí)Rockchip也提供了C/C++和PythonAPI接口。RKNN-Toolkit04初識(shí)RKNNRKNN-Toolkit是為用戶提供在PC、RockchipNPU平臺(tái)上進(jìn)行模型轉(zhuǎn)換、推理和性能評(píng)估的開發(fā)套件,用戶通過該工具提供的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依賴為>=1.1.0。ARM64平臺(tái)不需要依賴sklearn和opencv-python。Jinja2只在使用自定義OP時(shí)用到。RKNN-Toolkit04初識(shí)RKNNRKNN-Toolkit是一個(gè)跨平臺(tá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版本開始支持多輸入模型。從1.3.0版本開始支持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處理能力來進(jìn)行推理,進(jìn)而實(shí)現(xiàn)實(shí)際場景化的應(yīng)用。TensorFlow模型轉(zhuǎn)rknn模型04真實(shí)場景中,可以利用高算力設(shè)備,實(shí)現(xiàn)圖像彩色化實(shí)時(shí)運(yùn)行,在醫(yī)療,遙感,航天等各個(gè)領(lǐng)域,可以實(shí)時(shí)觀測彩色化的圖像,增強(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ù)測部署到AI邊緣開發(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模型可以通過load_keras接口導(dǎo)入并使用。紅色框標(biāo)注的模型推理、性能評(píng)估和內(nèi)存評(píng)估的步驟先后順序不固定,根據(jù)實(shí)際使用情況決定。只有當(dāng)目標(biāo)平臺(tá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ù)值為True,日志信息還將寫到該參數(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ù)說明: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ù)說明:do_quantization:是否對(duì)模型進(jìn)行量化,值為True或False。dataset:量化校正數(shù)據(jù)的數(shù)據(jù)集。目前支持文本文件格式,用戶可以把用于校正的圖片(jpg或png格式)或
npy文件路徑放到一個(gè).txt文件中。轉(zhuǎn)換模型055構(gòu)建RKNN模型文本文件里每一行一條路徑信息。如:如有多個(gè)輸入,則每個(gè)輸入對(duì)應(yīng)的文件用空格隔開,如:a.jpga2.jpg轉(zhuǎn)換模型055構(gòu)建RKNN模型pre_compile:預(yù)編譯開關(guān),如果設(shè)置成True,可以減小模型大小,及模型在硬件設(shè)備上的首次啟動(dòng)速度。但是打開這個(gè)開關(guān)后,構(gòu)建出來的模型就只能在硬件平臺(tái)上運(yùn)行,無法通過模擬器進(jìn)行推理或性能評(píng)估。如果硬件有更新,則對(duì)應(yīng)的模型要重新構(gòu)建。注意事項(xiàng):1.該選項(xiàng)不能在RK3399ProLinux開發(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)可以通過get_sdk_version接口查詢。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的開銷大于NPU的開銷)。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ù)說明: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í),用戶不需要設(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ù)說明:path:RKNN模型文件路徑。load_model_in_npu:是否直接加載npu中的rknn模型。其中path為rknn模型在npu中的路徑。只有當(dāng)RKNN-Toolkit運(yùn)行在運(yùn)行在RK3399ProLinux開發(fā)板或連有開發(fā)板或連有NPU設(shè)備設(shè)備的的PC上時(shí)才可以設(shè)為上時(shí)才可以設(shè)為True。默認(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è)并沒有哪個(gè)先后,都可以執(zhí)行。比較常用到的就是模型推理,因?yàn)楝F(xiàn)實(shí)當(dāng)中,更需要的是模型推理出來的結(jié)果,比如目標(biāo)檢測的結(jié)果類別是什么,在圖片上的位置信息等等運(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í)沒有設(shè)置target,得到的是模型在模擬器上的推理結(jié)果。模擬器可以模擬哪款芯片,取決于RKNN模型target參數(shù)值。如果RKNN-Toolkit運(yùn)行在RK3399ProLinux開發(fā)板上,得到的是模型在實(shí)際硬件上的推理結(jié)果。模型推理運(yùn)行RKNN模型054模型推理,性能評(píng)估,獲取內(nèi)存使用情況模型推理results=rknn.inference(inputs=[img])主要的參數(shù)說明:inputs:待推理的輸入,比如,經(jīng)過cv2處理的圖片。格式是ndarraylist。data_type:輸入數(shù)據(jù)的類型,可填以下值
:float32,float16,int8,uint8,int16。默認(rèn)值為uint8。data_format:數(shù)據(jù)模式,可以填以下值:nchw,nhwc。默認(rèn)值為nhwc。這兩個(gè)的不同之處在于channel放置的位置。inputs_pass_through:將輸入透傳給NPU驅(qū)動(dòng)。非透傳模式下,在將輸入傳給NPU驅(qū)動(dòng)之前,工具會(huì)對(duì)輸入進(jìn)行減均值、除方差等操作;而透傳模式下,不會(huì)做這些操作。這個(gè)參數(shù)的值是一個(gè)數(shù)組,比如要透傳input0,不透徹input1,則這個(gè)參數(shù)的值為[1,0]。默認(rèn)值為None,即對(duì)所有輸入都不透傳。返回值:results為推理結(jié)果,類型是ndarraylist。運(yùn)行RKNN模型054模型推理,性能評(píng)估,獲取內(nèi)存使用情況模型推理importutilsimportmatplotlib.pyplotasplt定義一個(gè)函數(shù),用于將tensorflow的tensor類型轉(zhuǎn)換成numpyarray類型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ù)測及展示運(yùn)行RKNN模型054模型推理,性能評(píng)估,獲取內(nèi)存使用情況模型性能評(píng)估通過評(píng)估模型性能,來決定是否采用這個(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為True,除了返回總時(shí)間外,還將返回每一層的耗時(shí)情況。模型運(yùn)行在RK3399ProLinux開發(fā)板上時(shí),如果初始化運(yùn)行環(huán)境時(shí)設(shè)置perf_debug為False,獲得的也是模型在硬件上運(yùn)行的總時(shí)間;如果設(shè)置perf_debug為True,返回總時(shí)間及每一層的耗時(shí)情況。運(yùn)行RKNN模型054模型推理,性能評(píng)估,獲取內(nèi)存使用情況模型性能評(píng)估調(diào)用eval_perf接口,來評(píng)估模型性能。主要參數(shù)說明:inputs:類型為ndarraylist的輸入,在1.3.1之后的版本是非必須的is_print:是否格式化打印結(jié)果返回值:返回一個(gè)字典類型的評(píng)估結(jié)果perf_result:性能信息。類型為字典。在硬件平臺(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)估其他場景下,得到的性能信息字典多一個(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開發(fā)板上時(shí)才可查看內(nèi)存使用情況)注意:使用該功能時(shí),對(duì)應(yīng)的驅(qū)動(dòng)版本必須要大于等于0.9.4。驅(qū)動(dòng)版本可以通過get_sdk_version接口查詢。運(yùn)行RKNN模型054模型推理,性能評(píng)估,獲取內(nèi)存使用情況獲取內(nèi)存使用情況主要參數(shù)說明:is_print:是否以規(guī)范格式打印內(nèi)存使用情況。默認(rèn)值為Tr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度文化藝術(shù)界員工勞動(dòng)合同范本2篇
- 二零二五年度大蒜種植基地與電商平臺(tái)物流配送合同3篇
- 二零二五年度房產(chǎn)中介保密協(xié)議示范文本9篇
- 二零二五年度房屋抵押貸款與資產(chǎn)證券化合同范本3篇
- 二零二五年度建筑安裝工程安全應(yīng)急預(yù)案編制合同3篇
- 二零二五年度房地產(chǎn)開發(fā)項(xiàng)目合作智慧城市建設(shè)合作協(xié)議范本3篇
- 縱向推書機(jī)構(gòu)課程設(shè)計(jì)
- 二零二五年度步行街商鋪?zhàn)赓U與綠色能源使用協(xié)議合同3篇
- 二零二五年度房地產(chǎn)銷售代理服務(wù)合同(含綠色環(huán)保建材)3篇
- 海南衛(wèi)生健康職業(yè)學(xué)院《拓展運(yùn)動(dòng)課程設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 米吳科學(xué)漫畫奇妙萬象篇
- 河南省鄭州市金水區(qū)2022-2023學(xué)年三年級(jí)上學(xué)期期末數(shù)學(xué)試卷
- XXX酒店開辦費(fèi)POB預(yù)算
- Z矩陣、Y矩陣、A矩陣、S矩陣、T矩陣定義、推導(dǎo)及轉(zhuǎn)換公式
- 中美歐規(guī)范樁基承載力計(jì)算設(shè)計(jì)對(duì)比
- 外科洗手操作考核評(píng)分表
- 復(fù)旦大學(xué)外國留學(xué)生入學(xué)申請(qǐng)表
- 長安汽車發(fā)動(dòng)機(jī)水溫高故障案例分析處置
- 瞬時(shí)單位線法計(jì)算洪水
- 氣力輸灰安裝施工方案
- 抗精神疾病藥物與麻醉課件
評(píng)論
0/150
提交評(píng)論