卷积神经网络(CNN)中的**上采样(Upsampling)和下采样(Downsampling)**是调整特征图空间分辨率的关键操作,分别用于增大或减小特征图的尺寸。它们在图像分割、超分辨率、目标检测等任务中广泛应用。以下是详细解释和示例:
目的:降低特征图的分辨率,减少计算量,同时扩大感受野,提取更高层次的语义特征。
常见方法:
例子:
假设输入是一个4×4的特征图,通过2×2最大池化(步长2):
输入:
[[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12],
[13,14,15,16]]
最大池化后(2×2窗口):
[[6, 8], # max(1,2,5,6)=6, max(3,4,7,8)=8
[14,16]] # max(9,10,13,14)=14, max(11,12,15,16)=16
输出为2×2的特征图,分辨率降低但保留了局部最显著的特征。
目的:增大特征图的分辨率,恢复空间细节,常用于图像重建或分割任务。
常见方法:
例子:
(1) 最近邻插值:将2×2输入上采样2倍到4×4:
输入:
[[1, 2],
[3, 4]]
最近邻插值(每个像素复制到2×2区域):
[[1,1, 2,2],
[1,1, 2,2],
[3,3, 4,4],
[3,3, 4,4]]
(2) 转置卷积:
假设输入为2×2,使用3×3卷积核(stride=1, padding=1),通过填充和卷积操作生成更大的输出。具体计算过程较复杂,涉及填充输入后卷积。
下采样:
上采样:
特性 | 下采样 | 上采样 |
---|---|---|
目的 | 压缩尺寸,提取高层特征 | 恢复尺寸,保留空间细节 |
操作类型 | 池化、跨步卷积 | 转置卷积、插值 |
信息损失 | 可能丢失细节(如池化) | 可能引入伪影(如反卷积) |
典型位置 | 编码器(Encoder) | 解码器(Decoder) |
import torch
import torch.nn as nn
# 下采样:最大池化
downsample = nn.MaxPool2d(kernel_size=2, stride=2)
input = torch.rand(1, 1, 4, 4) # 4x4输入
output = downsample(input) # 输出2x2
# 上采样:转置卷积
upsample = nn.ConvTranspose2d(1, 1, kernel_size=2, stride=2)
input = torch.rand(1, 1, 2, 2) # 2x2输入
output = upsample(input) # 输出4x4
通过合理组合上采样和下采样,CNN能够实现多尺度特征提取与重建,平衡计算效率和细节保留。