Как визуализировать с помощью карты активации классов в Керасе? - PullRequest
0 голосов
/ 23 апреля 2019

Я перехожу по этой ссылке: Weakly-supervised-object-localization , чтобы создать тепловую карту области на изображении, где CNN пытается определить класс.

Согласно приведенному вышеВ упомянутом хранилище выполняются следующие шаги:

Шаг 1: Обучить модель в моем пользовательском наборе данных из 3 классов

def creat_model():
    inputs = Input(shape=(299,299,3))
    #Notic : preprocess is different in each Model
    resize = Lambda(Resize,(299,299,3))(inputs)
    #normal = Lambda(preprocess_input,(256,256,3))(resize)
    base_model = InceptionV3(weights='imagenet', include_top=False)

    conv = base_model(resize)    #conv = base_model(resize)
    GAV = GlobalAveragePooling2D()(conv)
    outputs = Dense(3,activation='softmax')(GAV)
    model = Model(inputs,outputs)
    model.compile(optimizer='sgd',
                  loss='categorical_crossentropy',
                  metrics=['accuracy'])
    return model



def training(model):
    earlystopping = EarlyStopping()
    modelchenkpoint = ModelCheckpoint('model_best_only',save_best_only=True)
    model.fit(trainX,trainY,
              batch_size=32,
              nb_epoch=1,
              validation_data=(testX,testY),
              callbacks=[earlystopping,modelchenkpoint])

    model.save('model_save_file.h5')

Шаг 2: Получить сверточную карту объектов, используя

def get_conv(model,test_imgs):
    #Using InceptionV3's output
    #base_model = Model(model.input,model.get_output_at.output)
    inputs = Input(shape=(299,299,3))
    resize = Lambda(Resize,(299,299,3))(inputs)
    inception_v3 = model.get_layer('inception_v3')
    outputs = inception_v3(resize)
    new_model = Model(inputs,outputs)
    #new_model.save('conv.npy')
    print('Loading the conv_features of test_images .......')
    conv_features = new_model.predict(test_imgs)
    print('Loading the conv_features done!!!')
    print(conv_features)
    return conv_features

Шаг 3: Сохраните weights.npy, conv_features.npy и Foregnat_label.npy как массивы с использованием

conv_features = get_conv(model,testX)
    np.save('conv_features', conv_features)
    print('Predict the labels of test_images .......')
    predict_label = model.predict(testX)
    np.save('predict_label', predict_label)
    print('Extraction the weight between GAV and dense(2048x10) .......')
    w = model.get_weights()[-2]
    np.save('weight', w)

Теперь я хочу использовать эту информацию и проверить ее на случайном входном изображении иполучите результат, как показано на странице выше github .

Код, показанный на странице github для этого (я полагаю):

import numpy as np import cv2 import tensorflow as tf

W = np.zeros((10000,2048),dtype='float32')

w = np.load('weight.npy') conv = np.load('conv_features.npy') predict
= np.load('predict_label.npy')


predict_label = (np.argmax(predict,axis=1)).astype('uint8')
#this W meas the coefficients of linear combination:10000x2048 W = np.transpose(w)[predict_label,:] W = np.expand_dims(W,axis=2)


#W and conv are too large temp1 = W[0:10] temp2 = conv[0:10]

del W del conv




sess = tf.Session()

weight = tf.placeholder(dtype='float32',shape=temp1.shape,name='weight') features = tf.placeholder(dtype='float32',shape=temp2.shape,name='features')

resize_features = tf.image.resize_bicubic(features,size=(299,299)) resize_features = tf.reshape(resize_features,[-1,299*299,2048])

#Hotmap = tf.batch_matmul(resize_features,weight) Hotmap = tf.matmul(resize_features,weight) Hotmap = tf.reshape(Hotmap,[-1,299,299])

result_map = sess.run(Hotmap,feed_dict={weight:temp1,features:temp2})

Может кто-нибудь помочь мне использовать этот код и показать результат на входеизображение, как показано в хранилище GitHub?Или какая-либо соответствующая информация относительно этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...