万字长文解读深度学习——卷积神经网络CNN

推荐阅读:
卷积神经网络(CNN)详细介绍及其原理详解
CNN笔记:通俗理解卷积神经网络

文章目录

  • 🌺深度学习面试八股汇总🌺
  • 主要组件
    • 输入层
    • 卷积层 (Convolutional Layer)
    • 批归一化层(Batch Normalization, BN)
    • 激活函数 (Activation Function)
    • 池化层 (Pooling Layer)
    • 全连接层 (Fully Connected Layer)
    • 批归一化层(Batch Normalization, BN)
    • 输出层激活函数 (Output Layer Activation Function)
    • 输出层 (Output Layer)
  • 整体流程概述
  • 激活函数
    • 使用激活函数的位置
      • 卷积层后
      • 全连接层后
      • 输出层
    • 不使用激活函数的层
      • 池化层 (Pooling Layer)
      • 批归一化层 (Batch Normalization Layer)
    • 总结
  • 卷积层的基本参数
    • 卷积核 (Filter/Kernel)
    • 步长 (Stride)
    • 填充 (Padding)
    • 深度 (Depth)
    • 公式化表示卷积操作输出特征图的尺寸
    • 如何理解卷积层的“深度”
    • 卷积核为什么是3x3、5x5等奇数乘积的?
      • 1. 中心点明确
      • 2. 便于填充和保持尺寸
      • 3. 计算对称性与稳定性
      • 总结
    • 减少卷积层参数量的方法
      • 参数共享机制
      • 使用更小的卷积核
      • 深度可分离卷积 (Depthwise Separable Convolution)
      • 减少网络层数
      • 剪枝 (Pruning)
      • 量化 (Quantization)
  • 深度可分离卷积
      • 1. 标准卷积的计算成本
      • 2. 深度可分离卷积的分解
      • 3. 计算量和参数量的减少
      • 4. 优点与局限性
      • 5. 应用场景
      • 总结
  • 全连接层和卷积层的区别
  • 二维卷积、三维卷积、1x1 卷积的作用
  • 1x1 卷积的作用
    • 降维和升维
    • 跨通道的信息交互
    • 加入非线性
    • 特征重组
  • 池化层的原理
      • 常见的池化方法
      • 自适应池化 (Adaptive Pooling)
      • 混合池化 (Mixed Pooling)
        • 无池化替代
  • 感受野的理解
  • CNN中防止过拟合的方法
  • CNN中的降维和升维
    • 降维(下采样)
    • 升维(上采样)
      • 1x1 卷积
      • 通过插值进行上采样
        • 1. 最近邻插值(Nearest Neighbor Interpolation)
        • 2. 双线性插值(Bilinear Interpolation)
        • 3. 双三次插值(Bicubic Interpolation)
        • 4. Lanczos插值
        • 5. 最近中心插值(Nearest Center Interpolation)
        • 总结
      • 转置卷积(反卷积)
      • 反池化(Unpooling)
      • 拉普拉斯金字塔(Laplacian Pyramid)
      • 插值+卷积的组合
      • 总结
      • 拉普拉斯金字塔在 CNN 中上采样的实现步骤
        • 1. 构建高斯金字塔
        • 2. 构建拉普拉斯金字塔
        • 3. 上采样低分辨率图像
        • 4. 融合高频细节
        • 5. 逐层迭代
        • 6. 生成高分辨率输出
      • 棋盘效应
  • CNN的平移不变性
      • 原因
      • 简单理解
  • 批量、学习率和过拟合关系

🌺深度学习面试八股汇总🌺

卷积神经网络 (CNN) 是一种专门用于处理图像、视频等数据的深度学习模型,主要用于计算机视觉任务,例如图像分类、目标检测和图像生成。CNN 通过卷积操作减少输入数据的尺寸,** 提取出重要特征,同时保留其空间结构** ,尤其在处理高维数据时非常有效。

主要组件

输入层

输入层用于接收原始数据,例如图像(二维或三维张量)。对于图像,通常是像素值。

卷积层 (Convolutional Layer)

卷积层是 CNN 的核心组件,负责通过卷积核 (filter) 提取输入数据的局部特征 。通过扫描输入的局部区域,卷积层可以识别特定的模式(例如边缘、角等)。卷积操作通常会产生一组特征图

批归一化层(Batch Normalization, BN)

归一化使训练过程更加稳定和高效。BN 层将激活值标准化为均值为 0、标准差为 1 的分布,然后通过可学习的缩放平移参数恢复数据分布。防止梯度消失和梯度爆炸问题。加速训练,允许使用更大的学习率。在一定程度上起到正则化作用,减少过拟合

参考【归一化部分】:深度学习——优化算法、激活函数、归一化、正则化

激活函数 (Activation Function)

常见的激活函数是ReLU 及其变体(如 Leaky ReLU、PReLU 和 ELU)。其他函数如 Swish 也逐渐流行(SD模型组件中GSC中的S指的就是Swish)。Sigmoid 和 Tanh 因梯度消失问题较严重,不适合深层 CNN 网络,因此使用较少。

池化层 (Pooling Layer)

池化层用于缩减数据的尺寸,同时保留主要特征。最大池化(Max Pooling)是最常用的方式,它通过取每个区域内的最大值来减少数据量。这有助于减小计算量,并增强模型的平移不变性。

全连接层 (Fully Connected Layer)

