计算机视觉CS231n学习(7)
可视化和理解
这里主要是对CNN中间的层的结果可视化
-
滤波器可视化
直接可视化网络各层的滤波器权重,高层滤波器的可视化结果趣味性较低,而底层滤波器通常对应边缘、纹理等基础视觉特征
(“高层滤波器” 通常指的是网络中靠后的卷积层所包含的滤波器)
-
最后一层特征分析
提取最后一层全连接层的高维特征向量,通过近邻搜索找到特征空间中相似的图像,比像素空间的近邻搜索更符合语义相似性。
利用主成分分析PCA 或 t-SNE等降维算法,将高维特征向量映射到二维空间,可视化特征分布,直观展示不同类别的聚类情况
-
激活值可视化
将卷积层的特征图可视化为灰度图像,观察神经元对输入图像的响应,通过最大激活补丁方法(Maximally Activating Patches),筛选出能最大程度激活特定通道的图像补丁,理解该通道关注的视觉模式
-
遮挡实验与显著性图
-
遮挡实验 Occlusion Experiments
通过遮挡图像的不同区域,绘制分类概率的热力图,判断哪些区域对分类结果影响最大(比如遮挡小猪头部会显著降低猪类别的概率)
-
显著性图 Saliency Maps
作用:判断哪些像素对分类重要
计算类别得分相对于图像像素的梯度,取绝对值后在RGB通道上取最大值,以及结合GrabCut进行无监督分割,得到对分类起关键作用的像素区域(比如狗类别的显著性图集中在狗的轮廓区域)
-
-
反向传播Backprop 与梯度上升Gradient Ascent
-
引导反向传播
通过限制ReLU层仅反向传播正梯度,生成更清晰的中间神经元响应图像,展示神经元关注的图像区域
就是通过引导反向传播可视化中间特征,即选择单个中间神经元并计算其值对图像像素的梯度
-
梯度上升
步骤:初始化图像、前向计算分数、反向传播求梯度、更新图像
通过优化生成合成图像,最大化特定神经元或类别得分(加入L2正则化等约束使图像更自然)
还可以使用更好的正则化方法(如高斯模糊、裁剪小值像素等)
-
基于神经网络可视化一些相关的应用
-
欺骗性图像 / 对抗样本 Fooling Images / Adversarial Examples
生成步骤:从任意图像出发,选择类别,修改图像最大化类别,至网络被欺骗
通过修小修改图像(人眼难以察觉),使网络误分类(比如将大象误分类为小狗),揭示网络对细微扰动的敏感性
-
DeepDream
通过放大网络某层的神经元激活值,迭代优化图像,生成具有梦幻风格的图像(比如将星空图像转化为充满眼睛和纹理的抽象图案)。
核心是通过梯度上升最大化层激活(指让CNN中特定层的神经元激活值尽可能增大,在CNN中,当输入图像经过各层的卷积和池化等操作时,每一层的神经元会根据输入产生相应的输出值,这些输出值就是神经元的激活值)的平方和,过程中使用图像抖动、梯度归一化等技巧增强效果。
-
特征反演 Feature Inversion 与纹理合成 Texture Synthesis
-
特征反演
给定图像的CNN特征向量,重建出与之匹配且自然的图像,通过总变差(Total Variation)正则化保证图像平滑
-
纹理合成
-
近邻方法:生成像素时复制输入中最近邻的邻域
-
Gram矩阵法
步骤:预训练CNN、计算输入纹理各层激活和Gram矩阵、从随机噪声初始化生成图像、计算损失并反向传播更新
利用Gram矩阵(衡量特征通道间的共现关系),从随机噪声生成与输入纹理相似的大尺寸图像,不同层的Gram矩阵对应不同尺度的纹理特征
-
-
-
神经风格迁移 Neural Style Transfer
-
原理
结合内容图像的特征(通过特征重建损失)和风格图像的Gram矩阵(通过风格损失),生成兼具内容与风格的图像
-
快速风格迁移
训练前馈神经网络实现实时风格迁移,通过感知损失替代传统损失函数,并使用实例归一化(Instance Normalization)提升效果
(前馈神经网络(Feedforward Neural Network,FNN)是一种最基本的神经网络结构,属于深度学习中的一种模型。它的特点是信息从输入层逐层向前传播,经过隐藏层(如果有的话),最终到达输出层,且在传播过程中没有反馈或循环。)
-
生成式模型
-
无监督学习 监督学习对比
-
监督学习:数据为(x,y),(x为数据,y为标签),目标是学习x到y的映射函数
示例:分类、回归、目标检测、语义分割、图像描述等
-
无监督学习:数据仅为x(无标签),目标是学习数据的潜在结构
示例:聚类、降维、特征学习、密度估计等
(K-means聚类、主成分分析(PCA,降维)、自编码器(特征学习,通过编码器和解码器重建输入))
-
监督学习和无监督学习的核心差异:是否依赖标签(无监督学习不依赖标签)
-
-
生成模型
-
定义:给定训练数据,生成与训练数据同分布的新样本(训练数据服从P_data(x),生成样本服从P_model(x))
-
目标:是使P_model(x)接近P_data(x)
-
类型:
显式密度估计(明确定义P_model(x))(强调模型能够“说清概率”,模型会直接给出概率分布的数学表达式,能够计算任意样本x的概率值P_model(x))
隐式密度估计(仅能从P_model(x)采样,不明确定义)(强调模型能够“产出样本”,模型不提供P_model(x)的数学表达式,无法直接计算样本x的概率,但能通过模型生成符合该分布的样本)
-
应用:生成艺术作品、超分辨率、时间序列模拟等
-
模型:
主要讲解三种主流模型:PixelRNN/CNN、VAE、GAN
-
-
PixelRNN/CNN(显式)
- 基于全可见信念网络,用链式法则将图像概率分解为像素的条件概率乘积
- PixelRNN:用LSTM建模像素间依赖,从角落开始生成像素,生成速度慢
- PixelCNN:用CNN建模上下文区域依赖,训练可并行(更快),但生成仍需顺序进行
- 可计算显式概率p(x),样本质量好,但顺序生成效率低
- 改进方法:门控卷积层、残差连接等(PixelCNN++)
-
变分自编码器(VAE)(显式)
- 自编码器:自编码器通过编码器-解码器重建输入,用于特征学习
- VAE原理:引入概率视角,假设数据由潜在变量z生成,通过编码器
近似后验分布,优化似然下界(含重建损失和KL散度) - 训练:最大化下界,使生成样本接近训练数据,潜在分布接近先验(如高斯分布)
- 生成过程:从先验采样z,通过解码器生成x
- 优点:原理严谨,潜在表示可解释
- 缺点:样本较模糊,优化下界而非精确似然
-
生成对抗网络(GAN)(隐式)
-
原理:生成器G从噪声生成样本,判别器D区分真实与生成样本,二者构成博弈(G视图欺骗D,D试图准确区分)
-
训练:交替优化D(梯度上升)和G(梯度下降,最大化D的误判概率)
- 为什么使使用梯度上升方法来优化D?
- 判别器(D)的目标是最大化对 “真实样本判为真、生成样本判为假” 的概率,判别器的核心任务是学习一个函数,输出样本为真实数据的概率(范围在 0 到 1 之间)。训练时,对于真实样本,希望判别器输出尽可能接近 1;对于生成器生成的假样本,希望输出尽可能接近 0。这种 “最大化正确分类概率” 的目标,在数学上对应最大化判别器的损失函数(如交叉熵损失),而梯度上升正是用于最大化函数值的优化方法 —— 通过计算损失函数对判别器参数的梯度,沿着梯度方向更新参数,使损失函数值不断增大,从而提升判别器的区分能力
- 生成器(G)的目标是最小化判别器的区分能力(即最大化判别器的误判概率),因此使用梯度下降来优化 —— 沿着损失函数梯度的反方向更新参数,使生成的样本更难被判别器识破
-
卷积架构:生成器用反卷积,判别器用卷积,遵循DCGAN设计准则
-
应用:
生成高质量图像,支持潜在空间插值(如“微笑女性 - 中性女性 + 中性男声 = 微笑男性”),应用于域迁移(如马 → 斑马)
-
优缺点:样本质量顶尖,但训练不稳定,无显式密度函数
-
-
三种生成模型对比:
PixelRNN/CNN:显式密度,似然优化,生成慢
VAE:下界优化,潜在表示有用,样本较模糊
GAN:博弈机制,样本最佳,训练复杂