Bootstrap

卷积层计算方法

1. 两个参数

in_channelsout_channels

取决于图片类型:

如果是彩色的RGB类型,通道数为3;

如果是灰度图像,通道数为1。

卷积核的个数

2. 两个重要等式 

卷积核通道数 = 卷积输入层的通道数   (k_channels = in_channels
卷积输出层通道数 = 卷积核的个数   out_channels = k_number)         (注:通道数即深度)

3. 简单的卷积运算(padding=0,stride=1)

  • 取输入矩阵中大小与卷积核相同的矩阵;
  • 进行对应位置相乘,最后相加起来(多通道要相加起来),算出特征矩阵的一个位置的值;
  • 多的卷积核同理相乘相加。
  • (具体实现如下图)

Input [ in_{channels}, in_{height}, in_{width} ]

Kernel [ out_{channels}, in_{channels}, k_{height}, k_{width}]

Output [ out_{channels}, out_{height}, out_{width}]

 4. 输出特征图尺寸计算

(1)根据卷积公式:

O=(n-f+2p)/s+1

nfps
输入特征宽高卷积核宽高填充padding步长stride

则上图输出特征图尺寸为:

out_{height}=(3-2+2*0)/1+1=2

out_{width}=(3-2+2*0)/1+1=2

(2)同理,下面pytorch的卷积:

self.conv1 = nn.Sequential(
            nn.Conv2d(
                in_channels=1,    # 灰度图像
                out_channels=16,  # 卷积核个数
                kernel_size=3,    # 卷积核大小3*3
                stride=1,
                padding=2
            ),
            nn.ReLU(),            # 激活
            nn.MaxPool2d(kernel_size=2) # 池化
        )
  • 假入输入尺寸为 1*64*44根据卷积公式:

O=(n-f+2p)/s+1

nfps
输入特征宽高卷积核宽高填充padding步长stride

out_{height}=(64-3+2*2)/1+1=66

out_{width}=(44-3+2*2)/1+1=46

又:输出层深度 = 卷积核的个数 = 16

故:输出特征图的尺寸为 16*66*46

  • 池化层核大小2*2,默认填充padding为0,默认步长stride=核大小=2,同理:

Oh=(66-2+2*0)/2+1=33

Ow=(46-2+2*0)/2+1=23

池化不改变通道数, 故输出特征图的尺寸为 16*33*23

5. 输出参数的数量计算

paramNums=f*f*in*out

finout
卷积核大小in_channelout_channel

注:(1)bias为True时,要多加一个out

(2)当使用BN时,还有两个可学习的参数α和β,要多加 3*out

;