全连接层是CNN 的特征整合部分,将高维特征压缩并组合,最终生成一个用于输出处理的向量连接到输出层。通常在 CNN 的最后几层用于将提取到的特征映射到最终的分类或回归结果

批归一化层(Batch Normalization, BN)

输出层激活函数 (Output Layer Activation Function)

  • 二分类问题:输出层通常输出一个经过 sigmoid 函数 处理的值,该值表示预测属于某个类别的概率,范围在 0 到 1 之间。

  • 多分类问题:输出层通常使用 softmax 函数,将全连接层的输出向量转换为概率分布,表示样本属于不同类别的概率。概率的总和为 1。

  • 回归任务:输出层直接输出一个或多个实数,表示模型的预测值。回归任务的输出层通常不使用激活函数,或者使用线性激活函数,允许输出为任意实数。

输出层 (Output Layer)

输出层的作用是生成最终的预测结果


整体流程概述

  1. 输入层:输入图像数据,可能是灰度或彩色图像。
  2. 卷积层:通过卷积核提取局部特征。
  3. 批归一化(可选):对每一批次进行归一化,防止梯度爆炸或消失,加速训练。
  4. 激活函数:如 ReLU 引入非线性。
  5. 池化层:对特征图进行下采样,降低特征图尺寸,减少计算复杂度。
  6. 重复卷积~池化层:逐层提取更高层次的特征。
  7. 全连接层:将高层特征映射到输出空间,通常用于分类任务。
  8. 批归一化(可选):对每一批次进行归一化,防止梯度爆炸或消失,加速训练。
  9. 激活函数:如 ReLU 引入非线性。
  10. 丢弃层(可选):随机丢弃部分神经元,防止过拟合。
  11. 输出层:输出最终的预测结果,常用于分类或回归任务。
  12. 损失函数:衡量模型输出与真实值之间的差距。
  13. 反向传播和优化:更新模型权重,使损失函数最小化。

通过这一系列的操作,CNN 能够逐层提取图像的特征,最终输出图像的分类或回归结果。

激活函数

激活函数 (Activation Function) 通常应用在 卷积层全连接层 后面。作用是引入非线性,使模型能够学习和表示更复杂的特征。下面是激活函数在 CNN 不同层中的应用情况:

使用激活函数的位置

卷积层后

  • 在每次卷积操作之后,通常会应用激活函数(如 ReLU),以对卷积输出进行非线性变换。
  • 卷积操作本身是线性的,即卷积核和输入的乘法与加法,所以如果没有激活函数,整个模型仍然是线性的,无法处理复杂的非线性问题。因此,激活函数是卷积神经网络中的重要组成部分,它使网络具有表达复杂模式的能力

全连接层后

  • 全连接层通常在 CNN 的最后几层出现。类似卷积层,全连接层之后也需要应用激活函数,以引入非线性。
  • 激活函数可以帮助全连接层进行分类或回归任务的特征表示。常见的做法是在每个全连接层之后使用 ReLU 激活函数,除了最后的输出层。

输出层

  • 分类任务:对于多分类任务,输出层通常使用 softmax 作为激活函数,将输出转化为概率分布。对于二分类任务,输出层可以使用 sigmoid 激活函数,将输出限制在 0 和 1 之间。
  • 回归任务:如果是回归问题,输出层可能不使用激活函数,或者使用线性激活函数。

常见的激活函数

  • ReLU (Rectified Linear Unit): 最常用的激活函数,公式为 ( f(x) = \max(0, x) ),使负数归零,仅保留正数。
  • Sigmoid: 常用于二分类输出层,将输出值压缩到 ( [0, 1] ) 区间。
  • Tanh: 输出值在 ( [-1, 1] ) 之间,用于在特定任务中提供更强的梯度。
  • Softmax: 用于多分类任务的输出层,将输出值转化为概率分布,总和为 1。

不使用激活函数的层

激活函数主要应用于 卷积层 和 全连接层后,池化层和批归一化层不使用激活函数。下面是各层是否使用激活函数的详细情况:

池化层 (Pooling Layer)

  • 池化层的主要作用是通过下采样(如最大池化或平均池化)减少卷积层特征图的尺寸和计算量,同时保留主要的特征。池化层的操作本身是固定的,因为它的功能只是下采样特征图,保持特征的局部不变性。

批归一化层 (Batch Normalization Layer)

批归一化的作用是对每一批次的输入进行归一化,以加速训练和提高稳定性。它通过标准化激活值(使得激活值的均值为 0,标准差为 1)和加入可学习的缩放平移参数来调整数据分布。批归一化本身不引入非线性,但通常在激活函数之后使用

总结

激活函数主要应用在 卷积层全连接层之后,它们的作用是引入非线性,从而帮助 CNN 模型学习更加复杂的特征和模式。在最后的输出层,根据任务类型,可能会使用特定的激活函数,如 softmax 或 sigmoid。而像池化层和批归一化层这样的层次,通常不会使用激活函数。


卷积层的基本参数

卷积层的几个关键参数:

卷积核 (Filter/Kernel)

卷积核是一个小的矩阵,用于扫描输入数据的局部区域。卷积核的尺寸决定了每次处理局部区域大小,常见的卷积核尺寸为 3x35x5 等。

步长 (Stride)

步长决定了卷积核在输入数据上每次移动的步长。如果步长为 1,卷积核每次移动 1 个像素。较大的步长会减少输出特征图的尺寸

