每个CNN层输出/激活的可视化表示
简介
卷积神经网络凭借其复杂的多分层架构,在模拟类人视觉处理方面提供了非凡的见解。本文带您踏上了一段创意之旅,探索每一层的函数,并在此过程中提供了其输出或激活的可视化表示。随着研究人员不断深入了解 CNN,我们正朝着揭开这些未来机器所展现的复杂智能之谜迈进。在本文中,我们将踏上一次迷人的旅程,深入探索 CNN 的各层,以揭示这些非凡机器的工作原理。
输出的可视化表示
输入层 - 一切的开始输入层以其原始形式接收视觉信息,例如图像或视频帧,其中像素值编码颜色和纹理细节。该层就像一块画布,后续层在其上绘制越来越抽象的表示。
卷积层 - 从基本形状到复杂特征
在这些早期阶段,存在一组卷积层,负责以不同的尺度和方向检测特征。它们通过在输入图像的局部区域应用小型滤波器来实现这一点,自动学习独特的模式,如边缘或纹理。
可视化表示:想象一下观察一个旨在检测对角线边缘的滤波器的激活;我们可能会看到高激活区域对应于原始图像各个部分的对角线上不同角度。
激活函数 - 注入非线性
在每一层内的每个卷积运算之后,都会有一个激活函数(例如,ReLU)。这些函数将非线性行为注入 CNN,使它们能够有效地建模检测到的特征之间的复杂关系。
可视化表示:在应用 ReLU 激活后检查激活像素可以阐明我们的特征图的哪些部分基于前后比较中反映的变化积极地贡献有价值的信息。
池化层 - 降采样同时保留基本细节
池化操作减少空间维度,同时保留在之前的卷积中学习的关键信息。常用的池化技术包括最大池化,它保留局部邻域内的最高激活,以及平均池化。
可视化表示:可视化池化区域的输出演示了它们能够独立于精确的像素位置或不相关的背景噪声来关注重要特征的能力。
全连接层 - 理解更高级别的概念
这些层将从之前的卷积阶段提取的特征整合到更高级别的表示中,并能够进行全面的分类或预测。
可视化表示:通过检查这些密集连接层中的激活,我们可以深入了解特定对象或概念是如何作为跨多个特征图的模式编码的,这些特征图有助于最终的输出预测。
Grad-CAM 方法
Grad-CAM 技术旨在通过使用给定 CNN 层内的梯度信息来查找重要区域。在 CNN 层中,首先给出输入图像,它对某些类别的预测贡献最大,然后提供更局部的可视化。
算法
步骤 1:Grad-CAM 算法使用 Keras 和 vis 包在 Python 中实现。
步骤 2:设置目标类别索引,并加载一个预训练的 ResNet50 模型,其权重来自 ImageNet 数据集。
步骤 3:然后使用 Grad-CAM 技术为所需的类别索引创建热图可视化,然后将其叠加到原始图像上。
步骤 4:最后一张图像(叠加图像)显示出来。
示例
#importing the required modules from keras.applications.resnet50 import ResNet50, preprocess_input, decode_predictions from vis.visualization import visualize_cam # Loading the pre-trained ResNet50 model with weights trained on ImageNet dataset. model = ResNet50(weights='imagenet') # Defining target class index (e.g., 630 corresponds to "Donut" class). class_index = 630 cam_map = visualize_cam(model=model, layer_idx=-1, filter_indices=class_index, seed_input=img, penultimate_layer_idx=get_penultimate_layer_id(model)) heat_map = np.uint8(cm.jet(cam_map)[..., :3] * 255) superimposed_img=overlay(cam_img_path='path_to_original_image', cam_heatmap=heat_map) plt.imshow(superimposed_img)
输入图像需要保存在本地机器上,并且路径可以在代码中给出。
热图可视化的输出图像
结论
激活最大化 (AM) 技术旨在查找最大化给定 CNN 层内特定神经元激活的图像。通过使用梯度上升方法迭代地优化此目标函数,我们可以生成强烈激活神经元的信息量丰富的图像。CNN 的多分层架构,其中每一层从原始输入数据中提取越来越复杂的特征,是其有效性的关键因素。