Есть ли другой способ получения тепловых карт из модели? - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть модель, которая имеет следующие особенности:

enter image description here

Я хотел бы применить методы градиентной камеры для извлечения карты тепла. Я уже пробовал использовать следующий код, но не могу получить хороший результат.

# load image
img_path = "/content/ModelCrowd-master/Vis2019/0000031_00000_d_0000037.jpg"
img = mpimg.imread(img_path)
plt.imshow(img)

enter image description here

# preprocess image
img = tf.keras.preprocessing.image.load_img(img_path, target_size=(128, 128))
x = tf.keras.preprocessing.image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x /= 255.0    
pred = model.predict(x)
print(pred)
output = model.output[0]
last_conv_layer = model.get_layer('conv2d_1')

grads = K.gradients(output, last_conv_layer.output)[0]
pooled_grads = K.mean(grads, axis=(0, 1, 2))
iterate = K.function([model.input], [pooled_grads, last_conv_layer.output[0]])
pooled_grads_value, conv_layer_output_value = iterate([x])

for i in range(64):
   conv_layer_output_value[:, :, i] *= pooled_grads_value[i]

# show heatmap
heatmap = np.mean(conv_layer_output_value, axis=-1)
heatmap = np.maximum(heatmap, 0)
heatmap = (heatmap - np.min(heatmap)) / (np.max(heatmap) - np.min(heatmap))
#print(heatmap)
#print(len(heatmap))

#heatmap /= np.max(heatmap)
plt.matshow(heatmap)

enter image description here

# save heatmap
img = cv2.imread(img_path)

heatmap2 = cv2.resize(heatmap, (img.shape[1], img.shape[0]))
heatmap2 = np.uint8(255 * heatmap2)
cmap=cv2.COLORMAP_JET
heatmap_cmap = cv2.applyColorMap(heatmap2*255, cmap)

cv2.imwrite("/content/heatmap.jpg", heatmap_cmap)

enter image description here

Я хотел бы убрать "синий" цвет на заднем плане ... Я хотел бы получить оригинал изображение в качестве фона и наложение карты плотности на этом.

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