填充 (Padding)

填充用于控制卷积操作后输出尺寸。可以选择在输入数据的边缘填充额外的像素 。常见的填充方式有两种:

1.“valid” 填充:无填充,输出尺寸变小,适合逐步减少特征图尺寸。
2. “same” 填充:填充边缘,保持输出尺寸与输入尺寸相同,适合需要保持尺寸不变的场景。
3. 部分填充:在这种情况下,只填充一部分(少于 “same” 填充所需的数量),因此输出尺寸会比输入尺寸小。

深度 (Depth)

卷积层的深度是指卷积核的数量。每个卷积核提取输入数据的不同特征,因此深度越大,提取的特征越多。卷积层的深度对应于输出特征图的数量

公式化表示卷积操作输出特征图的尺寸

在这里插入图片描述

如何理解卷积层的“深度”

卷积层的“深度” = 卷积核的数量 = 特征图的数量。每个卷积核都会在输入数据上执行卷积操作,提取特定的特征,并生成一个特征图。如果卷积层包含多个卷积核,则输出的特征图将会堆叠,形成一个更深的张量。例如,如果输入是一个 RGB 图像(3 个通道),并且使用 32 个卷积核,那么输出将是 32 个特征图,即输出张量的深度为 32。

卷积核为什么是3x3、5x5等奇数乘积的?

卷积核通常设计为 3x35x5奇数大小,主要是因为以下几个关键原因:

1. 中心点明确

  • 奇数大小的卷积核有一个明确的中心点,例如 3x3 卷积核的中心像素是第 2 行第 2 列的元素。

  • 中心对称:有了中心点后,卷积核可以对称地滑动在输入特征图上,确保计算过程在各个方向上是均匀的

    使用偶数大小的卷积核(如 2x2 或 4x4)就没有一个明确的中心点,导致卷积操作在滑动时无法保持对称,增加了复杂性。

2. 便于填充和保持尺寸

  • **填充(padding)**是常见的操作,用于保持卷积后的输出特征图的尺寸与输入特征图相同。使用奇数大小的卷积核时,填充是对称的,保持计算简单。

    • 例如,3x3卷积核的填充为 1(即在四周各填充 1 行或 1 列),能够保证输出特征图的大小与输入图像相同。
  • 如果卷积核是偶数大小(如 2x2 或 4x4 ),填充过程就会变得不对称,增加了处理的复杂度。

举个例子:

  • 3x3 卷积核:假设输入是 (5 \times 5) 的图像,我们需要在四周各填充 1 行或 1 列,最终输出也是 (5 \times 5) 的图像,填充是对称的。
  • 2x2 卷积核:假设输入是 (5 \times 5) 的图像,保持输出大小相同时,可能需要在上面和左边填充 0 行或列,而在下面和右边填充 1 行或列。填充不对称,处理更复杂。

3. 计算对称性与稳定性

  • 奇数大小的卷积核确保计算对称,处理边缘时也更简单和稳定。而偶数大小的卷积核在滑动时,容易导致边缘计算不对称,影响卷积效果。

总结

虽然卷积核可以是偶数大小,但奇数大小更加有利,具有明确的中心点、对称性更好、便于填充和保持输出尺寸,因此被广泛应用于 CNN 中。

减少卷积层参数量的方法

CNN 中参数量的减少是关键问题,特别是在资源有限的设备上进行推理时。以下是几种常用的方法来减少卷积层的参数量:

参数共享机制

同一组卷积核权重在输入图像的不同位置上重复使用来提取特征,这个机制是通过卷积核的滑动窗口机制来实现的。是空间不变性的重要因素。

  • 卷积核中的权重是共享的,这意味着在卷积操作中相同的卷积核会在输入特征图的不同位置重复使用。参数共享大大减少了所需的参数量。

使用更小的卷积核

  • **较小的卷积核(如 3x3)**在提取局部特征时效率较高。与大卷积核相比,使用多个小卷积核能够减少参数量并提高模型的表达能力。

深度可分离卷积 (Depthwise Separable Convolution)

  • 通过将标准卷积分为 深度卷积 (Depthwise Convolution)逐点卷积 (Pointwise Convolution, 1x1卷积),极大地减少参数量。这种方法被广泛用于 MobileNet 等轻量级网络中。

在标准卷积中:卷积核会同时对所有输入通道进行卷积操作
深度可分离卷积中:先在每个输入通道上单独进行卷积(Depthwise Convolution),然后使用 1×1 卷积(Pointwise Convolution) 将每个通道的结果组合在一起,实现跨通道的特征融合。
参考下面的详细解释

减少网络层数

  • 虽然更深的网络通常具有更强的表达能力,但在某些任务中,可以通过减少网络层数或合并冗余层来降低参数量。

剪枝 (Pruning)

  • 剪枝技术通过删除不重要或贡献较小的神经元或卷积核,减少模型的复杂度和参数量。

量化 (Quantization)

  • 量化将 32 位浮点数转换为 8 位甚至更低的位宽,从而减少模型的存储需求和计算复杂度。

深度可分离卷积

在标准卷积中:卷积核会同时对所有输入通道进行卷积操作
深度可分离卷积中:先在每个输入通道上单独进行卷积(Depthwise Convolution),然后使用 1×1 卷积(Pointwise Convolution) 将每个通道的结果组合在一起,实现跨通道的特征融合

