Extracción de características para el combate real en redes pre-entrenadas

        Recientemente, estoy haciendo un proyecto de graduación, que implica el uso de contenido de red de pre-entrenamiento. Hay muchos recursos en línea en esta área, pero hay algunos problemas de código. Después de algunos intentos, esta persona blanca ha completado con éxito esta función. Biblioteca, para la instalación de la biblioteca de keras, simplemente use pip en todas las ventanas de la línea de comandos. ¡Envía mi código aquí y espero progresar junto con otros estudiantes! El código de Xiaobai es más escoria ...

# - * - codificación: utf-8 - * - 
"" " 
Creado el 

jueves 27 de diciembre 15:30:38 2018 @author: 13260 
" "" 

"" " 
功能 : 提取 VGG19 卷积 层 特征 并 保存
" "" 
# from keras.applications.resnet50 import ResNet50 
from keras.applications.densenet import DenseNet201, preprocess_input 
from keras.preprocessing import image 
#from keras.applications.resnet50 import preprocess_input 
from keras.models import Model 
from sklearn.cluster import MiniBatchKMeans 
from keras.utils import from keras.utils plot_model 
from sklearn import preprocessing 
import numpy as np 
import os 

"" "
Función: Leer todas las rutas de imagen 
Entrada: Ruta de base de datos 
Salida: Todas las rutas de imagen 
"" 
Ruta de def read_all_imgs (data_dir): 
    catalogs = os.listdir (data_dir) 
    imgSet = [] 
    for i in range (len (catalogs)): 
        catalog_path = data_dir + catalogs [i] 
        for img in os.listdir (catalog_path): 
            #imgs = [catalog_path + "/" + img para img en catalog_path] 
            img_path = catalog_path + "/" + img 
            imgSet.append (img_path) 
        #print (len (imgSet)) 
    print ("[INFO] Hay" + str (len ( imgSet)) + "imágenes ......") 
    imgSet retorno 
    
"" " 
función: la capa de convolución correspondientes a la característica de imagen modelo extracción 
entradas: 1, modelo CNN 2, ruta de la imagen 
salidas: una característica de imagen correspondiente a 
" "" 
extract_conv_feature DEF (modelo, img_path ):
    img = image.load_img (img_path)
    x = image.img_to_array (img)forma [1] 
    tmp_feature = []img_to_array (img) 
    x = np.expand_dims (x, axis = 0)
    x = preprocess_input (x) 
    conv_features = model.predict (x) 
    #print ("[INFO] Feature 
    was extracted!") return conv_features 
"" " 
Función: leer archivo de características de capa convolucional 
Entrada: ruta de 
salida del archivo de características: característica 
"" " 
def load_conv_feature (feature_path): 
    conv_feature = np.load (feature_path) 
    return conv_feature 
" "" 
Función: extraer la 
entrada de característica local del mapa de características de convolución : las características de capa convolucional de la imagen, formulario (muestras, filas, columnas, filtros) 
salida: una colección de vectores de características de convolución de imagen en la forma (filas * cols, filtros) 
"" " 
def flatten_conv_feature (conv_feature): 
    num_c = conv_feature.shape [2] 
    num_r = conv_feature.shape [1]
        para j en rango (num_r):
    para i en rango (num_c): 
            tmp_feature.append (conv_feature [0, i, j ,:]. flatten ()) 
    tmp_feature = np.array (tmp_feature) 
    return tmp_feature 
"" " 
Función: extraer todas las características de capa de convolución de imagen (Expandir) 
Entrada: 
Ruta de imagen 
Salida: Características de capa de convolución de todas las imágenes 
"" " def get_all_local_feature (model, imgSet): 
    all_feature = [] 
    max_num = len (imgSet) 
    para i in range (max_num): 
        conv_feature = extract_conv_feature (model , imgSet [i]) 
        si i% 500 == 0: 
            print ("[INFO]" + str (i) + "images'conv_feature ha sido extraído!") 
        #flatten_feature = flatten_conv_feature (conv_feature) 
        flatten_feature = flatten_conv_feature (conv_feature)
        all_feature.append (flatten_feature) 
    all_feature = np.matriz (all_feature)
    print ("[INFO] ¡Se ha extraído toda conv_feature!") 
    return all_feature 
"" " 
功能 : 提取 所有 图像 的 卷积 层 特征 (未 展开)
" "" 
def get_no_flatten_feature (model, imgSet): 
    all_feature = [] 
    max_num = len (imgSet) 
    para i in range (max_num): 
        conv_feature = extract_conv_feature (model, imgSet [i]) 
        if i% 500 == 0: 
            print ("[INFO]" + str (i) + "images'conv_feature ha sido extraído! ") 
        all_feature.append (conv_feature) 
    all_feature = np.array (all_feature) 
    print (" [INFO] All conv_feature ha sido extraído! ") 
    return all_feature 

def save_feature (característica, ruta):
    np.save (ruta, función)
    print ("[INFO] ¡El archivo se ha guardado!") 

def main (): 
    img_dir = "F: / shiyan / TensorFlow / retrain / data / train /" 
    #Image data path imgSet = read_all_imgs (img_dir) 
    # Si extrae convolución Para las características de capa, la propiedad include_top del modelo se establece en False, si se extrae la característica de capa completamente conectada, la propiedad include_top se establece en True 
    # Load DenseNet201 modelo pre-entrenado, si necesita usar otro modelo, puede reemplazar directamente el modelo, otro código no necesita usar 
    base_model = DenseNet201 (weights = 'imagenet', include_top = False) 
    #base_model = ResNet50 (weights = 'imagenet', include_top = False) 
    # Según el nombre de cada capa de la estructura de red keras, use get_layer (nombre de capa de red) directamente .output puede obtener el resultado de salida de la capa correspondiente 
    # Si no conoce el nombre de la capa de red, puede usar model.summery () para imprimir cada capa del modelo. # model 
    modelo. Modelo = Modelo (input = base_model. input, salidas = base_model.get_layer ('conv5_block32_concat'). salida)
    #model = Modelo (input = base_model.input, salidas = base_model.get_layer ('block5_conv3'). output) 
    print ("[INFO] ¡El modelo se ha cargado!") 
    "" "未 展开" ""
    all_conv_feature = get_no_flatten_feature (model, imgSet) 
    print (all_conv_feature.shape) 
    path = "F: /python/features/DenseNet/DenseNet201_conv_feature.npy" 
    save_feature (all_conv_feature, path) 
    
if __name__ == ": ___in_ 
    )
    
    
50 artículos originales publicados · Me gusta5 · Visitas 20,000+

Supongo que te gusta

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