from keras import backend as K
from keras.models import load_model
from matplotlib import pyplot as plt
import cv2
import numpy as np
from keras_retinanet import models
import math
def main():
#装载训练好的模型,这里是使用keras_retinanet工程编写的load_model函数,实际上也是调用了keras.models import load_model方法
model = models.load_model('G:/model/resnet50_csv_03_2019-05-24-1345.h5',backbone_name='resnet50')
#读取图片
images=cv2.imread("transformer_97.jpg")
cv2.imshow("Image", images)
#扩展图像的维度
image_arr = np.expand_dims(images, axis=0)
# 第一个参数,表示模型的输入层,[model.layers[0].input]表示输入数据;
# 第二个参数,表示模型的输出层,可根据需要提取模型相应的中间层作为输出层,如[model.layers[2].output]表示获取中间层第2层作为输出层
# 注意,layer_n实际上是一个函数
layer_n = K.function([model.layers[0].input], [model.layers[200].output])
#通过输入端输入数据,获取模型的输出结果
f1 = layer_n([image_arr])[0]
# 根据模型输出层的特征数,遍历输出层的所有特征图像(通常输出层是多通道的,不能直接显示出来)
row_col = math.floor(f1.shape[3] ** 0.5)
for _ in range(row_col*row_col):
show_img = f1[:, :, :, _]
print(f1.shape)
feature_shape=show_img.shape
#再次调整特征图像的维度,调整为2维特征
show_img.shape = [feature_shape[1], feature_shape[2]]
#根据特征数目计算显示的格子个数
plt.subplot(row_col, row_col, _ + 1)
#将图像投影到plt画布上
plt.imshow(show_img)
#关闭坐标
plt.axis('off')
plt.show()
if __name__ == '__main__':
main()