Transfiera el aprendizaje usando la red de pre-entrenamiento de Keras para extraer características de imagen

      Keras es una biblioteca de aprendizaje profundo basada en Python, que encapsula una variedad de modelos pre-entrenados basados ​​en el entrenamiento ImageNet, que es muy adecuado para el aprendizaje por transferencia.

      Hay muchos tutoriales sobre el método de instalación de Keras. El autor realiza directamente la instalación de Keras, lo cual es conveniente y rápido.

      En general, hay tres formas más fáciles de realizar el aprendizaje de transferencia: una es usar directamente el modelo pre-entrenado; la segunda es ajustar los parámetros basados ​​en el modelo pre-entrenado; la tercera es entrenar la red neuronal. La capa superior (es decir, la capa de clasificación) se elimina y la parte restante se considera como un extractor de características para extraer características de datos. El código para extraer las características de la imagen usando una red neuronal pre-entrenada es el siguiente (tome VGG19 como ejemplo), si necesita llamar a otros modelos, solo necesita cambiar el nombre del modelo correspondiente y finalmente guardar las características de capa completamente conectadas de cada imagen como un txt El archivo se almacena en la ruta especificada para operaciones posteriores, lo cual es muy conveniente.

# -*- coding: utf-8 -*-
"""
Created on Mon Nov 12 21:35:24 2018

@author: 13260
"""
import os
from keras.applications.vgg19 import VGG19
from keras.preprocessing import image
from keras.applications.vgg19 import preprocess_input
from keras.models import Model
import numpy as np 




def feature_extraction(filename,save_path):
    model = Model(inputs=base_model.input, outputs=base_model.get_layer('fc2').output)
    img_path = filename 
    img = image.load_img(img_path, target_size=(224, 224))
    x = image.img_to_array(img)
    x = np.expand_dims(x, axis=0)
    x = preprocess_input(x)
    fc2 = model.predict(x)     // 获取VGG19全连接层特征
    np.savetxt(save_path +'.txt',fc2,fmt='%s') // 保存特征文件
    
def read_image(rootdir,save_path):
    list = os.listdir(rootdir) #列出文件夹下所有的目录与文件
    # print(list)
    # files = []
    for i in range(0,len(list)):
        path = os.path.join(rootdir,list[i])
        # print(path)
        # subFiles = []
        for file in os.listdir(path):
            # subFiles.append(file)
            savePath = os.path.join(save_path,file[:-4])
            #print(file)
            filename = os.path.join(path,file)
            feature_extraction(filename,savePath)
            print("successfully saved "+ file[:-4] +".txt !")

    
if __name__ == '__main__':
    base_model = VGG19(weights='imagenet', include_top=True) //加载VGG19模型及参数
    print("Model has been onload !")
    rootdir = 'F:/shiyan/TensorFlow/retrain/data/train'  //图片路径
    save_path = "F:/python/VGG19_feature"   // 提取特征文件保存路径
    read_image(rootdir,save_path)
    print("work has been done !")
    
    
      
              

 

50 artículos originales publicados · Me gusta5 · Visitas 20,000+

Supongo que te gusta

Origin blog.csdn.net/qq_31207499/article/details/84294790
Recomendado
Clasificación