一句话定义:上采样(Upsample)是把数据尺寸变大的操作,下采样(Downsample)是把尺寸变小的操作——在图像处理里是像素变多或变少,在神经网络里是特征图的宽高变大或变小。
先看图像:放大与缩小
一张 100×100 的图片变成 400×400,就是上采样;反过来变成 50×50,就是下采样。
关键要理解:下采样一定会丢信息,上采样不会凭空创造信息。
把 400 个像素压成 100 个,最简单的做法是每 4 个取 1 个(这叫最近邻,Nearest Neighbor),或者取 4 个的平均值(平均池化,Average Pooling)。原来的细节里那些"被跳过"的像素,就永久损失了。
上采样则相反。把 100 个像素撑成 400 个,多出来的 300 个只能靠猜:要么直接复制邻居(最近邻插值),要么在已知点之间连线取值(双线性插值,Bilinear Interpolation),要么用更平滑的曲线(双三次插值,Bicubic)。所以放大后的图片会糊、会有锯齿,因为那些像素是推出来的,不是拍到的。
再看神经网络:特征图的缩放
在卷积神经网络(CNN)里,同样的操作作用在特征图(Feature Map)上,但目的完全不同。
下采样为了"看得更广"。 每次下采样,特征图的宽高减半,感受野(Receptive Field,每个神经元能看到的原图范围)就翻倍。浅层网络看到的是边缘、纹理这样的局部细节;经过几轮下采样后,深层网络才能"看到"整张人脸、整只猫。同时计算量也大幅下降——尺寸减半,计算量大约降到四分之一。这就是为什么分类网络(如 ResNet 系列)一路往下缩。
上采样为了"还回原位"。 图像分割要输出和输入同尺寸的掩码,目标检测要在原图坐标上画框,生成模型要从低维噪声一路变回高清图。这些都要求把缩小的特征图重新放大。常见手段有反卷积(Transposed Convolution,也叫转置卷积)、插值后接卷积、以及 Pixel Shuffle 这类重排操作。
有个经典结构叫 U-Net:先下采样若干次压缩语义,再上采样若干次恢复分辨率,中间用跳跃连接(Skip Connection)把浅层的高清细节直接送给对应的上采样层。这样既有了"看得广"的语义,又补回了下采样时丢掉的边缘细节。
两者的区别一览
| 下采样 Downsample | 上采样 Upsample | |
|---|---|---|
| 尺寸变化 | 变大→变小 | 变小→变大 |
| 信息量 | 一定损失细节 | 不新增信息,只是插值/推测 |
| 计算量 | 显著降低 | 显著增加 |
| 主要目的 | 扩大感受野、降成本 | 恢复分辨率、对齐原图 |
| 典型手段 | 最大池化、平均池化、步长卷积 | 反卷积、插值、Pixel Shuffle |
对从业者的实际意义
做模型设计:下采样的次数决定了模型能理解多大的画面,但也决定了你能恢复多精细的边界。分割任务里边界糊,很多时候不是上采样不够好,而是下采样阶段已经把细节弄丢了——这也是跳跃连接流行的原因。
做工程落地:上采样是显存和算力的吞金兽。高分辨率生成、超分(Super-Resolution)之所以贵,就是因为最后几级上采样要在很大的尺寸上做卷积。
普通人视角:手机相册里的"高清修复"、视频平台的 4K 增强、老照片放大,本质都是模型在做上采样——它没变出真实细节,只是根据学到的规律补出了"看起来合理"的细节。所以放大倍数越大,越要警惕"编出来"的假细节。
具体某个模型的实现细节,以官方代码和论文页面为准。
