卷积计算卷积前后的尺寸

输入图片参数:

  • 图片大小:W * W
  • 卷积核大小: F * F
  • 步长:S
  • 补零padding的大小:P

计算公式为:

N = \frac{W - F + 2P}{S}+1

 输出图片大小:

N * N

示例:

# coding:utf-8
import torch
import torch.nn as nn


class CNNTestModel(nn.Module):
    def __init__(self):
        super().__init__()
        in_channels = 3
        out_channels = 64
        self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=7, stride=2, padding=3, bias=False)

    def forward(self, x):
        out = self.conv(x)
        return out


if __name__ == '__main__':
    img = torch.rand(1, 3, 224, 224)
    model = CNNTestModel()
    out = model(img)
    print(img.shape)
    print(out.shape)

打印结果:

torch.Size([1, 3, 224, 224])
torch.Size([1, 64, 112, 112])

N = (W − F + 2P )/S+1 = (224-7+2x3)/2 + 1 = 112

详情解释:

通道数,会生成与设定的输出通道个数相同个数的卷积核,对图片进行卷积,即卷积核的个数等于输出特征图的通道数。
得到最终输出大小为[1,64,112,112]

扫描二维码关注公众号,回复: 15914349 查看本文章

-------------------------------------------
(W − F + 2P )相当于计算除了第一次卷积后剩下的可用来卷积的大小

-------------------------------------------
(W − F + 2P )/S为按照S大小的步长在刚刚得到的大小上可以向后移动多少次,即还可以做几次卷积
因为不包括第一次卷积,所以再加上一个1,
即N = (W − F + 2P )/S+1

-------------------------------------------
输出大小 = (图片宽或高 - 卷积核大小 + padding大小)/ 步长 + 1
对于宽和高不同的图片可分别用上述公式计算,得到最终的输出大小。

  • 卷积核的channel与输入特征层的channel相同

  • 输出的特征矩阵channel与卷积核个数相同

     

可视化展示:

卷积动态图展示

猜你喜欢

转载自blog.csdn.net/WakingStone/article/details/129418362