查看全课大纲(第 67 / 93 节)
- 1.计算机视觉概述
- 2.计算机视觉应用场景
- 3.困难与挑战
- 4.开源库介绍
- 5.图像显示与存储
- 6.CLAHE
- 7.腐蚀膨胀与开闭运算
- 8.滤波与边缘填充
- 9.各种滤波
- 10.图像金字塔
- 11.傅里叶变换
- 12.短时傅里叶变换与小波变换
- 13.颜色特征与颜色直方图
- 14.几何特征_边缘
- 15.几何特征-角点与斑点
- 16.局部特征-SIFT特征描述子
- 17.局部特征-SURF特征描述子
- 18.局部特征-ORB特征描述子
- 19.其他特征描述子
- 20.传统图像分割技术
- 21.GraphCut
- 22.GrabCut
- 23.人脸检测的传统方法
- 24.行人检测的传统方法HOG+SVM
- 25.行人检测DPM
- 26.人工神经网络的架构
- 27.目标函数与梯度下降
- 28.误差反向传播
- 29.可手算的神经网络
- 30.改进目标函数与克服梯度消散
- 31.神经网络之传统神经网络与深度网络的差异
- 32.各种梯度下降算法
- 33.如何选择合适的梯度下降算法
- 34.避免过适应
- 35.CNN的架构
- 36.CNN的误差反向传播_卷积层
- 37.CNN的误差反向传播_池化层
- 38.分类所用的数据集
- 39.Alexnet详解
- 40.VGG详解
- 41.GoogLeNet_v1
- 42.BatchNormalization
- 43.GoogLeNet_v3v4
- 44.ResNet
- 45.ResNeXt
- 46.CNN设计准则
- 47.图像检索与推土机距离
- 48.基于颜色相似性
- 49.基于形状相似性
- 50.基于纹理相似性
- 51.基于局部特征相似性
- 52.DL的二值哈希编码
- 53.高维空间中检索KDTree
- 54.高维空间中检索LSH
- 55.目标识别任务综述
- 56.RCNN
- 57.SPP-Net
- 58.Fast R-CNN
- 59.Faster R-CNN
- 60.R-CNN系列模型回顾
- 61.R-FCN的设计思路
- 62.R-FCN的实现
- 63.YOLOv1
- 64.YOLOv2_9000
- 65.YOLOv3
- 66.图像分割应用场景与数据集
- 67.上采样的实现方式
- 68.FCN网络架构的由来
- 69.FCN构建细节
- 70.DeepLabv1
- 71.CRF
- 72.DeepLabv2
- 73.DeepLabv3
- 74.特定的医学影像分割任务
- 75.U-Net
- 76.3D U-Net
- 77.V-Net
- 78.DenseNet
- 79.病理切片分析任务及数据集
- 80.病理切片分析
- 81.图说任务及其传统处理方法
- 82.深度语言模型与RNN
- 83.LSTM及其变种
- 84.NIC模型
- 85.SAT模型
- 86.图说的性能指标
- 87.判别模型与生成模型
- 88.KL散度与JS散度
- 89.VAE
- 90.GAN的基本原理
- 91.DCGAN与CGAN
- 92.Wasserstein GAN
- 93.SRGAN
上采样的实现方式
小象实战讲义 · 基于深度学习的计算机视觉
在深度学习的图像处理流程中,我们常常需要通过卷积、池化等操作对图像进行下采样,以提取更宏观的语义信息。然而,在图像分割、超分辨率等任务中,我们需要将低分辨率的特征图恢复到原始输入尺寸,这个过程就是上采样。本节将系统讲解上采样的三种核心实现方式:双线性插值、反卷积与反池化,并深入剖析反卷积的多种等价表述及其参数关系,为你构建语义分割等模型打下坚实基础。
💡 核心导读
- 上采样的定义与目标:理解为何需要将小图像“放大”,以及数字图像放大时面临的分辨率不增问题。
- 三种实现方式:掌握无需学习的双线性插值、参数可学习的反卷积,以及基于位置记录的反池化。
- 反卷积的多面性:深入理解反卷积为何也被称为转置卷积、分数步长卷积,以及其与普通卷积在参数上的对偶关系。
- 实践选择:了解在实际应用中,如何根据任务需求(速度、精度、连续性)选择合适的上采样方法。
什么是上采样
在深度卷积网络中,我们通过 max pooling 或步长(stride)大于1的卷积层,不断减小特征图的尺寸。这种下采样操作的好处是能够扩大感受野,提取更全局、更抽象的特征。然而,许多任务(如图像分割)的最终输出需要与输入图像保持相同的空间分辨率,以便进行像素级的预测。这就需要一种逆向操作——上采样。
上采样,英文为 Upsampling,其目标是将一个尺寸较小的特征图,转换成一个尺寸较大的特征图。你可以将其想象成一个投影仪:将一张小的幻灯片(小特征图)投射到大的幕布上,得到一张大的图片。
但这里存在一个根本性问题:数字图像由离散的像素点阵构成。简单地将一个小像素块复制成四个相同的大像素块(即最近邻插值),虽然尺寸变大了,但图像的分辨率(即信息密度)并未增加,只会导致图像看起来“颗粒粗糙”,丢失细节。因此,我们需要更智能的方法来“填充”放大后新增的像素位置。
上采样的三种实现方式
主要有三种方法可以实现上采样,它们以不同的方式解决了信息填充的问题。
1. 双线性插值
双线性插值是一种无需学习、完全基于几何计算的快速方法。它假设已知一个2x2网格四个角点的像素值,通过两次线性插值来估算网格内部任意点的值。
计算原理: 假设我们有一个2x2的网格,四个角点值分别为 ,对应坐标分别为 。我们需要求点 的值。
- 首先在 方向进行两次线性插值,得到 和 :
- 然后在 方向对 和 进行线性插值,得到 :
这个过程可以理解为:先连接上下两对点形成 与 两条线,在这两条线上分别找到与目标点 坐标对应的点(即 、),再连接这两个点,其连线上与目标点 坐标对应的值即为所求。
特点:
- 无需学习:没有可训练参数,运行速度极快。
- 操作简单:逻辑清晰,易于实现。
- 效果不差:能产生相对平滑的放大结果,在许多场景下是有效的 baseline 方法。
2. 反卷积
反卷积,英文常称为 Deconvolution 或 Transposed Convolution,是本节的重点。它通过可学习的参数来实现上采样,能够从数据中自适应地学习如何“填充”信息。
核心思想:从“多对一”到“一对多”
普通卷积是一个“多对一”的映射:一个局部窗口内的多个输入值,通过卷积核加权求和,得到一个输出值。 反卷积则可以直观理解为“一对多”的映射:一个输入值,通过卷积核,被映射到输出特征图的一个局部区域中。
我们可以用两种等价的视角来理解反卷积操作:
视角一:投影式映射(一对多展开) 将输入特征图的每个元素视为一个“光源”,卷积核视为一个“投影模板”。每个输入值乘以卷积核的权重后,被“投射”到输出特征图对应的局部位置上。当多个输入值的投射区域重叠时,重叠处的值进行相加。
例如,一个2x2的输入,通过一个3x3的卷积核进行反卷积:
- 左上角输入值乘以卷积核,结果放置在输出图的左上角3x3区域。
- 右上角输入值乘以卷积核,结果放置在输出图右上角对应的3x3区域(与左上角区域有重叠)。
- 以此类推,四个输入值投射的四个3x3区域在输出图(4x4)上叠加,最终得到输出。
视角二:补零卷积(分数步长卷积) 这是另一种等价的、更易于实现的理解方式。我们可以通过对输入特征图进行补零,然后进行一个普通的卷积操作来实现上采样。
具体而言,对于输入尺寸 ,期望输出尺寸 ,卷积核尺寸 ,步长 的情况:
- 在输入特征图的每个像素之间插入 个零,其中 是与之对偶的普通卷积的步长。这会使输入尺寸扩大。
- 在扩大后的特征图外围再补上一圈零,补零圈数 ,其中 是对偶普通卷积的填充数。
- 用一个尺寸为 的卷积核,以步长1对这个补零后的特征图进行普通卷积,即可得到上采样后的输出。
当 时,步骤1(像素间插零)可省略。这种在像素间插零导致卷积核滑动时“跳过”零点的操作,从原输入视角看,相当于卷积步长小于1(例如1/2),因此反卷积也被称为分数步长卷积。
参数关系:卷积与转置卷积的对偶性
反卷积(转置卷积)的参数与它所“逆转”的那个普通卷积的参数存在明确的数学对偶关系。理解这张表至关重要:
| 操作 | 核尺寸 | 步长 | 填充 | 输入尺寸 | 输出尺寸 |
|---|---|---|---|---|---|
| 卷积 | |||||
| 转置卷积 |
上表成立的前提是原卷积可被精确复原,即 能被 整除;若不能整除,按此式反推会差几个像素,需要额外指定
output_padding才能恢复到原输入尺寸。
重要示例:
- 卷积:
i=4, o=2, k=3, s=1, p=0(valid卷积) 对应的转置卷积:i'=2, o'=4, k'=3, s'=1, p'=2(full padding卷积) - 卷积:
i=5, o=3, k=3, s=2, p=1对应的转置卷积:先对输入i'=3插零:i'' = i' + (s-1)*(i'-1) = 3 + 1*2 = 5,然后设置k'=3, s'=1, p'= k - p - 1 = 3-1-1=1,对i''=5卷积得到o' = s(i'-1) - 2p + k = 2*(3-1) -2*1 +3 = 5。
为什么叫“转置卷积”? 从矩阵乘法的角度看,普通卷积操作可以等价于用一个特殊的、稀疏的卷积矩阵 乘以被拉直(flatten)的输入向量 ,得到输出向量 。 那么,其逆操作(上采样)理论上应该是 。但求逆计算复杂且不一定存在。一个可行的近似是使用 的转置矩阵 来上采样:。这个用 进行上采样的操作,就被称为转置卷积。可以证明,前述“补零卷积”的操作在数学上等价于用 进行矩阵乘法。
3. 反池化
反池化,英文为 Unpooling,其思路更为直接,尤其常用于逆转 Max Pooling 操作。
核心思想:记录位置,还原信息 在最大池化时,我们不仅记录池化窗口内的最大值,还额外记录这个最大值在原始窗口中的位置索引。 在进行反池化时,我们将池化后的值,根据之前记录的索引,精确地放回到输出特征图对应的位置上。而其他没有记录的位置,则填充为0(或其他默认值,如最小值)。
特点:
- 非参数化:没有需要学习的权重。
- 保留结构:能较好地还原下采样前特征图的主要结构和激活位置。
- 稀疏性:输出中非零值较少,可能导致结果看起来不够连续、比较“离散”。
方法对比与实践选择
| 方法 | 是否需要学习 | 优点 | 缺点 | 典型应用场景 |
|---|---|---|---|---|
| 双线性插值 | 否 | 速度快,实现简单,输出平滑 | 无法适应数据,细节恢复能力有限 | 快速原型、上采样初始化、最终输出层 |
| 反池化 | 否 | 能精确还原最大值位置,结构保持好 | 输出稀疏,不连续,信息有损失 | 与最大池化配对使用,在编码器-解码器结构(如SegNet)中常见 |
| 反卷积 | 是 | 强大的学习能力,能生成连续、丰富的特征 | 计算量较大,需要训练,可能引入棋盘伪影 | 主流的可学习上采样方式,典型应用于 FCN 等早期分割网络;DeepLab 系列则改用空洞卷积配合双线性插值 |
如何选择?
- 追求速度和简单性:首选双线性插值。
- 需要精确还原池化前结构:使用带索引记录的反池化。
- 希望网络自动学习最佳的上采样方式,以生成高质量、连续的特征图:使用反卷积。事实上,一个参数设置合理的反卷积层,理论上可以拟合出双线性插值或反池化的效果。
在实际的语义分割网络(如FCN)中,常常会组合使用这些技术。例如,FCN-8s网络将深层特征图通过反卷积上采样后,与经过1x1卷积调整通道数的浅层特征图进行融合,以同时利用深层语义信息和浅层细节信息。
📝 动手练一练
概念辨析:反卷积(Deconvolution)有“转置卷积”和“分数步长卷积”两个别名。请简述这两个别名分别是从哪个角度来描述反卷积操作的?
👉 点击查看参考答案
- 转置卷积:从矩阵运算的角度。将普通卷积操作表示为稀疏矩阵 与输入向量的乘法 。其逆操作(上采样)的一个近似是实现为 ,即使用卷积矩阵的转置进行运算,故得名。
- 分数步长卷积:从补零操作的视角。通过在输入像素间插入零值,然后进行步长为1的普通卷积。从原始(未插零)输入的视角看,卷积核每次移动的距离小于1个像素,相当于步长是一个分数(如1/2),故得名。
参数计算:已知一个普通卷积层的参数为:输入尺寸
i=7,卷积核k=3,步长s=2,填充p=1。请问,要将其输出特征图通过转置卷积恢复到输入尺寸7,这个转置卷积层应该如何设置参数(核尺寸k',步长s',填充p')?并计算其输入尺寸i'应为多少。👉 点击查看参考答案
根据卷积与转置卷积的参数对偶关系:
- 核尺寸不变:
k' = k = 3 - 转置卷积步长固定为1:
s' = 1 - 转置卷积填充:
p' = k - p - 1 = 3 - 1 - 1 = 1 - 转置卷积的输入尺寸等于原卷积的输出尺寸:
i' = o
需要先计算原卷积的输出尺寸
o:o = floor((i + 2p - k) / s) + 1 = floor((7 + 2*1 - 3) / 2) + 1 = floor(6 / 2) + 1 = 3 + 1 = 4所以,转置卷积的参数应为:
i'=4,k'=3,s'=1,p'=1。 可以验证输出尺寸:o' = s(i' - 1) - 2p + k = 2*(4-1) - 2*1 + 3 = 6 - 2 + 3 = 7,与目标一致。- 核尺寸不变:
本章小结
本节深入探讨了计算机视觉深度学习中的关键操作——上采样。我们了解到,上采样并非简单的像素复制,而是需要智能地填充信息以恢复或构建高分辨率特征图。双线性插值无需学习、速度快,适合作为基线;反卷积(转置卷积/分数步长卷积)参数可学习、表达力强,是 FCN 等早期分割网络的主流选择(DeepLab 系列则用空洞卷积配合双线性插值替代反卷积);反池化依赖池化索引,能还原最大值位置但输出稀疏,常与最大池化配对(如 SegNet)。
今天,语义分割与超分辨率中还常用 PixelShuffle(亚像素卷积)、可学习上采样与 Transformer 解码器等方案;但双线性插值、转置卷积与反池化仍是理解上采样原理的三块基石。
📋 行动清单
- 理解三种方法的核心机制:能清晰说出双线性插值、反卷积、反池化分别是如何工作的,以及各自的优缺点。
- 掌握反卷积的参数换算:给定一个普通卷积层的参数,能够推导出其对应的转置卷积层参数,并理解其背后的对偶原理。
- 建立实践选择思路:面对一个具体的上采样需求(如语义分割网络中的特征图放大),能够根据对速度、精度、连续性的要求,初步判断哪种方法或组合更为合适。
通过本节的学习,你已掌握了构建全卷积网络(FCN)、U-Net等现代图像分割模型所必需的上采样技术基础。在后续的章节中,我们将看到这些技术是如何被具体应用到解决像素级预测任务中的。
—— 小象教研组