CNN可视化技术总结(二)--卷积核可视化

简介: 上篇文章我们介绍了特征图可视化方法,对于特征图可视化的方法(或者说原理)比较容易理解,即把feature map从特征空间通过反卷积网络映射回像素空间。 那卷积核怎样可视化呢,基于什么原理来可视化?卷积核的尺寸一般只有3x3, 5x5大小,如何可视化?本文将介绍这个两个内容。

卷积核可视化的原理


卷积核,在网络中起到将图像从像素空间映射到特征空间的作用,可认为是一个映射函数,像素空间中的值经过卷积核后得到响应值,在特征提取网络中,基本都是使用最大池化来选择最大响应值进入下一层继续卷积,其余响应值低的都进入待定。也就是说,我们认定只有响应值大的才会对最终的识别任务起作用。

 

根据这个思路,给定一个已经训练好的网络,现在想要可视化某一层的某一个卷积核,我们随机初始化生成一张图(指的是对像素值随机取值,不是数据集中随机选一张图),然后经过前向传播到该层,我们希望这个随机生成的图在经过这一层卷积核时,它的响应值能尽可能的大,换句话说,响应值比较大的图像是这个卷积核比较认可的,是与识别任务更相关的。然后不断调整图像像素值,直到响应值足够大,我们就可以认为此时的图像就是这个卷积核所认可的,从而达到可视化该卷积核的目的。

 

理解了它的原理后,它的实现方法就比较简单了,设计一个损失函数,即以经过该层卷积核后的响应值为目标函数,使用梯度上升,更新像素值,使响应值最大。

 

实现代码


Setup

import numpy as np
import tensorflow as tf
from tensorflow import keras
# The dimensions of our input image
img_width = 180
img_height = 180
# Our target layer: we will visualize the filters from this layer.
# See `model.summary()` for list of layer names, if you want to change this.
layer_name = "conv3_block4_out"

Build a feature extraction model

# Build a ResNet50V2 model loaded with pre-trained ImageNet weights
model = keras.applications.ResNet50V2(weights="imagenet", include_top=False)
# Set up a model that returns the activation values for our target layerlayer = model.get_layer(name=layer_name)
feature_extractor = keras.Model(inputs=model.inputs, outputs=layer.output)

Set up the gradient ascent process


   loss函数取最大化指定卷积核的响应值的平均值,为了避免边界的影响,边界的响应值不计。

def compute_loss(input_image, filter_index):
    activation = feature_extractor(input_image)
    # We avoid border artifacts by only involving non-border pixels in the loss.
    filter_activation = activation[:, 2:-2, 2:-2, filter_index]
    return tf.reduce_mean(filter_activation)
@tf.function
def gradient_ascent_step(img, filter_index, learning_rate):
    with tf.GradientTape() as tape:
        tape.watch(img)
        loss = compute_loss(img, filter_index)
    # Compute gradients.
    grads = tape.gradient(loss, img)
    # Normalize gradients.
    grads = tf.math.l2_normalize(grads)
    img += learning_rate * grads
    return loss, img

Set up the end-to-end filter visualization loop

def initialize_image():
    # We start from a gray image with some random noise
    img = tf.random.uniform((1, img_width, img_height, 3))
    # ResNet50V2 expects inputs in the range [-1, +1].
    # Here we scale our random inputs to [-0.125, +0.125]
    return (img - 0.5) * 0.25
def visualize_filter(filter_index):
    # We run gradient ascent for 20 steps
    iterations = 30
    learning_rate = 10.0
    img = initialize_image()
    for iteration in range(iterations):
        loss, img = gradient_ascent_step(img, filter_index, learning_rate)
    # Decode the resulting input image
    img = deprocess_image(img[0].numpy())
    return loss, img
def deprocess_image(img):
    # Normalize array: center on 0., ensure variance is 0.15
    img -= img.mean()
    img /= img.std() + 1e-5
    img *= 0.15
    # Center crop
    img = img[25:-25, 25:-25, :]
    # Clip to [0, 1]
    img += 0.5
    img = np.clip(img, 0, 1)
    # Convert to RGB array
    img *= 255
    img = np.clip(img, 0, 255).astype("uint8")
    return img

可视化效果图


可视化vgg16卷积核

44d556a774a251dca9deb40d05176645.png

d33a26fac446a06451d58919d017fd35.png

4750a4cd4f26ee4c55b44bbb62857e14.png

7ef915be017e5f0365a61790c18c339a.png

dbe5b819bc63f00f45af4ac6b2e1ac1a.png

总结:本节内容介绍了一种可视化卷积核的方法,即通过生成指定卷积核响应值尽可能大的图像来达到可视化卷积核的目的,使用的方法是梯度上升。

 

   在不少论文的末尾都有可视化卷积核来分析提出的模型,该方法值得了解。

 

   下一篇我们将介绍最常用的可视化方法--CAM系列,其作用是给出图像中对类别识别起作用的区域的热力图。

