如何从原始图像尺寸计算内核尺寸?

时间:2018-08-27 17:35:14

标签: python machine-learning deep-learning pytorch resnet

https://github.com/kuangliu/pytorch-cifar/blob/master/models/resnet.py

通过阅读https://www.cs.toronto.edu/~kriz/cifar.html,cifar数据集由每个尺寸为32x32的图像组成。

我对代码的理解:

self.conv1 = nn.Conv2d(3, 6, 5)
self.conv2 = nn.Conv2d(6, 16, 5)
self.fc1   = nn.Linear(16*5*5, 120)

是:

self.conv1 = nn.Conv2d(3, 6, 5) # 3 channels in, 6 channels out ,  kernel size of 5
self.conv2 = nn.Conv2d(6, 16, 5) # 6 channels in, 16 channels out ,  kernel size of 5
self.fc1   = nn.Linear(16*5*5, 120) # 16*5*5 in features , 120 ouot feature

在resnet.py中,以下内容:

self.fc1   = nn.Linear(16*5*5, 120)

http://cs231n.github.io/convolutional-networks/中指出:

  

摘要。总而言之,转换层:

     

接受大小为W1×H1×D1的体积,需要四个超参数:   滤镜的数量K,其空间范围F,步幅S,数量   零填充P的乘积。产生的大小为W2×H2×D2,其中:   W2 =(W1-F + 2P)/ S + 1 H2 =(H1-F + 2P)/ S + 1(即计算宽度和高度   D2 = K通过参数共享,引入F⋅F⋅D1   每个滤波器的权重,总共(F⋅F⋅D1)⋅K权重和K偏差。在   输出量是结果的第d深度切片(大小为W2×H2)   在输入上执行第d个滤波器的有效卷积的过程   跨度为S,然后被第d个偏差抵消。

由此,我试图了解如何将训练图像尺寸32x32(1024像素)作为nn.Linear(16*5*5, 120)的特征图转换为特征图(16 * 5 * 5-> 400)

https://pytorch.org/docs/stable/nn.html#torch.nn.Conv2d可以看到默认跨度为1,填充为0。

从32 * 32的图像尺寸到16 * 5 * 5的步骤是什么,可以从上述步骤得出16 * 5 * 5的步骤吗?

通过上述步骤,如何计算spatial extent

更新:

源代码:

'''LeNet in PyTorch.'''
import torch.nn as nn
import torch.nn.functional as F

class LeNet(nn.Module):
    def __init__(self):
        super(LeNet, self).__init__()
        self.conv1 = nn.Conv2d(3, 6, 5)
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.fc1   = nn.Linear(16*5*5, 120)
        self.fc2   = nn.Linear(120, 84)
        self.fc3   = nn.Linear(84, 10)

    def forward(self, x):
        out = F.relu(self.conv1(x))
        out = F.max_pool2d(out, 2)
        out = F.relu(self.conv2(out))
        out = F.max_pool2d(out, 2)
        out = out.view(out.size(0), -1)
        out = F.relu(self.fc1(out))
        out = F.relu(self.fc2(out))
        out = self.fc3(out)
        return out

取自https://github.com/kuangliu/pytorch-cifar/blob/master/models/lenet.py

我的理解是,将卷积运算应用于每个内核的图像数据。因此,如果设置了5个内核,则将5个卷积应用于数据,从而生成5维图像表示。

1 个答案:

答案 0 :(得分:1)

您没有在问题中提供足够的信息(请参阅my comment)。

但是,如果我不得不猜测,那么在卷积层之间会有两个池化层(步幅为2):

  • 输入大小为32x32(3个通道)
  • conv1输出大小28x28(6通道):转换,无填充,内核大小5,输入大小减少4。
  • 步幅为2的缓冲层,输出大小为14x14(6通道)。
  • conv2输出大小10x10(16个通道)
  • 另一个跨步为2的池化层,输出大小为5x5(16个通道)
  • 将所有5x5x16输入连接到所有120输出的完全连接层(nn.Linear)。

有关here的估计接收场的更详尽指南。

相关问题