矩阵转置相关公式_上采样+Conv & 转置卷积感受野分析

上采样+卷积(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的流程图。

36f6ca780559f4b7a5235c1316967d00.png

图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个特征点"

b74d5c7d904860f06102ddad777d214a.png

图2. decoder流程图

通过下采样和上采样的流程图可以发现以下结论。 1. 上采样过程(使用插值的方法)。如果后面拼接一个卷积,其感受野大小基本保持不变。如果是多个卷积其感受野还是会增大。 2. 上采样过程中复制的点,也具有和原始特征点相同的感受野。也就是本层中的两个完全相同的特征点的感受野等价于上一层的一个特征点的感受野。如图3所示。

5586ab27ad08e35e089b3b20b091a825.png

图3

反卷积(转置卷积,Transposeed Conv)

转置卷积等价于将卷积核转制后与矩阵相乘,也是上采样的一种方式(可学习上采样)。等价于先对特征进行插零上采样后加入卷积操作。

e9025ff7b6cb865a7e2167469b6b587a.png

通过上图可以看出,转置卷积不会增大感受野的大小,与上采样的插值方法+卷积一致。他仅仅去学习了一个特征点的内容,然后映射到卷积核的大小,所以当前卷积核上的所有的点的感受野应该是相等的。如果后面加入了多层的卷积,会扩大感受野的范围。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是UNet网络结构x1的skip connection conv conv的PyTorch代码: ``` import torch import torch.nn as nn class UNet(nn.Module): def __init__(self): super(UNet, self).__init__() self.conv1 = nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1) self.relu1 = nn.ReLU(inplace=True) self.conv2 = nn.Conv2d(64, 128, kernel_size=3, stride=1, padding=1) self.relu2 = nn.ReLU(inplace=True) self.maxpool = nn.MaxPool2d(kernel_size=2, stride=2) self.conv3 = nn.Conv2d(128, 256, kernel_size=3, stride=1, padding=1) self.relu3 = nn.ReLU(inplace=True) self.conv4 = nn.Conv2d(256, 512, kernel_size=3, stride=1, padding=1) self.relu4 = nn.ReLU(inplace=True) self.conv5 = nn.Conv2d(512, 1024, kernel_size=3, stride=1, padding=1) self.relu5 = nn.ReLU(inplace=True) self.upconv6 = nn.ConvTranspose2d(1024, 512, kernel_size=2, stride=2) self.conv6 = nn.Conv2d(1024, 512, kernel_size=3, stride=1, padding=1) self.relu6 = nn.ReLU(inplace=True) self.conv7 = nn.Conv2d(512, 256, kernel_size=3, stride=1, padding=1) self.relu7 = nn.ReLU(inplace=True) self.upconv8 = nn.ConvTranspose2d(256, 128, kernel_size=2, stride=2) self.conv8 = nn.Conv2d(256, 128, kernel_size=3, stride=1, padding=1) self.relu8 = nn.ReLU(inplace=True) self.conv9 = nn.Conv2d(128, 64, kernel_size=3, stride=1, padding=1) self.relu9 = nn.ReLU(inplace=True) self.conv10 = nn.Conv2d(64, 1, kernel_size=1, stride=1) def forward(self, x): # Encoder x1 = self.conv1(x) x1 = self.relu1(x1) x2 = self.conv2(x1) x2 = self.relu2(x2) x3 = self.maxpool(x2) x3 = self.conv3(x3) x3 = self.relu3(x3) x4 = self.maxpool(x3) x4 = self.conv4(x4) x4 = self.relu4(x4) x5 = self.maxpool(x4) x5 = self.conv5(x5) x5 = self.relu5(x5) # Decoder x6 = self.upconv6(x5) x6 = torch.cat([x6, x4], dim=1) x6 = self.conv6(x6) x6 = self.relu6(x6) x7 = self.conv7(x6) x7 = self.relu7(x7) x8 = self.upconv8(x7) x8 = torch.cat([x8, x2], dim=1) x8 = self.conv8(x8) x8 = self.relu8(x8) x9 = self.conv9(x8) x9 = self.relu9(x9) x10 = self.conv10(x9) return x10 ``` 其中,`x4`和`x2`是skip connection连接的两个层,通过`torch.cat`函数将它们拼接在一起。然后,`x6`和`x8`分别进行反卷积操作,再与skip connection的层进行拼接。最后,将`x9`进行卷积操作后输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值