深度可分离卷积(Depthwise Separable Convolution) 是卷积神经网络(CNN)中的一种高效卷积操作,用来显著减少计算量和参数量。它通过将标准卷积分解为**深度卷积(Depthwise Convolution)点卷积(Pointwise Convolution, 1x1 卷积)**两步操作,从而降低复杂度,同时尽可能保持模型的表达能力。

1. 标准卷积的计算成本

在这里插入图片描述

2. 深度可分离卷积的分解

在这里插入图片描述

3. 计算量和参数量的减少

通过这两步分解,深度可分离卷积显著降低了计算量和参数量。
在这里插入图片描述
在这里插入图片描述

4. 优点与局限性

在这里插入图片描述

5. 应用场景

  • 轻量级神经网络架构:深度可分离卷积广泛应用于移动端和嵌入式设备上的神经网络架构中,比如 MobileNetShuffleNetEfficientNet,这些网络的设计目标是减少计算和内存占用,同时尽可能保持性能。

  • 实时应用:由于其计算效率高,深度可分离卷积常用于实时应用中,如视频处理、图像分类、目标检测等任务。

总结

深度可分离卷积通过将标准卷积分解为深度卷积点卷积两步操作,大大减少了计算量和参数量,尤其在输入和输出通道数较大时,效果更加显著。尽管其表达能力可能不如标准卷积强,但在轻量级网络设计中,这种方法非常高效且广泛使用,特别适用于资源受限的设备和场景。

全连接层和卷积层的区别

全连接层与卷积层的区别在于连接方式、参数量和对空间信息的处理。

  1. 连接方式

    • 全连接层所有输入与输出神经元相互连接。输入层的所有元素都直接参与到每个输出神经元的计算中。
    • 卷积层局部连接。每个卷积核只与输入数据的一部分连接,这样可以利用局部模式的特性,减少参数量。
  2. 参数共享

    • 全连接层:每个连接都有独立的权重参数,导致参数量较大。
    • 卷积层:卷积核在整个输入数据上共享相同的权重参数,这大大减少了参数的数量。
  3. 空间信息保留

    • 全连接层:通常会打平输入数据(例如将图像展平成一维向量),这会丢失空间结构信息。
    • 卷积层保留输入数据的空间结构,通过扫描局部区域提取特征。

二维卷积、三维卷积、1x1 卷积的作用

二维卷积适用于图像,三维卷积用于视频或三维数据,1x1 卷积则常用于通道数的调整和非线性特征的映射。

  1. 二维卷积 (2D Convolution)
    二维卷积通常用于处理图像数据。对于一个 H \times W \times C 的输入张量(H 是高度,W 是宽度,C 是通道数),二维卷积操作会生成一组特征图,卷积核通常是二维矩阵(如 3x3 或 5x5)。二维卷积主要用于处理图像中的空间信息。

  2. 三维卷积 (3D Convolution)
    三维卷积通常用于视频数据或三维数据(如医学影像)。对于一个 H \times W \times D的输入张量(D 是深度或时间维度),三维卷积会使用三维卷积核提取空间和时间(或深度)特征。例如,在视频处理中,3D 卷积可以同时捕捉帧之间的动态信息和每个帧内的空间信息。

  3. 1x1 卷积 (Pointwise Convolution)
    1x1 卷积是一种特殊的卷积操作,卷积核的尺寸是 1x1。它并不改变输入的空间尺寸,而是用于改变输入的深度。例如,如果输入是一个 H \times W \times C 的张量,应用一个 1x1 卷积核就可以将深度从 C 转换为另一个维度。1x1 卷积通常用于减少通道数,进而减少计算量,同时也可以用于特征映射的非线性组合。

1x1 卷积的作用

1x1 卷积在卷积神经网络 (CNN) 中有几个非常重要的作用:

降维和升维

  • 1x1 卷积能够改变输入特征图的通道数,从而起到降维 (减少通道数)或升维(增加通道数)的作用。这对于降低计算量和模型参数,提升模型效率非常有帮助。

跨通道的信息交互

  • 1x1 卷积可以通过每个像素点在不同通道上的卷积操作,实现通道之间的信息融合和交互【例如深度可分离卷积】,从而增强特征表达能力。这个线性组合的过程可以表示为:

输出特征图的某个通道值 = 输入特征图的某个像素点的通道值1 * 卷积核权重1 + 输入特征图的某个像素点的通道值2 * 卷积核权重2 + … + 输入特征图的某个像素点的通道值C * 卷积核权重C

加入非线性

  • 1x1 卷积通常与非线性激活函数(如ReLU)结合,推动模型学习到更复杂的非线性特征。

特征重组

作为网络的构建块,1x1 卷积可以重新组织特征,使得特征更适合接下来的处理步骤。

例如在一些残差网络 (ResNet)中,1x1 卷积可以配合其它尺寸的卷积层完成特征的调整和组合。1x1 卷积常用于瓶颈结构中。瓶颈块通常先通过 1x1 卷积降维,减少通道数,接着通过 3x3 卷积提取空间特征,最后再通过 1x1 卷积升维,恢复通道数。


池化层的原理

池化层(Pooling Layer)用于减少输入数据的尺寸,同时保留其主要特征,通常位于卷积层之后。池化层有助于:

  • 减少特征图的尺寸,降低计算量:通过下采样减少特征图的尺寸,从而减少计算资源的消耗。
  • 提取主要特征,防止过拟合:通过减少参数和提取主要特征,防止模型对训练数据的过度拟合
  • 增强平移不变性:池化操作能够忽略输入数据中的微小变化

