這是一個(gè)皮膚病8分類(lèi)任務(wù)。首先展示類(lèi)別名稱(chēng)列表: classes_name_list=['AK','BCC','BKL','DF','MEL','NV','SCC','VASC'] 以上代碼表明,分類(lèi)任務(wù)為8分類(lèi),標(biāo)簽分別為AK,BCC,BKL等等。 通過(guò)對(duì)DenseNet121進(jìn)行遷移學(xué)習(xí),將頂層修改為自己設(shè)計(jì)的8分類(lèi)器,并在訓(xùn)練集上訓(xùn)練,(訓(xùn)練圖像全部歸一化為0-1范圍內(nèi)),獲得訓(xùn)練好的模型:model.h5 加載該預(yù)訓(xùn)練模型: import tensorflow as tfmodel=tf.keras.models.load_model('model.h5') 該模型結(jié)構(gòu)如下圖: 1.首先我們使用skimage模塊來(lái)預(yù)處理圖像: 加載待預(yù)測(cè)圖像(皮膚病圖像辣眼睛): import skimagefilename=r'datasets\test\MEL\ISIC_0000013.jpg'test_img=skimage.io.imread(filename) #加載測(cè)試圖像,直接得到多維數(shù)組test_img=skimage.transform.resize(test_img,(224,224,3)) #根據(jù)模型輸入尺寸要求,重定義大小test_img=np.expand_dims(test_img,0) #模型輸入要求為四維張量,所以需要增加一個(gè)batch_size維度pred=model.predict(test_img) #將測(cè)試圖像送入模型,進(jìn)行預(yù)測(cè)print('預(yù)測(cè)結(jié)果:',end='')print(classes_name_list[pred.argmax()]) #輸出類(lèi)別預(yù)測(cè)結(jié)果 預(yù)測(cè)結(jié)果:MEL 2.接著換用keras自帶的圖像預(yù)處理模塊進(jìn)行預(yù)處理: import tensorflow as tffilename=r'datasets\test\MEL\ISIC_0000013.jpg'test_img=tf.keras.preprocessing.image.load_img(filename,target_size=(224,224,3)) #此處得到的是pillow圖像Image實(shí)例test_img=tf.keras.preprocessing.image.img_to_array(test_img) #將Image實(shí)例轉(zhuǎn)化為多維數(shù)組test_img=test_img/255 #此處還需要將0-255轉(zhuǎn)化為0-1test_img=np.expand_dims(test_img,0) #將三維輸入圖像拓展成四維張量pred=model.predict(test_img) #預(yù)測(cè)print('預(yù)測(cè)結(jié)果:',end='')print(classes_name_list[pred.argmax()]) #打印結(jié)果 預(yù)測(cè)結(jié)果:MEL 可以看出,使用skimage和keras自帶的圖像預(yù)處理模塊都能實(shí)現(xiàn)準(zhǔn)確預(yù)測(cè),唯一不同是,skimage讀取圖像后自動(dòng)轉(zhuǎn)換為0-1范圍,而keras中使用的需要手動(dòng)轉(zhuǎn)換0-255為0-1. |
|
來(lái)自: 行走在理想邊緣 > 《機(jī)器學(xué)習(xí)》