CNNs:ZFNet之基于AlexNet特征可视化实验分析

news2024/12/24 8:33:37

CNNs:ZFNet之基于AlexNet特征可视化实验分析

  • 导言
  • 基于AlexNet网络的实验分析
    • 实验一:不同卷积层特征提取分析
    • 实验二:不同卷积层提取特征收敛分析
  • ZFNet网络介绍
  • 基于`ZFNet`网络的实验分析
    • 实验三:针对AlexNet特征提取改善可视化
    • 实验四:特征不变性实验分析
    • 实验五:局部遮挡敏感性分析
    • 实验六:局部相关性分析

导言

上一篇我们介绍了如何利用Deconvnet网络进行特征可视化操作,本篇我们将基于Deconvnet对文献中的相关实验进行分析,并验证一些结论。除此之外,我们还将针对实验现象对对AlexNet网络进行微调(ZFNet),并对网络进行简单介绍。然后基于ZFNet进行实验分析。

基于AlexNet网络的实验分析

实验一:不同卷积层特征提取分析

实验条件:

  • 模型数据集:ImageNet 2010 training set(1.0 million images, spread over 1000 different classes)
  • 模型AlexNet
  • 下图中,在2-5层是在验证数据集中的特征图中抽取前9个最大激活所对应的图片和喂到Deconvnet中得到的像素空间的特征。

在这里插入图片描述
第一层卷积:是极高和极低的频率信息的混合,几乎不覆盖中频(边缘信息+颜色信息)
在这里插入图片描述

在这里插入图片描述

第二层卷积:比第一层卷积提取出来的信息更加抽象,但仍主要是由边缘信息和颜色信息组成。

随着层数的增加,提取出来的特征越来越偏向“语义特征”。
在这里插入图片描述
在这里插入图片描述

第五层中右上角的一组图像中,看似几乎没有共同特征,但网络却学习到了背景草地的特征。

实验二:不同卷积层提取特征收敛分析

  • 基于AlexNet

在训练过程中特征演。下图中,展示了给定特征图的最强激活投影到像素空间中的特征。注意:色彩对比度认为的增强了,为了突出显示特征
在这里插入图片描述
可以从上图中发现,随着层数的增加,卷积层提取的特征更加偏向语义特征,且提取出来的语义特征需要更大的epoch才能提取出来;模型的底层网络在epoch很小便可以收敛。

下图为基于AlexNet网络在第一层卷积层核第二层卷积层提取特征后进行特征可视化的结果。可以从图(a)中看到实验中出现了无明显特征的特征图,在图(b)中可以看到明显的混乱网格的现象。其中“混乱网格”的出现是由于在使用卷积核对上一输入进行卷积时,步长过大造成的。所以针对此实验现象,文章提出了基于AlexNet的改进网络ZFNet
在这里插入图片描述

ZFNet网络介绍

在这里插入图片描述
针对AlexNet的实验现象,文章针对ImageNet数据集对AlexNet进行了微调,可以有效解决混乱网格和dead特征。

首先,让我们先看一下ZFNet的网络结构:

import torch
import torch.nn as nn
from collections import OrderedDict
from torchsummary import summary