常见的池化方法

  • 最大池化 (Max Pooling):选择局部区域内的最大值。常用于提取重要特征。
  • 平均池化 (Average Pooling):计算局部区域内的平均值,较少使用,因为它可能导致特征平滑化。
  • 全局平均池化 (Global Average Pooling):对整个特征图进行平均池化,通常在最后的卷积层之后用于替代全连接层。

自适应池化 (Adaptive Pooling)

  • 自适应池化 是一种特殊的池化方式,它根据输出尺寸动态调整池化的窗口和步长。不同于固定窗口的最大池化,自适应池化可以根据需要调整输出的尺寸,特别适合处理不同大小的输入数据。

混合池化 (Mixed Pooling)

  • 混合池化 是将最大池化和平均池化结合起来的一种方式。通常是以某种比例(例如 50% 最大池化,50% 平均池化)来执行,目的是在特征提取和特征平滑之间找到平衡。
无池化替代
  • 无池化替代 是指在 CNN 中使用其他方法来替代传统的池化层。常见的替代方法有:
    • 卷积步长 (Strided Convolution):通过增加卷积层的步长来减少特征图的尺寸,而不是使用池化层。
    • 空间金字塔池化 (Spatial Pyramid Pooling, SPP):将输入数据划分为不同大小的窗口,并在每个窗口中进行池化操作,能处理不同尺寸的输入数据。
    • 特征金字塔网络 (Feature Pyramid Networks, FPN):通过不同层次的特征图来融合和传递信息,减少池化带来的损失。

感受野的理解

感受野 (Receptive Field) 是指在卷积神经网络中,某个神经元能够“看到”的输入图像区域。感受野描述了一个神经元受到多少输入数据的影响,或者说它可以“感知”到输入图像中的多大区域。

  • 卷积层和池化层的堆叠增大网络中神经元的感受野。随着卷积层和池化层的叠加,感受野逐渐扩大,即越靠近网络深处的神经元可以感知到更大范围的输入数据。
  • 较大的感受野捕捉全局信息和更抽象的特征,而较小的感受野提取局部特征,如边缘和角点

计算感受野时,可以通过分析每层卷积池化操作的步长和核大小来确定。
在这里插入图片描述


CNN中防止过拟合的方法

卷积神经网络 (CNN) 可能会因模型复杂度过高而导致对训练数据的过拟合。以下是常见的几种处理过拟合的策略:

  1. 数据增强 (Data Augmentation)

    • 数据增强通过对训练数据进行随机变换(如旋转、翻转、缩放、裁剪等)来增加数据的多样性,从而有效防止模型记住训练集中的特定模式。
  2. Dropout

    • Dropout 是一种正则化技术,它在训练过程中随机丢弃部分神经元及其连接,防止神经元间的共适应,增强模型的泛化能力。
  3. 正则化 (Regularization)

    • L2 正则化通过向损失函数中加入权重参数的平方和惩罚项,限制模型的权重过大,从而避免模型过拟合。
  4. 早停 (Early Stopping)

    • 在训练过程中监测模型在验证集上的性能,当验证集的损失不再降低时提前停止训练,从而避免模型对训练集过拟合。
  5. 使用更少的特征图 (Feature Maps)

    • 减少每层中提取的特征图数量可以降低模型复杂度,减少过拟合的风险。

CNN中的降维和升维

降维(下采样)

  1. 1x1卷积
  2. 卷积操作:通过增大步长去除填充(padding)来减少输入特征图的空间维度。
  3. 最大池化或平均池化:通过选取局部区域的最大值或平均值,进一步减少特征图的空间维度。
    卷积和下采样结合使用,可以逐步缩小特征图的空间维度,提取更高层次的特征,同时减少计算成本和参数数量。

升维(上采样)

1x1 卷积

  • 作用1x1 卷积并不会增加特征图的空间分辨率(即高度和宽度),但它能改变特征图的通道数。它常用于升维通道,而不是升高空间分辨率。
  • 应用:在像 ResNet 中,1x1 卷积用于调整特征图的通道数,增加模型表达能力。

通过插值进行上采样

  • 双线性插值:根据相邻四个像素的加权平均值生成新像素,能平滑地增加图像的空间分辨率。
  • 最近邻插值:直接复制最近的像素值,用于快速但简单的上采样,结果可能较为粗糙。
  • 作用:这些插值方法用于直接增加空间分辨率(宽度和高度),通常不会改变通道数。
  • 应用:常用于语义分割和图像重建任务,用于恢复输入图像的大小。

详细介绍如下:
插值方法是一种用于在已知数据点之间估计未知数据点的技术。在图像处理和生成任务中,插值方法通常用于上采样操作,即在Upsample组件中将低分辨率的图像扩大为高分辨率的图像。常用的插值方法有以下几种:

1. 最近邻插值(Nearest Neighbor Interpolation)
  • 原理:对每个插值点,选择离它最近的已知数据点作为插值结果。这种方法简单且计算速度快。
  • 优点:计算简单、速度快。
  • 缺点:可能导致图像出现块状效应,生成的图像不平滑。

