下采样 (Downsampling) 是指在深度学习和信号处理中,将数据的空间分辨率降低、减少数据量的过程。在图像处理中,下采样意味着减少图像的宽度和高度(即减少像素数量),从而压缩数据量。
下采样的主要目的是减小计算量、增加感受野,并通过降低特征图的分辨率来提取更加抽象的高层次特征。
在卷积神经网络(CNN)中,下采样常用于在深层网络中逐渐减小输入的尺寸,帮助网络从局部特征转向更大的上下文或全局特征。
下采样的目的:
-
减少计算量:随着网络层数增加,如果不进行下采样,特征图的尺寸会保持不变,这会导致计算量急剧增加。下采样通过减少特征图的尺寸,可以有效降低计算复杂度。
-
扩大感受野:通过下采样,模型可以更容易捕捉到全局或大尺度的特征,感知到更广泛的上下文信息。更大的感受野有助于模型识别更复杂的模式和结构。
-
防止过拟合:下采样可以减少模型参数和数据量,间接帮助网络防止过拟合,因为较小的特征图需要学习的参数更少。
常见的下采样方法:
-
池化层(Pooling):
- 最大池化(Max Pooling):在每个池化窗口中选取最大值作为输出值。例如,使用 2x2 最大池化会将 4 个像素中的最大值作为新的像素值,从而减小特征图尺寸。
- 平均池化(Average Pooling):在池化窗口中计算平均值作为输出值。与最大池化不同,平均池化关注整个窗口的平均信息。
-
卷积层下采样:
- 使用卷积层下采样是通过卷积层的步幅(stride > 1)来减小特征图的空间分辨率。例如,使用
stride=2
的卷积操作会将特征图的宽度和高度减半。 - 这种方式不仅进行下采样,还会通过卷积操作提取特征。
- 使用卷积层下采样是通过卷积层的步幅(stride > 1)来减小特征图的空间分辨率。例如,使用
-
跳跃连接中的下采样:
- 在一些架构中(如 ResNet),可以通过跳跃连接中的卷积操作进行下采样,这种方式允许在缩小分辨率的同时保留较多信息。
在 ConvNeXt 中的卷积层下采样
ConvNeXt 通过卷积操作进行下采样,而不是传统的池化层。代码中使用 stride=2
的卷积进行下采样,这种方法不仅实现了分辨率的降低,还能通过卷积核学习特征,保留更多信息:
nn.Conv2d(in_chans, dims[0], kernel_size=4, stride=4) # 下采样,步幅为4
参数 | 含义 | 示例值 |
---|---|---|
in_chans | 输入通道数(图像的通道数) | 3(RGB图像) |
dims[0] | 输出通道数(卷积后生成的特征图的通道数) | 可变值 |
kernel_size=4 | 卷积核大小(4x4的卷积核) | 4 |
stride=4 | 步幅(卷积核每次移动的像素距离,用于下采样) | 4 |
这种方式的效果是直接减小特征图的尺寸,同时保留了卷积操作的特征提取能力。