上下采样

上采样(通道数增加,空间尺寸减少)

1.定义

上采样用于将低分辨率的特征图恢复到更高的分辨率,目的是恢复细节信息或匹配目标尺寸(通过算法生成新数据,细节是脑补出来的)

2.举例

假设一张模糊的小图(如10×10像素),上采样可以把它放大到清晰的大图(如20×20像素)

3.原因

1.恢复细节:神经网络通过下采样压缩图像,丢失细节,上采样可逆向补全;
2.尺寸匹配:在分割、生成任务中,最终输出需与原图尺寸一致;
3.信息增强:通过插值或反卷积生成更丰富的特征;

4.分类

  1. 非学习型(插值类):最近邻、双线性、双三次
  2. 学习型(神经网络):转置卷积、插值+卷积、PixelShuffle
  3. 特殊结构:反池化

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
posted @ 2026-07-06 17:00  jsqup  阅读(17)  评论(0)    收藏  举报