这是一个皮肤病8分类任务。首先展示类别名称列表: classes_name_list=['AK','BCC','BKL','DF','MEL','NV','SCC','VASC'] 以上代码表明,分类任务为8分类,标签分别为AK,BCC,BKL等等。 通过对DenseNet121进行迁移学习,将顶层修改为自己设计的8分类器,并在训练集上训练,(训练图像全部归一化为0-1范围内),获得训练好的模型:model.h5 加载该预训练模型: import tensorflow as tfmodel=tf.keras.models.load_model('model.h5') 该模型结构如下图: 1.首先我们使用skimage模块来预处理图像: 加载待预测图像(皮肤病图像辣眼睛): import skimagefilename=r'datasets\test\MEL\ISIC_0000013.jpg'test_img=skimage.io.imread(filename) #加载测试图像,直接得到多维数组test_img=skimage.transform.resize(test_img,(224,224,3)) #根据模型输入尺寸要求,重定义大小test_img=np.expand_dims(test_img,0) #模型输入要求为四维张量,所以需要增加一个batch_size维度pred=model.predict(test_img) #将测试图像送入模型,进行预测print('预测结果:',end='')print(classes_name_list[pred.argmax()]) #输出类别预测结果 预测结果:MEL 2.接着换用keras自带的图像预处理模块进行预处理: 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实例test_img=tf.keras.preprocessing.image.img_to_array(test_img) #将Image实例转化为多维数组test_img=test_img/255 #此处还需要将0-255转化为0-1test_img=np.expand_dims(test_img,0) #将三维输入图像拓展成四维张量pred=model.predict(test_img) #预测print('预测结果:',end='')print(classes_name_list[pred.argmax()]) #打印结果 预测结果:MEL 可以看出,使用skimage和keras自带的图像预处理模块都能实现准确预测,唯一不同是,skimage读取图像后自动转换为0-1范围,而keras中使用的需要手动转换0-255为0-1. |
|