深度学习网络层之上采样(Unpooling)

2018/05/08 16:57
阅读数 1.4K

之前一篇博文中介绍了深度学习中的pooling层,在本篇中主要介绍转置卷积这种上采样操作。转置卷积也是一种卷积

L2 pooling

$$ a^l={1\over k}\sqrt{\sum_{j=1}^k(a_j^{l-1})^2} $$ pooling除了仅输出一个值, 也可以输出top k个(mix pooling).

CNN中的上采样

Unpooling:

  • 近邻,以复制的方式.

  • "Bed of Nails":其他位置用0填充

  • "Max Unpooling" 在对称的max pooling中记录最大值的位置,在unpooling时将最大值位置设置为特征值,其他位置置0.

  • 转置卷积:Transpose Convolution,参数可学习,而上述的上采样方式都是固定的函数,不可学习.

转置卷积

转置卷积计算过程是将输入的每个元素值作为卷积核的权重,相乘后作为该元素对应的上采样输出,不同输入的重叠的输出部分直接相加作为输出.示意图如下:

trans-conv-1D

2-D转置卷积操作:在输入的相邻像素间填充stride-1个0,再在边缘填充kernel_size - 1 - crop个 zero-padding,再进行卷积运算。最后一步还要进行裁剪。

transpose_conv

转置卷积运算示意图如下:[^trans2]

转置卷积运算

为什么叫转置卷积? 因为卷积的 im2col 矩阵乘实现中对卷积核展开成了二维的矩阵, 大小如$k^2\times n$,而转置卷积中需要的卷积矩阵的维度是$n\times k^2$, 所以在形式上是转置的形式.

转置卷积也被称为小数步长卷积(Fractionally Strided Convolution),如果前向卷积中步长$s>1$,那么转置卷积中步长$s'<1$,但是小于1的步长不能够直接实现,可以从另外的方式实现:在输入特征单元之间插入 s−1 个0,此时步长 s′ 设置为1,不再是小数。^frac 输入输出尺度关系:^trans 一般前向卷积中$o=\lfloor{i+2p-k\over s}\rfloor+1$,如果$i+2p-k$是s的整数倍,那么转置卷积中: $o'= s(i' −1)+k −2p$, ($k'=k,s'=1,p'=k-p-1$).

转置卷积的用途

  • CNN可视化:通过转置卷积将feature map还原到像素空间,以观察特定的feature map对哪些pattern的图片敏感。
  • 上采样:在图像语义分割或生成对抗网络中需要像素级别的预测,需要较高的图像尺寸。

参考:

[^trans2]: 手写代码实现 https://www.jianshu.com/p/f0674e48894c

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部