上采样+卷积(Upsample+Conv)
这里说的上采样主要是说的一些传统的插值方法。例如,'nearest' | 'linear' | 'bilinear' | 'bicubic' | 'trilinear'。
卷积就是正常的卷积(Pytorch or TensorFlow‘s 'Conv1d' | 'Conv2d' | 'Conv3d'等)操作。
这里我们拿nearest插值来作为上采样的方法和Conv1d作为卷积方法来说明这两个操作结合的上采样方法对于感受野的影响。
首先是下采样过程(encoder)。我们设置序列的长度为24,卷积核的大小为3,stride为2,padding=1, encoder的层数为3。图1为encoder的流程图。
图1. encoder流程图
上采样过程(Decoder)。我们对第三层的道德特征值做最邻近插值的方法进行上采样操作,并且在上采样操作后加入卷积操作,其中卷积操作的kernel=3,stride=1,padding=1。而上采样的感受野的计算是:假如$alpha$通过2倍上采样得到$beta$,上采样的感受野相当于为了生成$beta$的一个pixel,参与的$alpha$的pixel的数目。
该英文原文
★ Upsampling. Upsampling is frequently done using interpolation (e.g., bilinear, bicubic or nearest-neighbor methods), resulting in an equal or larger receptive field — since it relies on one or multiple features from the input. Upsampling layers generally produce output features which depend locally on input features, and for receptive field computation purposes can be considered to have a kernel size equal to the number of input features involved in the computation of an output feature.
[1]. https:// distill.pub/2019/comput ing-receptive-fields/
因此,上采样的过程的感受野大小如图2所示。上采样的过程输入一个特征点,输出为该特征点和特征点的复制,因此根据上采样的感受野计算公式可以得到其感受野不变->"生成$beta$的1个特征点,仅需要输入$alpha$的1个特征点"
图2. decoder流程图
通过下采样和上采样的流程图可以发现以下结论。 1. 上采样过程(使用插值的方法)。如果后面拼接一个卷积,其感受野大小基本保持不变。如果是多个卷积其感受野还是会增大。 2. 上采样过程中复制的点,也具有和原始特征点相同的感受野。也就是本层中的两个完全相同的特征点的感受野等价于上一层的一个特征点的感受野。如图3所示。
图3
反卷积(转置卷积,Transposeed Conv)
转置卷积等价于将卷积核转制后与矩阵相乘,也是上采样的一种方式(可学习上采样)。等价于先对特征进行插零上采样后加入卷积操作。
通过上图可以看出,转置卷积不会增大感受野的大小,与上采样的插值方法+卷积一致。他仅仅去学习了一个特征点的内容,然后映射到卷积核的大小,所以当前卷积核上的所有的点的感受野应该是相等的。如果后面加入了多层的卷积,会扩大感受野的范围。