机器学习 每个CNN层的输出/激活的视觉表示
卷积神经网络通过其复杂的多层架构,提供了如何模拟人类视觉处理的重要见解。本文将带您通过每个层的功能进行创造性的探索,并提供它们输出或激活的视觉表示。随着研究人员不断揭开卷积神经网络内部更深层次的理解,我们离解开这些未来机器所展示的复杂智能背后的奥秘越来越近。在本文中,我们将踏上一个迷人的旅程,通过卷积神经网络的层来揭示这些非凡机器是如何工作的。
输出的视觉表示
- 输入层 – 一切的起点
输入层以原始形式接收视觉信息,例如以像素值编码颜色和纹理细节的图像或视频帧。该层充当了后续层绘制越来越抽象表示的画布。
- 卷积层 – 从基本形状到复杂特征
在这些早期阶段,一组卷积层负责在不同尺度和方向上进行特征检测。它们通过在输入图像的局部区域应用小型滤波器来实现这一点,自动学习边缘或纹理等特别模式。
视觉表示:想象一下观察来自于一个旨在检测对角边缘的滤波器的激活情况,我们可能会看到在原始图像的不同部分上,有高激活对应于对角线不同角度的区域。
- 激活函数 – 注入非线性
在每个层中的每个卷积运算之后都会使用激活函数(例如ReLU)。这些函数将非线性行为注入到卷积神经网络中,使其能够有效地建模检测到的特征之间的复杂关系。
视觉表示:应用ReLU激活后,检查激活的像素可以揭示在变化反映前后比较的基础上,我们的特征映射的哪些部分根据变化在积极地提供有价值的信息。
- 池化层 – 降采样同时保留关键细节
池化操作在缩小空间尺寸的同时保留了在前面卷积过程中学到的关键信息。常用的池化技术包括最大池化(在局部邻域内保留最高激活值)和平均池化。
视觉表示:显示池化区域的输出可以证明它们能够独立于像素位置精确或不相关的背景噪声,聚焦于重要的特征。
- 全连接层 – 理解更高级别的概念
这些层将前面卷积阶段提取的特征集成到更高级别的表示中,并实现全面的分类或预测。
视觉表示:通过检查这些密集连接层中的激活,我们可以洞察特定对象或概念如何被编码为跨多个特征映射的模式,并对最终的输出预测贡献。
Grad-CAM方法
Grad-CAM技术通过使用给定CNN层内的梯度信息来找到重要的区域。在CNN层中,首先提供输入图像,并且它对某些类别预测最为重要,然后提供更局部化的可视化。
步骤
第一步: 使用Keras和vis软件包在Python中实现了Grad-CAM算法。
第二步: 设置目标类索引,并加载预训练的ResNet50模型,并使用来自ImageNet数据集的权重。
第三步: 然后使用Grad-CAM技术为所需类索引创建热力图可视化,然后将其叠加在原始图片上。
第四步: 最后显示叠加的图片。
示例
#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的多层架构,其中每个层从原始输入数据中提取逐渐复杂的特征,是其有效性的关键因素。