class ZFNet(nn.Module):
    def __init__(self, class_num = 5):
        super(ZFNet, self).__init__()
        self.features = nn.Sequential(
            # input[3, 224, 224]  output[96, 110, 110]
            nn.Conv2d(3, 96, kernel_size=7, stride=2, padding=1),
            nn.ReLU(inplace=True),
            # output[96, 55, 55]
            nn.MaxPool2d(kernel_size=3, stride=2, padding=1, return_indices=True),

            # output[256, 26, 26]
            nn.Conv2d(96, 256, kernel_size=5, stride=2),
            nn.ReLU(inplace=True),
            # output[256, 13, 13]
            nn.MaxPool2d(kernel_size=3, stride=2, padding=1, return_indices=True),

            # output[384, 13, 13]
            nn.Conv2d(256, 384, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            # output[384, 13, 13]
            nn.Conv2d(384, 384, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            # output[256, 13, 13]
            nn.Conv2d(384, 256, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            # output[256, 6, 6]
            nn.MaxPool2d(kernel_size=3, stride=2, return_indices=True),
        )

        self.classifier = nn.Sequential(
            nn.Linear(256 * 6 * 6, 4096),
            nn.ReLU(inplace=True),
            nn.Dropout(p=0.5),
            nn.Linear(4096, 4096),
            nn.ReLU(inplace=True),
            nn.Linear(4096, class_num),
        )

        # index of conv
        self.conv_layer_indices = [0, 3, 6, 8, 10]

        # feature maps
        self.feature_maps = OrderedDict()
        # switch
        self.pool_locs = OrderedDict()

    def forward(self, x):
        for idx, layer in enumerate(self.features):
            if isinstance(layer, nn.MaxPool2d):
                x, location = layer(x)
                self.pool_locs[idx] = location
                self.feature_maps[idx] = x
            else:
                x = layer(x)
                self.feature_maps[idx] = x
        
        x = torch.flatten(x, start_dim=1)
        x = self.classifier(x)
        return x


if __name__ == "__main__":
    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
    model = ZFNet().to(device)
    summary(model, (3, 224, 224))

本节对网络细节不再展开叙述,其网络结构与AlexNet基本一致,仅仅修改了一些卷积参数,具体网络分析,请参考AlexNet网络介绍。这里我们使用torchsummary对网络参数和结构进行打印。

==========================================================================================
Layer (type:depth-idx)                   Output Shape              Param #
==========================================================================================
├─Sequential: 1                          []                        --
|    └─Conv2d: 2-1                       [-1, 96, 110, 110]        14,208
|    └─ReLU: 2-2                         [-1, 96, 110, 110]        --
|    └─MaxPool2d: 2-3                    [-1, 96, 55, 55]          --
|    └─Conv2d: 2-4                       [-1, 256, 26, 26]         614,656
|    └─ReLU: 2-5                         [-1, 256, 26, 26]         --
|    └─MaxPool2d: 2-6                    [-1, 256, 13, 13]         --
|    └─Conv2d: 2-7                       [-1, 384, 13, 13]         885,120
|    └─ReLU: 2-8                         [-1, 384, 13, 13]         --
|    └─Conv2d: 2-9                       [-1, 384, 13, 13]         1,327,488
|    └─ReLU: 2-10                        [-1, 384, 13, 13]         --
|    └─Conv2d: 2-11                      [-1, 256, 13, 13]         884,992
|    └─ReLU: 2-12                        [-1, 256, 13, 13]         --
|    └─MaxPool2d: 2-13                   [-1, 256, 6, 6]           --
├─Sequential: 1-1                        [-1, 5]                   --
|    └─Linear: 2-14                      [-1, 4096]                37,752,832
|    └─ReLU: 2-15                        [-1, 4096]                --
|    └─Dropout: 2-16                     [-1, 4096]                --
|    └─Linear: 2-17                      [-1, 4096]                16,781,312
|    └─ReLU: 2-18                        [-1, 4096]                --
|    └─Linear: 2-19                      [-1, 5]                   20,485
==========================================================================================      
Total params: 58,281,093
Trainable params: 58,281,093
Non-trainable params: 0
Total mult-adds (G): 1.22
==========================================================================================      
Input size (MB): 0.57
Forward/backward pass size (MB): 11.57
Params size (MB): 222.32
Estimated Total Size (MB): 234.46
==========================================================================================

基于ZFNet网络的实验分析

实验三:针对AlexNet特征提取改善可视化

将网络修改完后,仍然对同一数据集进行最大激活的特征可视化。可以看到ZFNet可以有效的改善dead特征和混乱网格特征。
在这里插入图片描述
在这里插入图片描述

实验四:特征不变性实验分析

文章中通过对割草机、西施犬、非洲鳄鱼、鹦鹉和娱乐中心进行平移、缩放和旋转分别对第一层卷积层和第七层对原始图像的特征向量计算欧式距离以及显示变换后网络对正确类别对应的概率。

在这里插入图片描述
结论:

  • a2、b2、c2表明第一层卷积层稍微对图像做物理上的修改,修改后的feature map和原始的feature map之间的欧式距离会急剧增大。
  • 竖直平移和缩放导致变化后的feature map与原始的feature map 之间的欧式距离变化呈线性且变化很小而非急剧变化,旋转变换的欧式距离变换也十分小,说明以上的变化对网络深层影响很小(网络越深,越倾向提取语义信息)

实验五:局部遮挡敏感性分析

通过对不同的狗的同一部位进行遮挡,以及随机遮挡分析网络对识别准确率的影响。由表所示,对不同的的狗遮挡同一部位,其激活在第五层和第七层的相对变化较小,而随机遮挡的激活变化会增大。
在这里插入图片描述
这揭示了网络使用并非使用的关键局部信息进行分类,而是使用了周围的信息进行分类。

实验六:局部相关性分析

本实验通过对同一物体的不同部位进行遮挡实验,以分析局部信息对物体识别的影响。

下图中:

  • 第一列是原图遮挡示意图
  • 第二列是灰色方块在不同位置遮挡生成的feature map叠加求和结果(强度图)
  • 第三列是不经遮挡的原图喂到网络,找到第五层激活最大的feature map,将其用反卷积的方法重构到原始像素空间
  • 第四列是遮挡不同不问,识别出来正确类别的概率
  • 第五列是遮挡不同部位,识别出来的列别
    在这里插入图片描述
    通过第三列我们可以看到,当我们遮挡住了物体主要特征部分,如狗的脸,车的轮胎以及狗本身时,识别出来的正确的概率会大大降低。

当然,这里有一些问题:

  • 为什么在原图中遮挡了左上角,在feature map中左上角能体现出来?
    在卷积神经网络中,feature map保留了部分spatial信息

  • 为什么在第五层网络提取出来脸,但是网络最后提取的ground truth是阿富汗猎犬?
    网络不仅仅使用激活最大的feature map,它是综合了所有的feature map

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/567107.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HW之轻量级内网资产探测漏洞扫描工具

简介 RGPScan是一款支持弱口令爆破的内网资产探测漏洞扫描工具,集成了Xray与Nuclei的Poc 工具定位 内网资产探测、通用漏洞扫描、弱口令爆破、端口转发、内网穿透、SOCK5 主机[IP&域名]存活检测,支持PING/ICMP模式 端口[IP&域名]服务扫描 网…

腾讯云图形验证码申请流程

目录 一、官方指引二、操作步骤1.步骤1:新建验证,获取验证码密钥2.步骤2:客户端接入验证码,展示验证页面3.步骤3:服务端接入验证码,调用票据校验 API 进行二次校验 一、官方指引 https://cloud.tencent.co…

为什么mac插入了u盘没反应 苹果mac插上usb后怎么找到

U盘使用简单,便于携带,几乎每个mac用户都有一个u盘。使用新的u盘的时候,你有没有遇到过mac插入了u盘没反应的情况呢?如果你是初次接触Mac电脑,使用u盘可能会手足无措,因为Mac系统和Windows存在差异&#xf…

苹果 App Store 出现山寨ChatGPT;Anthropic宣布获得4.5亿美元C轮融资

🚀 中国互联网协会提醒公众警惕“AI换脸”的新骗局 中国互联网协会提醒公众警惕“AI换脸”的新骗局,不法分子利用AI技术通过声音合成、伪造面部表情等实施诈骗。 公众应加强个人信息安全与防范措施,如加强个人信息保护、防止信息泄露、安装…

BLE连接通信

// BLE连接有关的技术分析 前言 本文的论述流程: 将传统的连接通信与广播进行对比,指出其不足说明BLE是如何制定规范解决这些问题写出完整的连接通信流程,并对能影响BLE连接通信的参数进行分析 1 连接通信的不足 保持连接是一个相当消耗…

代码随想录算法训练营15期 Day 2 | 977.有序数组的平方 、209.长度最小的子数组 、59.螺旋矩阵II 、总结

977.有序数组的平方 题目建议&#xff1a; 本题关键在于理解双指针思想 题目链接&#xff1a;力扣 思路一&#xff1a;暴力解算&#xff0c;直接将所有元素变成一个平方&#xff0c;然后进行排序。 class Solution { public:vector<int> sortedSquares(vector<int&g…

maven常用插件详解

官网讲解&#xff1a;https://maven.apache.org/plugins/ Maven 实际上是一个依赖插件执行的框架&#xff0c;它执行的每个任务实际上都由插件完成的。Maven 的核心发布包&#xff08;jar&#xff09;中并不包含任何 Maven 插件&#xff0c;它们以独立构件的形式存在&#xff…

数据翻译的代码辅助插件,一个注解搞定,减少30%SQL代码量

一、开源项目简介 Easy Trans是一款用于做数据翻译的代码辅助插件&#xff0c;利用MyBatis Plus/JPA/BeetlSQL 等ORM框架的能力自动查表&#xff0c;让开发者可以快速的把ID/字典码 翻译为前端需要展示的数据。 二、开源协议 使用Apache-2.0开源协议 三、界面展示 四、功能概…

CTF入门指南

何为CTF &#xff1f; CTF&#xff08;Capture The Flag&#xff09;夺旗比赛&#xff0c;在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会&#xff0c;以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。…

文档关键信息提取形成知识图谱:基于NLP算法提取文本内容的关键信息生成信息图谱教程及码源(含pyltp安装使用教程)

文档关键信息提取形成知识图谱&#xff1a;基于NLP算法提取文本内容的关键信息生成信息图谱&#xff08;含pyltp安装使用教程&#xff09; 1. 项目介绍 目标&#xff1a;输入一篇文档&#xff0c;将文档进行关键信息提取&#xff0c;进行结构化&#xff0c;并最终组织成图谱组…

Cisco® Catalyst® 8000V 边缘软件 (Catalyst 8000V) 17.11.1a 发布 - 虚拟路由器

Cisco Catalyst 8000v Edge Software, IOS XE Release Dublin-17.11.1a ED 请访问原文链接&#xff1a;https://sysin.org/blog/cisco-catalyst-8000v/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org Cisco Catalyst 8000V 边…

Spark集群的运行基本流程是怎样的?

Spark集群的运行架构 Spark是基于内存计算的大数据并行计算框架&#xff0c;比MapReduce计算框架具有更高的实时性&#xff0c;同时具有高效容错性和可伸缩性&#xff0c;在学习Spark操作之前&#xff0c;首先介绍Spark运行架构&#xff0c;如图所示。 在上图中&#xff0c;Sp…

asp网站Repuest获取Http网络读卡器刷卡数据Response回应驱动读卡器显示响声

RFID网络WIFI无线TCP/UDP/HTTP可编程二次开发读卡器POE供电语音-淘宝网 (taobao.com) 中文液晶显示http协议网络读卡器是一款能利用现有的计算机网络&#xff0c;不需要独立布线就可以组成一个高性能低成本实时联网ID卡管理系统的端终设备&#xff0c;刷卡后即时向远程计算机传…

快递业的最新发展趋势:2023年市场预测

快递业是随着电子商务崛起而迅速发展的行业之一。自从互联网取代了线下商业模式&#xff0c;电子商务的发展成为了现代零售业的主要趋势&#xff0c;而快递业则变得越来越重要和不可或缺。未来的快递业需要应对许多挑战和机遇。 在2023年&#xff0c;快递业将进一步走向数字化、…

淘宝商品分类详情API接口

淘宝商品分类详情API接口&#xff0c;是指淘宝开放平台提供的接口&#xff0c;用于获取淘宝商品分类的详细信息&#xff0c;包括分类ID、分类名称、父级分类ID、子分类ID等。 具体使用方法如下&#xff1a; 获取淘宝开放平台的API请求地址和appkey等必要信息&#xff1b; 调用…

云南省地矿测绘院1:500地形免像控项目分享

无人机航测系统的出现&#xff0c;将测绘项目时间由“年”缩短到“月”&#xff0c;但布设相控仍然是一个麻烦而辛苦的工作。尤其是在野外人力难以到达的地方&#xff0c;相控布设更是占据项目时间的绝大部分&#xff0c;野外复杂多变的环境也给作业人员带来很多危险。 所以&a…

数据结构第四天: Complete Binary Search Tree 【搜索二叉树,完全二叉树】

二叉搜索树 bst 被递归地定义为具有以下属性的二叉树节点的左子树仅包含键小于节点键的节点 a 的右子树节点只包含键大于或等于节点键的节点 左右子树也必须是二叉搜索树 完全二叉树cbt是一棵完全充满可能异常的树从左到右填充的底层现在给定一系列不同的非负整数键&#xff0c…

5.25黄金是延续下跌还是强势反弹?今日如何布局

近期有哪些消息面影响黄金走势&#xff1f;今日黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a;周四(5月25日)亚市盘中&#xff0c;现报1957.89美元/盎司&#xff0c;昨日最高触及1985.28美元/盎司&#xff0c;最低触及1956.68美元/盎司。周三公布的会议纪要显示…

web自动化测试进阶篇03 ———自动化并发测试应用

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;【Austin_zhai】 &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xff0c;分享行业相关最新信息。…

选择小程序第三方开发框架时,需要考虑哪些因素?

在选择小程序第三方开发框架时&#xff0c;我们需要综合考虑开发者技术栈、项目需求和目标平台等因素。Taro 是一个多端统一开发框架&#xff0c;适合需要覆盖多个平台的开发者&#xff0c;最终的选择应该基于个人的技术背景和项目需求&#xff0c;同时也要关注框架的稳定性、社…