当前位置: 首页 > article >正文

打卡第47天

作业:对比不同卷积层热图可视化的结果

核心差异总结
  1. 浅层卷积层(如第 1-3 层)

    • 关注细节:聚焦输入图像的边缘、纹理、颜色块等基础特征(例:猫脸的胡须边缘、树叶的脉络)。
    • 热图特点:区域小而分散,高激活区域多为局部细节,分辨率接近原图。
  2. 中层卷积层(如第 4-6 层)

    • 关注局部组合:提取形状、部件组合等中级特征(例:猫的耳朵轮廓、椅子的椅腿结构)。
    • 热图特点:区域稍大,激活区域开始整合局部信息,分辨率略降低。
  3. 深层卷积层(如第 7 层及以上)

    • 关注全局语义:聚焦目标整体、类别核心特征(例:整只猫的轮廓、“椅子” 的整体结构)。
    • 热图特点:区域更大且集中,高激活区域覆盖目标主体,分辨率较低但语义更明确。
import torch
import torch.nn as nn
import torchvision.models as models
import torchvision.transforms as transforms
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np# 加载预训练VGG16(仅取卷积层,去掉全连接)
model = models.vgg16(pretrained=True).features.eval()  # .features包含44层卷积+池化
# 图像预处理(适配VGG输入要求)
transform = transforms.Compose([transforms.Resize((224, 224)),  # 调整尺寸transforms.ToTensor(),  # 转Tensortransforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])  # 标准化
])def generate_heatmap(image_path, layer_indices):# 读取图像并预处理img = Image.open(image_path).convert('RGB')input_tensor = transform(img).unsqueeze(0)  # 增加batch维度 [1, 3, 224, 224]# 注册各层钩子,获取特征图features = {}def hook(module, input, output):features[module.__class__.__name__ + str(layer_idx)] = output.detach()  # 保存特征图heatmaps = []for layer_idx in layer_indices:# 注册当前层钩子handle = model[layer_idx].register_forward_hook(hook)# 前向传播_ = model(input_tensor)handle.remove()  # 移除钩子,避免重复注册# 提取特征图并生成热图feat_map = features[model[layer_idx].__class__.__name__ + str(layer_idx)]feat_map = feat_map.squeeze(0).cpu().numpy()  # 维度:[C, H, W]# 对通道维度求平均(简单可视化,也可取最大激活通道)heatmap = np.mean(feat_map, axis=0)# 归一化到0-1heatmap = (heatmap - heatmap.min()) / (heatmap.max() - heatmap.min() + 1e-8)heatmaps.append(heatmap)return heatmaps# 图层索引(VGG16的卷积层索引:0, 2, 5, 7, 10, 12, 14, 17, 19, 21, 24, 26, 28, 31, 33, 35)
layer_indices = [0, 10, 20]  # 浅层(第1卷积层)、中层(第10层)、深层(第20层)
image_path = "test_image.jpg"  # 替换为你的图片路径# 生成热图
heatmaps = generate_heatmap(image_path, layer_indices)# 可视化对比
plt.figure(figsize=(12, 8))
for i, heatmap in enumerate(heatmaps):plt.subplot(1, 3, i+1)plt.imshow(heatmap, cmap='jet')plt.title(f"Layer {layer_indices[i]}")plt.axis('off')
plt.show()

 @浙大疏锦行

http://www.lryc.cn/news/2403984.html

相关文章:

  • 从上下文学习和微调看语言模型的泛化:一项对照研究
  • 智慧城市建设方案
  • phosphobot开源程序是控制您的 SO-100 和 SO-101 机器人并训练 VLA AI 机器人开源模型
  • pygame开发的坦克大战
  • C++2025.6.7 C++五级考题
  • 【原神 × 二叉树】角色天赋树、任务分支和圣遗物强化路径的算法秘密!
  • 功能安全实战系列09-英飞凌TC3xx LBIST开发详解
  • 一个完整的日志收集方案:Elasticsearch + Logstash + Kibana+Filebeat (二)
  • RT-Thread内核组成——内核移植
  • Docker_Desktop开启k8s
  • MS2691 全频段、多模导航、射频低噪声放大器芯片,应用于导航仪 双频测量仪
  • 基于Java(SpringBoot、Mybatis、SpringMvc)+MySQL实现(Web)小二结账系统
  • Java泛型中的通配符详解
  • Java方法引用深度解析:从匿名内部类到函数式编程的演进
  • 三维GIS开发cesium智慧地铁教程(4)城市白模加载与样式控制
  • 越狱蒸馏-可再生安全基准测试
  • 64、js 中require和import有何区别?
  • 手机号段数据库与网络安全应用
  • Kafka 入门指南与一键部署
  • MATLAB实战:视觉伺服控制实现方案
  • Oracle正则表达式学习
  • 校招 java 面试基础题目及解析
  • # STM32F103 SD卡读写程序
  • Spring中循环依赖问题的解决机制总结
  • 青少年编程与数学 01-011 系统软件简介 04 Linux操作系统
  • 微软PowerBI考试 PL300-使用适用于 Power BI 的 Copilot 创建交互式报表
  • 损坏的RAID5 第十六次CCF-CSP计算机软件能力认证
  • Android USB 通信开发
  • Prompt提示工程指南#Kontext图像到图像
  • 产品经理课程(十一)