【深度学习】卷积基础知识

卷积类型

相关文章:

Convolution arithmetic(不同卷积的 gif 图)
一文读懂深度学习中的各种卷积
一文带你了解深度学习中的各种卷积(上)
一文带你了解深度学习中的各种卷积(下)

深度学习中的卷积大致可以为以下几类:

  • 2D卷积
  • 3D卷积
  • 1*1卷积
  • 转置卷积(Transposed Convolution)
  • 膨胀卷积 / 扩张卷积 / 空洞卷积(Dilated Convolution)
  • 可分卷积(Separable Convolution)
    a). 空间可分卷积(Spatially Separable Convolution)
    b). 深度可分卷积(Depthwise Separable Convolution)

关于转置卷积的详细介绍可以参考另外一篇博客:
【深度学习】转置卷积(Transposed Convolution)

卷积神经网络中的卷积函数

相关文章:

A guide to convolution arithmetic for deep learning
卷积神经网络特征图大小的计算
TensorFlow中CNN的两种padding方式“SAME”和“VALID”
TensorFlow中的Padding到底是怎么在填充?
Tensorflow卷积与反卷积

Pytorch中的卷积函数

2D Convolutiontorch.nn.Conv2d

计算特征图大小

I n p u t : ( N ,    C i n ,    H i n ,    W i n ) Input:\left(N,\;C_{in},\;H_{in},\;W_{in}\right) Input:(N,Cin,Hin,Win)
O u t p u t : ( N ,    C o u t ,    H o u t ,    W o u t ) Output:\left(N,\;C_{out},\;H_{out},\;W_{out}\right) Output:(N,Cout,Hout,Wout)

H o u t = ⌊ H i n + 2 × p a d d i n g [ 0 ] − d i l a t i o n [ 0 ] × ( k e r n e l _ s i z e [ 0 ] − 1 ) − 1 s t r i d e [ 0 ] + 1 ⌋ H_{out}=\left\lfloor\frac{H_{in}+2\times padding\lbrack0\rbrack-dilation\lbrack0\rbrack\times\left(kernel\_size\lbrack0\rbrack-1\right)-1}{stride\lbrack0\rbrack}+1\right\rfloor Hout=stride[0]Hin+2×padding[0]dilation[0]×(kernel_size[0]1)1+1 W o u t = ⌊ W i n + 2 × p a d d i n g [ 1 ] − d i l a t i o n [ 1 ] × ( k e r n e l _ s i z e [ 1 ] − 1 ) − 1 s t r i d e [ 1 ] + 1 ⌋ W_{out}=\left\lfloor\frac{W_{in}+2\times padding\lbrack1\rbrack-dilation\lbrack1\rbrack\times\left(kernel\_size\lbrack1\rbrack-1\right)-1}{stride\lbrack1\rbrack}+1\right\rfloor Wout=stride[1]Win+2×padding[1]dilation[1]×(kernel_size[1]1)1+1

2D Transposed Convolutiontorch.nn.ConvTranspose2d

计算特征图大小

I n p u t : ( N ,    C i n ,    H i n ,    W i n ) Input:\left(N,\;C_{in},\;H_{in},\;W_{in}\right) Input:(N,Cin,Hin,Win)
O u t p u t : ( N ,    C o u t ,    H o u t ,    W o u t ) Output:\left(N,\;C_{out},\;H_{out},\;W_{out}\right) Output:(N,Cout,Hout,Wout)
H o u t = ( H i n − 1 ) × s t r i d e [ 0 ] − 2 × p a d d i n g [ 0 ] + d i l a t i o n [ 0 ] × ( k e r n e l _ s i z e [ 0 ] − 1 ) + o u t p u t _ p a d d i n g [ 0 ] + 1 H_{out}=\left(H_{in}-1\right)\times stride\lbrack0\rbrack-2\times padding\lbrack0\rbrack+dilation\lbrack0\rbrack\times\left(kernel\_size\lbrack0\rbrack-1\right)+output\_padding\lbrack0\rbrack+1 Hout=(Hin1)×stride[0]2×padding[0]+dilation[0]×(kernel_size[0]1)+output_padding[0]+1 W 0 u t = ( W i n − 1 ) × s t r i d e [ 1 ] − 2 × p a d d i n g [ 1 ] + d i l a t i o n [ 1 ] × ( k e r n e l _ s i z e [ 1 ] − 1 ) + o u t p u t _ p a d d i n g [ 1 ] + 1 W_{0ut}=\left(W_{in}-1\right)\times stride\lbrack1\rbrack-2\times padding\lbrack1\rbrack+dilation\lbrack1\rbrack\times\left(kernel\_size\lbrack1\rbrack-1\right)+output\_padding\lbrack1\rbrack+1 W0ut=(Win1)×stride[1]2×padding[1]+dilation[1]×(kernel_size[1]1)+output_padding[1]+1

Tensorflow中的卷积函数

2D Convolutiontf.nn.conv2d

计算特征图大小

