太早的LeNet和AlexNet就不提了,也相对比较简单。
vgg16 vgg19
文章《VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE SCALE IMAGE RECOGNITION》
发现了小卷积核搭配更深的网络会有更好的效果。小卷积核堆叠在保持感受野不变的情况下参数更少,网络更深学习能力更强。
结构:前面一堆卷积层后面跟三层全连接层。卷积核全为3x3且全有padding,池化全为2x2,统一使用relu。
优点:1,结构简洁 2,网络深
缺点: 2,全连接层的参数太多
GoogLeNet
参考 https://my.oschina.net/u/876354/blog/1637819
提出了Inception结构,即对输入图像并行地执行多个卷积运算或池化操作,并将所有输出结果拼接为一个非常深的特征图。
Inception经历了四种阶段的发展。
Iception-v1
Inception v1 将1x1, 3x3 , 5x5的卷积操作核最大池化操作并行执行,四个输出的尺寸相同,将深度进行拼接。 3x3 和5x5前面加了1x1是为了减少输入通道减少参数
Inception-v2
将Inception的卷积核进行拆分。5x5拆成两个3x3,3x3拆成3x1和1x3
图就不贴了
Inception-v3
将7x7拆成了7x1和1x7
Inception-v4
引入了残差结构
优点:1,参数比vgg少 2,创新了网络的拓扑结构(提出了Inception)
ResNet
为了解决普通网络随着层数的加深性能反而下降的问题,提出了残差单元。
左图为普通的残差单元,右图为结合1x1的残差单元,能够降低参数量。
residual模块将输出分成F(x)和x两部分,其中F依然是x的函数,也就是说F实际上是对于x的补充,是对于x的fine-tuning,当x已经是最优时,F (x)就会趋于0.
可能会出现x和F(x)第三个通道数不相等的情况,就要补0或用1x1卷积核处理。
DenseNet
参考 https://zhuanlan.zhihu.com/p/37189203
基本思路与ResNet一致,但是它建立的是前面所有层与后面层的密集连接(dense connection)
对于一个
L
L
L 层的网络,DenseNet共包含
L
(
L
+
1
)
2
\frac{L(L+1)}{2}
2L(L+1)个连接。同时,其连接不是像resnet一样元素相加,而是将所有特征图合并(concat)起来。
DenseNet的网络结构主要由DenseBlock和Transition组成. DenseBlock 用于互联(DenseBlock内各层的尺寸应该保持相等),Transition用于降维。
DenseBlock中各个层卷积之后均输出
k
k
k 个特征图假定输入层的特征图channel为
k
0
k_0
k0, 则第
l
l
l层的特征图channel数为
k
0
+
k
(
l
−
1
)
k0+k(l-1)
k0+k(l−1)
到了后面特征图的channel数会非常大,则同样的可以用1x1的卷积核处理。
优点:较浅的层数就能接近很深的ResNet效果
缺点:比较费显存,因为前面的特征图都要保留
MobileNet
MobileNet是一种轻量级网络,作者提出了深度可分离卷积(depthwise separable convolution)。
传统的卷积需要计算量为
D
F
∗
D
F
∗
D
k
∗
D
k
∗
M
∗
N
D_F*D_F*D_k*D_k*M*N
DF∗DF∗Dk∗Dk∗M∗N,其中
D
F
D_F
DF是特征图的边长,
D
k
D_k
Dk是卷积核的边长,M是输入通道数,N是输出通道数。
深度可分离卷积将卷积分成两步:depthwise和pointwise。depthwise按照通道进行计算按位相乘的计算,此时通道数不改变,计算量为
D
F
∗
D
F
∗
D
k
∗
D
k
∗
M
D_F*D_F*D_k*D_k*M
DF∗DF∗Dk∗Dk∗M。然后1*1的卷积核进行传统的卷积运算,此时通道数可以进行改变,计算量为
D
k
∗
D
k
∗
M
∗
N
D_k*D_k*M*N
Dk∗Dk∗M∗N。总的计算量降为原来的
1
N
+
1
D
k
∗
D
k
\frac{1}{N}+\frac{1}{D_k*D_k}
N1+Dk∗Dk1。
参数也减少了。
下图为对比
可以发现深度可分离卷积还能增加网络的非线性。
下图为MobileNet结构
pytorch中depthwise是通过分组卷积实现的。
ShuffleNet
ShuffleNet也是一种轻量网络,相当于ResNet和MobileNet的结合。下图展示了ShuffleNet单元:
其中(b)(c)中的GConv表示分组卷积。然而导致模型的信息流限制在各个Group内,组与组之间没有信息交换,影响模型的表示能力,所以引入Channel Shuffle操作。
缺点:1,Channel Shuffle操作耗时 2,Channel Shuffle有太多的人工干预,不符合神经网络的特点。