文章目录
- 1 卷积
- 1.1 卷积后的输出维度
- 2 反卷积
- 2.1 来源
- 2.2 原理
- 2.3 使用
- 2.3.1 padding
- 2.3.2 stride
- output_padding
- 2.3 意义
1 卷积
1.1 卷积后的输出维度
设输入维度为i x i,卷积核大小为k x k,padding为p,strides为s,则输出维度为 (i - k + 2p) / s +1
注意:除法为向下取整的除法,即3 / 2 = 1。
i - k是不考虑padding的情况下,卷积核能纵向/横向移动的次数
2 反卷积
2.1 来源
反卷积/转置卷积的操作是在《Visualizing and Understanding Convolutional Networks》中提出来的。
其只能恢复原来的大小,不能恢复原来的数值。
可参考:https://zhuanlan.zhihu.com/p/48501100《反卷积(Transposed Convolution)详细推导》
2.2 原理
A deconvolutional layer is simply a regular convolutional layer with its filters transposed. By applying these transposed filters to the output of a convolutional layer, the input can be retrieved.
2.3 使用
class torch.nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride=1, padding=0, output_padding=0, bias=True)
详细参考:https://blog.csdn.net/disanda/article/details/105762054
2.3.1 padding
padding的含义不是卷积的padding的含义,理解为kernel向输入层中间移动的次数。
padding为0时,在input(蓝色2 x 2)外面填充k - 1 = 2层
padding为1时,在input外面填充k - 2 = 1层。
下图是padding为0时的例子。
2.3.2 stride
stride是输入之间的距离,默认为1。
如果stride为2,那么每个输入之间相隔1个。
下图是stride=2的例子。
output_padding
由于卷积涉及到向下取整,所以在输出维度一定时,对应了多个可能的输入维度,可能的个数为【步长stride】。因此采用out_padding进行确定。
参考:https://zhuanlan.zhihu.com/p/485999111《【深度学习反卷积】Pytorch中反卷积的应用》
2.3 意义
反卷积是一种上采样的方法,除此之外还有反池化和双线性差值bilinear。
在图像领域可以做segmentation,在很多领域可以做cost volume。