I n p u t : ( N ,    C i n ,    H i n ,    W i n ) Input:\left(N,\;C_{in},\;H_{in},\;W_{in}\right) Input:(N,Cin,Hin,Win)
O u t p u t : ( N ,    C o u t ,    H o u t ,    W o u t ) Output:\left(N,\;C_{out},\;H_{out},\;W_{out}\right) Output:(N,Cout,Hout,Wout)

  • padding = “SAME” :
    H o u t = ⌈ H i n s t r i d e [ 0 ] ⌉ H_{out}=\left\lceil\frac{H_{in}}{stride\lbrack0\rbrack}\right\rceil Hout=stride[0]Hin W o u t = ⌈ W i n s t r i d e [ 1 ] ⌉ W_{out}=\left\lceil\frac{W_{in}}{stride\lbrack1\rbrack}\right\rceil Wout=stride[1]Win
    等价于
    H o u t = ⌊ H i n + 2 × p a d d i n g [ 0 ] − k e r n a l _ s i z e [ 0 ] s t r i d e [ 0 ] + 1 ⌋ = ⌊ H i n s t r i d e [ 0 ] + s t r i d e [ 0 ] − 1 s t r i d e [ 0 ] ⌋ H_{out}=\left\lfloor\frac{H_{in}+2\times padding\lbrack0\rbrack-kernal\_size\lbrack0\rbrack}{stride\lbrack0\rbrack}+1\right\rfloor=\left\lfloor\frac{H_{in}}{stride\lbrack0\rbrack}+\frac{stride\lbrack0\rbrack-1}{stride\lbrack0\rbrack}\right\rfloor Hout=stride[0]Hin+2×padding[0]kernal_size[0]+1=stride[0]Hin+stride[0]stride[0]1 W o u t = ⌊ W i n + 2 × p a d d i n g [ 1 ] − k e r n a l _ s i z e [ 1 ] s t r i d e [ 1 ] + 1 ⌋ = ⌊ W i n s t r i d e [ 1 ] + s t r i d e [ 1 ] − 1 s t r i d e [ 1 ] ⌋ W_{out}=\left\lfloor\frac{W_{in}+2\times padding\lbrack1\rbrack-kernal\_size\lbrack1\rbrack}{stride\lbrack1\rbrack}+1\right\rfloor=\left\lfloor\frac{W_{in}}{stride\lbrack1\rbrack}+\frac{stride\lbrack1\rbrack-1}{stride\lbrack1\rbrack}\right\rfloor Wout=stride[1]Win+2×padding[1]kernal_size[1]+1=stride[1]Win+stride[1]stride[1]1
    其中 p a d d i n g = ( k e r n a l _ s i z e − 1 ) / 2 padding=\left(kernal\_size-1\right)/2 padding=(kernal_size1)/2,此时可以保证所有的内容都参与卷积,不会丢弃任何列
    根据上述公式可以逆向推导padding值:
    p a d d i n g [ 0 ] = 1 2 [ ( H o u t − 1 ) × s t r i d e [ 0 ] + k e r n a l _ s i z e [ 0 ] − H i n ] padding\lbrack0\rbrack=\frac12\left[\left(H_{out}-1\right)\times stride\lbrack0\rbrack+kernal\_size\lbrack0\rbrack-H_{in}\right] padding[0]=21[(Hout1)×stride[0]+kernal_size[0]Hin] p a d d i n g [ 1 ] = 1 2 [ ( W o u t − 1 ) × s t r i d e [ 1 ] + k e r n a l _ s i z e [ 1 ] − W i n ] padding\lbrack1\rbrack=\frac12\left[\left(W_{out}-1\right)\times stride\lbrack1\rbrack+kernal\_size\lbrack1\rbrack-W_{in}\right] padding[1]=21[(Wout1)×stride[1]+kernal_size[1]Win]

  • padding = “VALID” :
    H o u t = ⌈ H i n − k e r n a l _ s i z e [ 0 ] + 1 s t r i d e [ 0 ] ⌉ H_{out}=\left\lceil\frac{H_{in}-kernal\_size\lbrack0\rbrack+1}{stride\lbrack0\rbrack}\right\rceil Hout=stride[0]Hinkernal_size[0]+1 W o u t = ⌈ W i n − k e r n a l _ s i z e [ 1 ] + 1 s t r i d e [ 1 ] ⌉ W_{out}=\left\lceil\frac{W_{in}-kernal\_size\lbrack1\rbrack+1}{stride\lbrack1\rbrack}\right\rceil Wout=stride[1]Winkernal_size[1]+1
    等价于
    H o u t = ⌊ H i n − k e r n a l _ s i z e [ 0 ] s t r i d e [ 0 ] + 1 ⌋ = ⌊ H i n − k e r n a l _ s i z e [ 0 ] s t r i d e [ 0 ] ⌋ + 1 H_{out}=\left\lfloor\frac{H_{in}-kernal\_size\lbrack0\rbrack}{stride\lbrack0\rbrack}+1\right\rfloor=\left\lfloor\frac{H_{in}-kernal\_size\lbrack0\rbrack}{stride\lbrack0\rbrack}\right\rfloor+1 Hout=stride[0]Hinkernal_size[0]+1=stride[0]Hinkernal_size[0]+1 W o u t = ⌊ W i n − k e r n a l _ s i z e [ 1 ] s t r i d e [ 1 ] + 1 ⌋ = ⌊ W i n − k e r n a l _ s i z e [ 1 ] s t r i d e [ 1 ] ⌋ + 1 W_{out}=\left\lfloor\frac{W_{in}-kernal\_size\lbrack1\rbrack}{stride\lbrack1\rbrack}+1\right\rfloor=\left\lfloor\frac{W_{in}-kernal\_size\lbrack1\rbrack}{stride\lbrack1\rbrack}\right\rfloor+1 Wout=stride[1]Winkernal_size[1]+1=stride[1]Winkernal_size[1]+1

卷积神经网络感受野(receptive field)计算

相关文章:

Receptive Field Calculator
calculate-receptive-field-for-vgg-16
如何计算感受野(Receptive Field)——原理
卷积神经中感受野的计算

待补充… …

卷积神经网络的计算参数及复杂度分析

相关文章:

卷积神经网络的复杂度分析
以VGG为例,分析深度网络的计算量和参数量

待补充… …

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值