对于CNN中卷积的一些理解

图像

图像是由一个个的像素点组合起来的。一般的彩色图像都分为RGB三个通道。
图像就像是一个高纬度的张量,其本质还是由一个个0-255的像素所构成的,对于图像的操作,相当于是对这些像素点的数值进行计算。

卷积

卷积层是要保留图像的空间特征。
构建模型时,先想清楚输入的维度是什么,输出的维度是什么。
对于CNN中卷积的一些理解_第1张图片


卷积核

通过下面的这个网络说明:
对于CNN中卷积的一些理解_第2张图片
卷积核的通道数与输入的通道数一致,卷积核的个数与输出的通道数一致。
在没有Padding的情况下,卷积核为3 * 3,输出小一圈,卷积核为5 * 5,输出小两圈。


在进行卷积时,必须设置下面的四个参数:
对于CNN中卷积的一些理解_第3张图片
这四个数(输入的通道,输出的通道,卷积核的大小)是必须要设置的。和图像的大小是没有关系的。


实例说明

import torch
in_channels, out_channels= 5, 10
width, height = 100, 100
kernel_size = 3
batch_size = 1

input = torch.randn(batch_size,
                    in_channels,
                    width, 
                    height)
conv_layer = torch.nn.Conv2d(in_channels,
                             out_channels,
                             kernel_size=kernel_size)
output = conv_layer(input)

print(input.shape)
print(output.shape)
print(conv_layer.weight.shape)

输出为:

torch.Size([1, 5, 100, 100])
torch.Size([1, 10, 98, 98])
torch.Size([10, 5, 3, 3])

在这个实例中,输出的conv_layer.weight.shape中,10就是out_channels,5就是in_channels

1 * 1卷积核的作用

可以在改变图像通道数的同时,比使用3 * 3或者5 * 5 卷积核的计算量小。
举例说明:

  • 在下面这个例子中(加了Padding),用了5*5的卷积将通道数由192变到了32,需要的计算量是120个million,
    对于CNN中卷积的一些理解_第4张图片
  • 当用了1*1的卷积之后,同样将通道数变为了32,但是计算量只有12个million,比之前要快10倍。
    对于CNN中卷积的一些理解_第5张图片

参考资料

[1] https://www.bilibili.com/video/BV1Y7411d7Ys?p=10

你可能感兴趣的:(深度学习,pytorch,cnn,深度学习,计算机视觉)