修改时间:①19/9/11
添加一个文章 (19/9/28)
12种卷积方法(含1x1卷积、转置卷积和深度可分离卷积等)
英文原文地址
一、一维卷积 Conv1d
一维卷积常用于序列模型,自然语言处理领域。
输入输出数据格式:
in/out:(batch_size , channel , length)
torch.nn.modules.conv.Conv1d def __init__(self,
in_channels: int,
out_channels: int,
kernel_size: Any,
stride: Any = ...,
padding: Any = ...,
dilation: Any = ...,
groups: int = ...,
bias: bool = ...,
padding_mode: str = ...) -> None
可以把图片改成[b,c,h*w] 输入到一维卷积中
二、二维卷积 Conv2d
二维卷积常用于计算机视觉、图像处理领域。
输入输出数据格式
input : (batch_size , channel , height , width)
out : (batch_size , channel , height , width)
# Conv2d的规定输入数据格式为(batch, channel, Height, Width)
def __init__(self,
in_channels: int,
out_channels: int,
kernel_size: Any,
stride: Any = ...,
padding: Any = ...,
dilation: Any = ...,
groups: int = ...,
bias: bool = ...,
padding_mode: str = ...) -> None
假设输入数据 x 为 [5,3,28,28] 即 batch_size 为 5 ,通道数为3,长宽都为28;kernel 为 2*2 大小,深度为6
- in_channels : 输入数据的通道数,如果是图片数据那么就是色彩通道,如彩色图片的 R G B 三个通道。(数据x中的3)
- out_channels:这个叫法易混淆,这个是指卷积核的通道数,也就是卷积核的深度(kenel 中的深度 6 )
- kernel_size: 卷积核尺寸 (上面的 2*2) stride : 卷积核移动的步长 padding :输入的每一条边补充0的层数
# 对于例子中的
layer = nn.Conv2d(3,6,kernel_size =2,stride =1,padding =1)
n
o
u
t
=
[
n
i
n
+
2
p
−
k
s
]
(
下
采
样
)
+
1
n_{out}=[\frac{n_{in}+2p-k}{s}]_{(下采样)}+1
nout=[snin+2p−k](下采样)+1
三、三维卷积 Conv3d
# Conv3d的规定输入数据格式为(batch, channel, Depth, Height, Width)
torch.nn.modules.conv.Conv3d def __init__(self,
in_channels: int,
out_channels: int,
kernel_size: Any,
stride: Any = ...,
padding: Any = ...,
dilation: Any = ...,
groups: int = ...,
bias: bool = ...,
padding_mode: str = ...) -> None
# 参数group的作用为:将输入数据按通道顺序分组, 每组有in_channel/group个通道.(例:group为2时,输入数据前一半通道为一组)
# 同时, 每组对应的kernel个数, 从原来的out_channel变为outchannel/group.
# 此处的kernel为三维及以上结构,而filter特指二维层状的过滤器。
# 原来的情况中, 每个生成的特征图都有所有通道的贡献.
# 而现在, 特征图仅由其所在group对应的通道卷积构成.
# 简而言之, group参数的目的就是将原本的大卷积分成多个并联(side by side)的小卷积
# 另: 在in_channel不变的情况下, 当group>1时, kernel总数不变, 而filter总数缩小group倍.
# 而在filter、kernel总数不变的情况下, group增大, 需要的in_channel按同样比例增大.
# 参数dilation的作用为: 控制卷积核元素的间隔大小.具体可搜索“空洞卷积”