基于keras的神经网络特征图可视化

本文介绍如何使用Keras框架实现神经网络中间层特征图的可视化,并提供了详细的代码实例。通过对YOLOv3模型的特定层输出进行可视化,有助于理解模型的工作原理。
部署运行你感兴趣的模型镜像
# coding: utf-8
import time

import cv2
import numpy as np
from PIL import Image

from yolact import YOLACT
from keras.models import Model
import cv2
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers.convolutional import Convolution2D, MaxPooling2D
from keras.layers import Activation
from pylab import *
from utils.utils import (get_classes, get_coco_label_map,
                         show_config)
from keras import backend as K
from nets.yolact import get_train_model, yolact





def get_row_col(num_pic):
    squr = num_pic ** 0.5
    row = round(squr)
    col = row + 1 if squr - row > 0 else row
    return row, col


def visualize_feature_map(img_batch):
    feature_map = np.squeeze(img_batch, axis=0)
    print(feature_map.shape)

    feature_map_combination = []
    plt.figure()

    # num_pic = feature_map.shape[2]# 标记2
    num_pic =10
    print('num_pic', num_pic)
    row, col = get_row_col(num_pic)

    for i in range(0, num_pic):
        feature_map_split = feature_map[:, :, i]  # 标记3
        feature_map_combination.append(feature_map_split)
        plt.subplot(row, col, i + 1)
        plt.imshow(feature_map_split)
        axis('off')
        title('feature_map_{}'.format(i))

    # plt.savefig('feature_map.png')
    plt.show()

    # 各个特征图按1:1 叠加
    feature_map_sum = sum(ele for ele in feature_map_combination)
    plt.imshow(feature_map_sum)
    # plt.savefig("feature_map_sum.png")




if __name__ == "__main__":

    img = cv2.imread('./img/0.jpg')
    input_shape = [544, 544]
    img=cv2.resize(img,(544,544))
    plt.imshow(img)
    classes_path = 'model_data/shape_classes.txt'
    class_names, num_classes = get_classes(classes_path)
    num_classes = num_classes + 1
    model_body = yolact([input_shape[0], input_shape[1], 3], num_classes, train_mode=True)
    model_body.summary()



    model = Model(inputs=model_body.input, outputs=model_body.get_layer(name="proto_net.proto2.2").output)  # 标记0

    print('img ', img.shape)
    img_batch = np.expand_dims(img, axis=0)
    print('img_batch', img_batch.shape)
    conv_img = model.predict(img_batch)  # conv_img 卷积结果
    print('conv_img.shape', conv_img.shape)

    visualize_feature_map(conv_img)

通过model.summary可以获得各个层的名字,通过名字进行索引。可以将每一层的特征图进行输出

在此由衷感谢,特此记录,有啥不懂的欢迎讨论(4条消息) keras如何可视化 模型预测时的 中间 特征图,网络模型如何可视化中间层特征图以及如何打印网络结构_EvaJason的博客-优快云博客

您可能感兴趣的与本文相关的镜像

Yolo-v5

Yolo-v5

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习模型,广泛应用于图像识别、语音识别和自然语言处理等领域。在训练CNN时,网络会自动学习到图像的特征,这些特征可以帮助我们更好地理解图像,并且可以可视化出来。 在Keras中,我们可以使用`model.layers`属性来获取CNN的每一层。其中,卷积层和池化层通常会提取出图像的特征,全连接层则会将这些特征映射到具体的分类。 我们可以通过以下步骤来可视化CNN的特征提取过程: 1. 加载CNN模型,并选择需要可视化的卷积层或池化层。 2. 加载需要进行特征提取的图像,并对其进行预处理。 3. 使用`K.function`方法来获取所选层的输出结果。 4. 将输出结果可视化出来。 下面是一个简单的示例代码,可供参考: ```python import numpy as np import matplotlib.pyplot as plt from keras.models import load_model from keras.preprocessing import image from keras import backend as K # 加载模型 model = load_model('my_model.h5') # 选择需要可视化的层 layer_name = 'conv2d_1' layer = model.get_layer(name=layer_name) # 加载图像并进行预处理 img_path = 'my_image.jpg' img = image.load_img(img_path, target_size=(224, 224)) x = image.img_to_array(img) x = np.expand_dims(x, axis=0) x = preprocess_input(x) # 获取所选层的输出结果 get_activations = K.function([model.input, K.learning_phase()], [layer.output]) activations = get_activations([x, 0])[0] # 可视化结果 plt.imshow(activations[0, :, :, 0], cmap='gray') ``` 在上面的示例代码中,我们可视化了模型中名为`conv2d_1`的卷积层的输出结果。我们加载了一张图像,并将其输入到模型中,然后使用`K.function`方法获取该卷积层的输出结果。最后,我们使用`plt.imshow`方法将第一个特征图可视化出来。 通过这种方法,我们可以更好地理解CNN是如何对图像进行特征提取的,并且可以帮助我们更好地优化模型的性能。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰虺

万水千山总是情,给点打赏行不行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值