heatmap_python,用来判断不同层网络的注意力权重

import cv2
import numpy as np
import scipy.misc


# feature:numpy array; 从网络的forward过程当中保存下来的feature map
# row_image:numpy array; 3*224*224
# output_jpg_name: eg. "out.jpg"


feature = cv2.imread('hdr_output_case4.png')
row_image = cv2.imread('hdr_output_case4.png')
row_image = cv2.resize(row_image,(224,224))
output_jpg_name =  "out.jpg"
data = feature
heatmap = data.sum(0) / data.shape[0]
heatmap = np.maximum(heatmap, 0)
heatmap /= np.max(heatmap)
heatmap = 1.0 - heatmap  # 也可以不写,就是蓝色红色互换的作用
heatmap = cv2.resize(heatmap, (224, 224))  # (224,224)指的是图像的size,需要resize到原图大小
heatmap = np.uint8(255 * heatmap)
heatmap = cv2.applyColorMap(heatmap, cv2.COLORMAP_JET)
row = row_image
#row = row.transpose(1, 2, 0)
superimposed_img = heatmap * 1.0 + row * 0.1  # 1.0 和 0.5代表heatmap和row image的强度占比,可调整
scipy.misc.imsave(output_jpg_name, superimposed_img)

row_image是原始图,feature是不同网络层输出的特征图,上述代码只是为了测试,实际使用时应该直接送入feature特征图的像素。

下图是heatmap结果。上述代码需要根据自己实际去微微调整一下。

 下面代码是我实际用的时候加入到模型里的,很容易懂,自己分析吧。。。

feature = full_mask
row_image = cv2.imread('data/test_out/22-006-col.png')
row_image = cv2.resize(row_image, (512, 512))
output_jpg_name = "./out.png"
data = feature
heatmap = data.sum(0) / data.shape[0]
heatmap = np.maximum(heatmap, 0)
heatmap /= np.max(heatmap)
heatmap = 1.0 - heatmap  # 也可以不写,就是蓝色红色互换的作用
heatmap = cv2.resize(heatmap, (512, 512))  # (224,224)指的是图像的size,需要resize到原图大小
heatmap = np.uint8(255 * heatmap)
heatmap = cv2.applyColorMap(heatmap, cv2.COLORMAP_JET)
row = row_image
# row = row.transpose(1, 2, 0)
superimposed_img = heatmap * 1.0 + row * 0.7  # 1.0 和 0.5代表heatmap和row image的强度占比,可调整
#scipy.misc.imsave(output_jpg_name, superimposed_img)
cv2.imwrite(output_jpg_name,superimposed_img)

猜你喜欢

转载自blog.csdn.net/qq_40962125/article/details/130058194