示例:假设我们有一个2x2像素的低分辨率图像,要将它放大到4x4像素。最近邻插值会直接复制原始像素的值到周围的新像素:

  • 原始像素:[1, 2], [3, 4]
  • 放大后:[1, 1, 2, 2], [1, 1, 2, 2], [3, 3, 4, 4], [3, 3, 4, 4]
2. 双线性插值(Bilinear Interpolation)
  • 原理:双线性插值是一种线性插值方法,它在两个方向上进行插值(通常是水平和垂直方向)。首先对行方向插值,再对列方向插值,得到新像素的值。
  • 优点:生成的图像比最近邻插值更平滑。
  • 缺点:边缘可能变得模糊。

示例:假设我们有一个2x2像素的图像 [1, 2], [3, 4],当我们使用双线性插值放大时,插值像素的值将会是原始像素之间的加权平均值,结果会更平滑:

  • 原始像素:[1, 2], [3, 4]
  • 放大后可能得到:[1, 1.5, 2], [2, 2.5, 3], [3, 3.5, 4]
3. 双三次插值(Bicubic Interpolation)
  • 原理:双三次插值使用更复杂的三次多项式对周围16个像素进行加权插值。相比双线性插值,它考虑了更多的邻近像素,因此能够更好地保留图像的细节。
  • 优点:生成的图像更加平滑且细节保持得更好,适合处理高质量的图像缩放。
  • 缺点:计算复杂度高,速度较慢。

示例:双三次插值将利用原图像的多个像素点(通常是4x4区域)进行加权计算,生成更加平滑且细节丰富的放大图像。放大后的图像通常比双线性插值的结果更清晰,尤其在边缘和渐变区域。

4. Lanczos插值
  • 原理:Lanczos插值是一种基于sinc函数的插值方法,它使用多个像素点的加权平均值来进行插值,通常用到更多的邻近像素(比如5x5或7x7的区域)。
  • 优点:适用于高质量图像的上采样,能够在图像边缘保留更多的细节。
  • 缺点:计算较为复杂,可能会产生振荡(ringing)现象。

示例:在图像上采样时,Lanczos插值会使用多个周围像素点来计算新的像素值。它在处理高分辨率图像时能够很好地保留图像细节,但在过度放大时可能引入振荡效应。

5. 最近中心插值(Nearest Center Interpolation)
  • 原理:类似于最近邻插值,但它选择最近的像素作为插值值时是通过距离中心点来选择的,而非最近邻。通常用于图像的最近邻插值变体。
  • 优点:可以获得和最近邻相似的效果,但能够减少块状效应。
  • 缺点:生成的图像仍然没有线性插值平滑。
总结
  • 最近邻插值:简单快速,但图像质量较差,可能产生块状效应。
  • 双线性插值:生成平滑的图像,但边缘可能变得模糊。
  • 双三次插值:更复杂,生成的图像更平滑、细节保留更好。
  • Lanczos插值:高质量插值,适合处理高分辨率图像,但可能引入振荡现象。

这些插值方法在图像上采样过程中各有优劣,具体选择取决于模型对图像质量、计算速度和细节保留的要求。在Stable Diffusion等生成模型中,通常使用双线性插值双三次插值进行上采样,以在计算效率和图像质量之间取得平衡。


转置卷积(反卷积)

  • 作用:转置卷积通过在输入特征图中插入 零值零值零值并使用可学习的卷积核进行卷积操作,从而增加空间分辨率。它可以灵活地上采样特征图。

转置卷积不直接使用双线性插值或最近邻插值(而是零值)。它是基于卷积核的操作,但有时可以通过将插值和卷积组合来实现类似效果。

  • 应用:广泛用于生成对抗网络(GAN)和语义分割(如 U-Net),用于上采样特征图。
  • 空洞卷积的作用是在不进行池化操作损失信息的情况下,增大感受野

反池化(Unpooling)

  • 作用:反池化用于将经过池化操作后的特征图恢复到原始尺寸。它通过记录最大池化时的位置信息,将最大值恢复到正确位置,其余位置填充为零。
  • 应用:常用于自编码器和语义分割任务中,用于恢复池化操作减少的空间维度。

拉普拉斯金字塔(Laplacian Pyramid)

  • 作用:拉普拉斯金字塔是一种多层次图像重建方法。通过逐层上采样并恢复高频细节信息,它能逐步增加图像的空间分辨率。
  • 应用:用于图像超分辨率和图像重建任务,通过逐层增加分辨率,生成高质量图像。

插值+卷积的组合

在某些场景下,可以通过先进行插值(如双线性插值),再使用标准卷积来处理上采样后的特征图。这种方法有时被称为“插值+卷积”。它的流程是:

    1. 插值上采样:首先通过双线性插值或最近邻插值将低分辨率的特征图上采样为高分辨率特征图。
    1. 卷积操作:然后在插值后的特征图上应用卷积操作,以提取新的特征。

总结

  • 1x1 卷积:用于调整特征图的通道数,不是用于增加空间分辨率。
  • 双线性插值和最近邻插值:通过简单的插值操作增加空间分辨率,常用于语义分割等任务。
  • 转置卷积(反卷积):使用卷积核插入零值来增加空间分辨率,是一种可学习的上采样方法,适用于生成网络和语义分割。
  • 反池化:恢复池化后的特征图空间维度,不会引入新信息,但能恢复池化时丢失的位置信息。
  • 拉普拉斯金字塔:通过逐层上采样和细节恢复增加空间分辨率,常用于图像处理和超分辨率任务。

