上下采样
上采样(通道数增加,空间尺寸减少)
1.定义
上采样用于将低分辨率的特征图恢复到更高的分辨率,目的是恢复细节信息或匹配目标尺寸(通过算法生成新数据,细节是脑补出来的)
2.举例
假设一张模糊的小图(如10×10像素),上采样可以把它放大到清晰的大图(如20×20像素)
3.原因
1.恢复细节:神经网络通过下采样压缩图像,丢失细节,上采样可逆向补全;
2.尺寸匹配:在分割、生成任务中,最终输出需与原图尺寸一致;
3.信息增强:通过插值或反卷积生成更丰富的特征;
4.分类
- 非学习型(插值类):最近邻、双线性、双三次
- 学习型(神经网络):转置卷积、插值+卷积、PixelShuffle
- 特殊结构:反池化
5.具体方法
1. 最近邻插值
- 原理:放大时,新像素直接复制离它最近的原始像素的值;
- 特点:速度最快,但会产生明显的锯齿和块状效应
- 文字图示:
原图:
A B
C D
放大后:
A A B B
A A B B
C C D D
C C D D
2. 双线性插值
- 原理:先在水平方向线性插值,再在垂直方向线性插值。新像素是周围2×2个点的加权平均,权重由距离决定
- 结果:结果比最近邻平滑,没有锯齿,但会轻微模糊边缘,OpenCV的resize默认方法
- 图示:新像素是周围四个点的加权平均,权重由距离决定
![双线性插值法]()
3. 双三次插值
- 原理:用周围4×4领域的像素值,进行三次多项式拟合插值
- 特点:比双线性更锐利,细节保留更好,但计算量大,photoshop常用此方法
- 排名:质量上:双三次>双线性>最近邻
![双三次插值]()
4. 转置卷积
- 原理:通过学习可训练卷积核,把一个小特征图映射到更大的尺寸
- 简单理解:先在输入每个像素周围填充0,但容易产生棋盘格伪影,需要调优
- 特点:参数可学习,能适应数据,但容易产生棋盘格伪影,需要调优
- 用途:早期的生成对抗网络,语义分割解码器
![转置卷积]()
5. 反池化
- 池化举例:输入特征图[1 2] [3 4],如果采用2×2最大池化,池化窗口覆盖整个矩阵,最大的数是4,输出[4],同时,最大池化不仅得到数值4,还会记录4来自哪个位置,这里记录的是第2行、第2列,这个位置索引就是后面反池化要用的。
- 反池化举例:假设池化后的结果是[4],并且记录了4来自第2行、第2列,反池化时,恢复成2×2,就是[0 0] [0 4]
- 更大的例子,原图[1 5 2 4][3 7 6 1][8 2 5 0][1 9 4 3],采用kernel=2,stride=2
- 左上 [1 5][3 7],最大值是7,位置第2行第2列
- 右上 [2 4][6 1],最大值是6,位置第2行第3列
- 左下 [8 2][1 9],最大值是9,位置第4行第2列
- 右下 [5 0][4 3],最大值是5,位置第3行第3列
- 池化输出 [7 6][9 5]
- 反池化 7放回第2行第2列, 6放回第2行第3列, 9放回第4行第2列, 5放回第3行第3列
- 最终输出 [0 0 0 0] [0 7 6 0] [0 0 5 0] [0 9 0 0]
- 反池化只能恢复元素的位置,不能恢复池化过程中丢失的信息
6. 插值+卷积
- 先把特征图放大,再用卷积修饰/学习细节,结构是 输入特征图->插值上采样->普通卷积->输出特征图
- 举例:输入特征图[1 2][3 4],kernel=3×3,stride=1
- 第一步:最近邻上采样,每个数复制成2×2,得到
[1 1 2 2]
[1 1 2 2]
[3 3 4 4]
[3 3 4 4] - 第二步:3×3卷积 设置为 [0.1 0.1 0.1][0.1 0.2 0.1][0.1 0.1 0.1]
- 第三步:逐点计算
1 * 0.1 + 1 * 0.1 + 2 * 0.1 + 1 * 0.1 + 1 * 0.2 + 2 * 0.1 + 3 * 0.1 + 3 * 0.1 + 4 * 0.1 = 1.9
1 * 0.1 + 2 * 0.1 + 2 * 0.1 + 1 * 0.1 + 2 * 0.2 + 2 * 0.1 + 3 * 0.1 + 4 * 0.1 + 4 * 0.1 = 2.3
1 * 0.1 + 1 * 0.1 + 2 * 0.1 + 3 * 0.1 + 3 * 0.2 + 4 * 0.1 + 3 * 0.1 + 3 * 0.1 + 4 * 0.1 = 2.7
1 * 0.1 + 2 * 0.1 + 2 * 0.1 + 3 * 0.1 + 4 * 0.2 + 4 * 0.1 + 3 * 0.1 + 4 * 0.1 + 4 * 0.1 = 3.1 - 最终输出特征图:[1.9 2.3][2.7 3.1]
7. 亚像素卷积/像素混洗 Pixel Shuffle
- 核心思想:现在 通道维度 做出高分辨率信息,再把通道 重新排列 成空间分辨率
- 第一步:输入特征图(C * H * W),只有一个通道,X = [1 2][3 4]
- 第二步:先做 卷积扩展通道
# step1
# 不是直接放大,而是先变成4个通道
# 假设卷积输出是(4,2,2),也就是4个2×2特征图,这里的4个通道是学习得到的,是卷积层的输出权重决定的,不是人为加出来的,先假设是下面的通道
通道0 C0:[1 2]
[3 4]
通道1 C1:[5 6]
[7 8]
通道2 C2:[9 10]
[11 12]
通道3 C3:[13 14]
[15 16]
# step2
# 核心重排规则
# 上采样倍率r=2:每个空间位置会变成2×2block
通道 C0 C1 C2 C3
放到2×2的哪个位置 (0,0) (0,1) (1,0) (1,1)
C0 C1 --> 1 2 5 6
C2 C3 3 4 7 8
9 10 13 14
11 12 15 16
# step3
# 位置(0,0)
取C0(0,0)=1,C1(0,0)=5,C2(0,0)=9,C3(0,0)=13
排列成 [1 5]
[9 13]
# 位置(0,1)
取C0(0,1)=2,C1(0,1)=6,C2(0,1)=10,C3(0,1)=14
排列成 [2 6]
[10 14]
# 位置(1,0)
取C0(1,0)=3,C1(1,0)=7,C2(1,0)=11,C3(1,0)=15
排列成 [3 7]
[11 15]
# 位置(1,1)
取C0(1,1)=4,C1(1,1)=8,C2(1,1)=12,C3(1,1)=16
排列成 [4 8]
[12 16]
# 拼成最终4×4输出,把四个2*2block按照位置拼起来,得到如下
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
下采样(通道数减少,空间尺寸增加)
1.定义
把特征图变小,但尽量保留重要信息。例如:44 -> 22 -> 1*1
2.目标
不是简单缩小图片,而是提取更抽象、更语义化的特征
3.分类
| 方法 | 是否可学习 | 是否丢信息 |
|---|---|---|
| 最大池化 | 否 | 会丢 |
| 平均池化 | 否 | 会模糊 |
| 步长卷积 | 是 | 可学习 |
4.具体方法
1. Max Pooling (步长stride=2)
特点:只保留最强响应(保留最大值,丢掉其他信息,降低分辨率)
输入:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
# step1:划分窗口(2*2)
左上 [1 2][5 6] 最大值是6
右上 [3 4][7 8] 最大值是8
左下 [9 10][11 12] 最大值是12
右下 [13 14][15 16] 最大值是16
# step2:输出
6 8
14 16
2. Avg Pooling平均池化
特点:更平滑,没那么模糊,细节损失没那么严重
输入:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
# step1:划分窗口(2*2)
左上 [1 + 2 + 5 + 6]/4 = 3.5
右上 [3 + 4 + 7 + 8]/4 = 5.5
左下 [9 + 10 + 11 + 12]/4 = 10.5
右下 [13 + 14 + 15 + 16]/4 = 14.5
# step2:输出
3.5 5.5
10.5 14.5
3. 步长卷积
输入:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
卷积核(2*2):stride=2
1 1
1 1
# step1:左上
1*1 + 2*1 + 5*1 + 6*1 = 14
# step2:右上
3*1 + 4*1 + 7*1 + 8*1 = 22
# step3:左下
9*1 + 10*1 + 13*1 + 14*1 = 46
# step4:右下
3*1 + 4*1 + 7*1 + 8*1 = 54
# 输出
14 22
46 54
本文来自博客园,作者:jsqup,转载请注明原文链接:https://www.cnblogs.com/jsqup/p/21176021




浙公网安备 33010602011771号