相关文章
|
7月前
|
机器学习/深度学习 算法 TensorFlow
文本分类识别Python+卷积神经网络算法+TensorFlow模型训练+Django可视化界面
文本分类识别Python+卷积神经网络算法+TensorFlow模型训练+Django可视化界面
125 0
文本分类识别Python+卷积神经网络算法+TensorFlow模型训练+Django可视化界面
|
4月前
|
机器学习/深度学习 网络安全 TensorFlow
探索操作系统的心脏:内核与用户空间的奥秘云计算与网络安全:技术挑战与未来趋势深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【8月更文挑战第29天】在数字世界的每一次点击与滑动背后,都隐藏着一个不为人知的故事。这个故事关于操作系统——计算机的灵魂,它如何协调硬件与软件,管理资源,并确保一切运行得井井有条。本文将带你走进操作系统的核心,揭示内核与用户空间的秘密,展现它们如何共同编织出我们日常数字生活的底层结构。通过深入浅出的讲解和代码示例,我们将一同解锁操作系统的神秘面纱,理解其对现代计算的重要性。 【8月更文挑战第29天】本文将深入探讨卷积神经网络(CNN)的基本原理和结构,以及它们如何被广泛应用于图像识别任务中。我们将通过代码示例来展示如何使用Python和TensorFlow库构建一个简单的CNN模型,并训练
|
7月前
|
机器学习/深度学习 数据可视化 数据挖掘
R语言深度学习卷积神经网络 (CNN)对 CIFAR 图像进行分类:训练与结果评估可视化
R语言深度学习卷积神经网络 (CNN)对 CIFAR 图像进行分类:训练与结果评估可视化
|
7月前
|
机器学习/深度学习 自然语言处理 大数据
深度学习中的卷积神经网络优化技术探析
【2月更文挑战第4天】在深度学习领域,卷积神经网络(CNN)一直扮演着重要角色,但其训练和推理过程中存在许多挑战。本文将从优化角度出发,探讨卷积神经网络中的权重初始化、损失函数设计、学习率调整等优化技术,旨在为深度学习爱好者提供一些实用的技术感悟和分享。
97 3
|
机器学习/深度学习 数据可视化 网络架构
CAM, Grad-CAM, Grad-CAM++可视化CNN方式的代码实现和对比
当使用神经网络时,我们可以通过它的准确性来评估模型的性能,但是当涉及到计算机视觉问题时,不仅要有最好的准确性,还要有可解释性和对哪些特征/数据点有助于做出决策的理解。模型专注于正确的特征比模型的准确性更重要。
273 0
|
机器学习/深度学习 人工智能 数据可视化
人工智能创新挑战赛:助力精准气象和海洋预测Baseline[2]:数据探索性分析(温度风场可视化)、CNN+LSTM模型建模
人工智能创新挑战赛:助力精准气象和海洋预测Baseline[2]:数据探索性分析(温度风场可视化)、CNN+LSTM模型建模
人工智能创新挑战赛:助力精准气象和海洋预测Baseline[2]:数据探索性分析(温度风场可视化)、CNN+LSTM模型建模
|
机器学习/深度学习 编解码 数据可视化
【计算机视觉】CNN 可视化算法 CAM & Grad-CAM
CAM 算法是论文《Learning Deep Features for Discriminative Localization》中提出的,作者发现 CNN 网络虽然在训练时可能未提供对象的位置,但是仍然具有很强的定位特征能力。 《Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization》论文提出的 Grad-CAM 算法,Grad-CAM 利用网络反向传播的梯度计算出 feature map 每一个通道的权重从而得到热力图。因此 Grad-CAM 可以直接用于各种 CNN 网络而无需重新训
|
机器学习/深度学习 存储 数据可视化
可视化CNN和特征图
卷积神经网络(cnn)是一种神经网络,通常用于图像分类、目标检测和其他计算机视觉任务。CNN的关键组件之一是特征图,它是通过对图像应用卷积滤波器生成的输入图像的表示。
167 0
可视化CNN和特征图
|
机器学习/深度学习 人工智能 算法
目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN 之 RCNN
这篇文章的内容总结翻译自 A Step-by-Step Introduction to the Basic Object Detection Algorithms (Part 1) ,文中有加入自己的理解。
141 1
|
机器学习/深度学习 人工智能 算法
目标检测技术演进:Fast R-CNN、Faster R-CNN
我讲了 RCNN 算法,似乎它的表现不太好,所以这次我们讲讲它的进化版 —— Fast RCNN 和 Faster RCNN
146 1
目标检测技术演进:Fast R-CNN、Faster R-CNN

热门文章

最新文章