拉普拉斯金字塔在 CNN 中上采样的实现步骤

1. 构建高斯金字塔
  • 对原始图像或特征图逐层应用高斯模糊降采样,生成不同分辨率的特征图,构建高斯金字塔。

高斯金字塔的每一层都是通过对上一层图像进行高斯模糊下采样得到的。每一层的图像分辨率都比上一层低,并保留了图像的低频信息。具体而言,高斯金字塔是通过以下步骤实现的:

  1. 高斯模糊(Gaussian Blur)
    • 对原始图像应用高斯滤波器,进行平滑处理,以去除高频噪声并保留低频信息。这一步会使得图像变得更加模糊。
  2. 下采样(Downsampling)
    • 通过降采样(通常是去除每隔一个像素),将图像的分辨率减半。即从原图像的 (H \times W) 分辨率下采样到 (H/2 \times W/2)。
    • 下采样可以减少图像的尺寸,同时保持低频信息。
  3. 重复操作
    • 继续对下采样后的图像重复高斯模糊和下采样操作,逐层降低分辨率,构建出一系列低分辨率的图像,直到达到所需的最低分辨率。
2. 构建拉普拉斯金字塔
  • 从高斯金字塔中生成拉普拉斯金字塔。每一层的拉普拉斯图像通过将高斯金字塔中当前层与上层(经过上采样后)的差异计算得到:
    在这里插入图片描述
    在这里插入图片描述
  • 这些差异图像保留了高频细节。
3. 上采样低分辨率图像
  • 对最底层的低分辨率特征图进行上采样(如双线性插值、反卷积),逐步恢复图像分辨率。
4. 融合高频细节
  • 将上采样后的图像与拉普拉斯金字塔中相应层的高频细节图相加,恢复图像的边缘、纹理等高频信息。
    在这里插入图片描述
5. 逐层迭代
  • 重复上采样和细节融合,逐层进行,直到恢复到最高分辨率的图像。
6. 生成高分辨率输出
  • 最终输出的是一个高分辨率图像或特征图,保留了低分辨率的全局信息和逐层恢复的高频细节。

通过这些步骤,拉普拉斯金字塔可以高效实现 CNN 中的上采样,生成高分辨率图像或特征图。

棋盘效应

这种方法通常可以避免转置卷积可能产生的“棋盘效应”(checkerboard artifacts),棋盘效应是由于步长和卷积核大小不匹配引起的。造成棋盘效应的原因是转置卷积的不均匀重叠(uneven overlap)。这种重叠会造成图像中某个部位的颜色比其他部位更深。

在下图展示了棋盘效应的形成过程,深色部分代表了不均匀重叠:
在这里插入图片描述

CNN的平移不变性

卷积神经网络(CNN)的平移不变性指的是,当输入图像发生轻微平移时,CNN 仍然能够识别图像中的重要特征,而不会因为位置的改变导致输出结果发生较大变化。

原因

  1. 卷积操作:卷积核在图像上滑动并共享相同的权重,能够检测到相同的特征,即使这些特征发生了位置上的轻微变化。
  2. 池化层:最大池化等操作保留最重要的特征,忽略细微的位移,因此提高了模型对小幅度移动的鲁棒性。
  3. 权值共享和局部连接:卷积核的权重在图像的各个位置共享,卷积核只关注图像的局部区域(称为感受野),使得特征在不同位置都能被检测到。

简单理解

CNN 可以检测图像中的特征,即使这些特征稍微移动,它也能够识别。这是因为卷积和池化使得网络不依赖特征的精确位置。

批量、学习率和过拟合关系

小学习率更有可能导致过拟合,因为模型会逐步“记住”训练数据的细节和噪声。
大学习率则更容易导致欠拟合,因为它会使模型难以精确拟合训练数据中的模式。
小批量训练通常具有更好的泛化能力,能减少过拟合的风险,但训练时间较长。
大批量训练收敛速度更快,计算效率更高,但更容易导致过拟合,模型对训练数据拟合过度,泛化能力较差。

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

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

相关文章

VBA10-处理Excel的动态数据区域

一、end获取数据边界 1、基本语法 1-1、示例: 2、配合row和column使用 2-1、示例1 2-2、示例2 此时,不管这个有数值的区域,怎么增加边界,对应的统计数据也会跟着变的! 二、end的缺陷 若是数据区域不连贯,则…

Spring boot + Vue2小项目基本模板

Spring boot Vue2小项目基本模板 基本介绍基本环境安装项目搭建最终效果展示 基本介绍 项目来源哔哩哔哩的青戈,跟着学习搭建自己的简单vue小项目;看别人的项目总觉得看不懂,需要慢慢打磨 这里目前只简单的搭建了菜单导航和表格页面&#x…

“箱体分析”,箱体支撑压力位,分析市场方向 通达信主图 源码

使用技巧 该指标用于在通达信的K线图上绘制箱体分析图形,主要通过支撑位、波浪顶、箱体上下限等多个技术指标来识别股票的支撑和压力区域。 支撑位分析:可以帮助用户识别股价的支撑区域,并判断是否会反弹。 箱体震荡区间识别:通…

PICO+Unity MR视频透视

官方链接:视频透视 | PICO 开发者平台 在 PXR_Manager (Script) 面板上,勾选 Video Seethrough 选框 2.将 Clear Flags 设置为 Solid Color。颜色设置为黑色,Alpha 通道设置为完全透明 3.在代码中开启透视 using System.Collections; usin…

大学生福音!用gpt-4o和o1大模型拿捏大学化学作业

文章目录 零、前言一、使用GPT操作指导作业拍照使用o1-preview大模型小结 二、感受 零、前言 昨天发了gpt-4o拿捏大学物理作业,群友说,急需要一位化学老师指导 虚竹哥是宠粉的,连夜请了一位博士级的化学老师~ 一、使用GPT 操作指导 ChatG…

2024-11-12 学习人工智能的Day25 scikit-learn库初见

简简单单的数据集 from sklearn.datasets import load_iris/fectch 简单的引用世界数据集和玩具数据集方式 #下面是在获取数据集后常用的值 feature feature_names DESCR target target_names filename from sklearn.datasets import load_iris import numpy as np import…

2024 年将 Postman 文档导出为 HTML 或 Markdown

2024 年将 Postman 文档导出为 HTML 或 Markdown

访问网页的全过程(知识串联)

开发岗中总是会考很多计算机网络的知识点,但如果让面试官只靠一道题,便涵盖最多的计网知识点,那可能就是 网页浏览的全过程 了。本篇文章将带大家从头到尾过一遍这道被考烂的面试题,必会!!! 总…

服务器硬件介绍

计算机介绍 现在的人们几乎无时无刻都在使用电脑!而且已经离不开电脑了。像桌上的台式电脑(桌机)、笔记本电脑(笔电)、平板电脑、智能手机等等,这些东西都算是电脑。 台式机电脑介绍 计算机又被称为电脑。台式机电脑主要分为主机和显示器两个部分&…

04-HTTP协议、请求报文、响应报文

欢迎来到“雪碧聊技术”CSDN博客! 在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将…

基于Multisim人数出入加减计数统计电路(含仿真和报告)

【全套资料.zip】人数出入加减计数统计电路Multisim仿真设计数字电子技术 文章目录 功能一、Multisim仿真源文件二、原理文档报告资料下载【Multisim仿真报告讲解视频.zip】 功能 设计两路光控电路,一路放置在入口,另一路设置在出口,当有人…

车机安装第三方软件实现打开软件全屏教程

简介 越来越多的车友实现安装第三方软件了,但是有的车机的状态栏或者导航栏会遮挡安装的第三方软件。这样的话,第三方软件就会显示不全,体验感非常不好。所以,下面我教一下大家如何使用东君应用管家来实现打开第三方软件全屏。 全…

CLion配置QT开发环境

一、将qmake工程转为cmake工程(方法一:用工具转换并做适当修改) 1、工具链接:链接:https://pan.baidu.com/s/1grW2QY3sW8X2JaHWM_ePPw 提取码:7at4 工具源码:https://github.com/milahu/qmake2cmake 2、执行…

第3章-需求 3.4 需求的合法合规性审查

3.4 需求的合法合规性审查 3.4.1 项目需求的合法性审查3.4.2 委托研发项目的法律问题3.4.3 项目实施过程中的知识产权问题1.开发成果的知识产权保护2.开发过程中的侵权风险防控 近年来随着依法治国的深度开展,企业合规的概念越来越多地出现在大众眼前,也…

怎么保护源代码,源代码防泄密的十种方法

在现代软件开发中,源代码被视为企业的“数字资产”,它不仅承载着企业的核心竞争力,更是推动技术创新和业务发展的基石。然而,随着信息技术的普及和开发环境的复杂化,源代码泄密的风险也在不断增加。保护源代码的安全已…

单相锁相环,原理与Matlab实现

单相锁相环基本原理 单相锁相环的基本原理图如下所示, u α u_\alpha uα​ u β u_\beta uβ​经Park变换、PI控制实现对角频率 ω \omega ω和角度 θ \theta θ的估算。不同锁相环方案之间的差异,主要表现在正交电压 u β u_\beta uβ​的生成&#x…

腾讯云双十一福利篇之CVM云服务器

🍋引言 随着企业数字化转型的不断深入,对云计算的需求日益增长。腾讯云推出的云服务器(CVM)为企业提供了一种灵活、高效、经济的计算服务解决方案。CVM云服务器不仅能够快速响应业务需求,还可以帮助企业降低前期硬件投…

DDei在线设计器-国际化

国际化 从1.2.42版开始,DDei提供了国际化支持。默认提供了中文/英文两种语言。 编辑器会读取浏览器的语言设置,也能够在初始化时强行指定,默认使用zh_CN(中文)。 本示例基于教程快速指南开发,如果您不清楚怎样引入DDei设计器,请查…

NUXT3学习日记一(在我git中拉取代码、文件讲解)

Nuxt 3 是一个基于 Vue 3 的现代框架,用于构建服务器端渲染(SSR)和静态生成的应用程序。它提供了一种简化的方式来创建高性能的 Vue 应用,具有许多强大的功能和优点。以下是 Nuxt 3 的一些主要应用和优点: 一、应用场…

小米路由器3(R3)安装mixbox命令

sh -c /extdisks/sda1/ftp/install.sh && source /etc/profile &> /dev/null install.sh文件 或者在目录新建一个粘贴 #!/bin/sh -e #copyright by monlorclear logsh() {# 输出信息到/tmp/messages和标准输出logger -s -p 1 -t "$1" "$2&quo…