【feature extractor 系列文章3】VGGNet核心贡献解读

北城以北 提交于 2020-02-08 14:11:23

问题的提出:如何增加卷积神经网络的深度

【feature extractor 系列文章2】里介绍了ZFNet,该论文里面试图分析卷积层的作用,通过转置卷积对卷积层进行了可视化,使我们知道了随着层的增加,得到的特征越来越复杂,深层的卷积操作会将浅层的特征进行重组得到更接近object级别的特征。

这里就提出了一个问题:卷积层的深度应该多少合适呢?而且层数太少肯定不太好。
于是有了一个关键的问题:怎样提高卷积网络的深度。这与后面很多论文相关,也是阅读论文的关键。
本博客的主角——VGGNet——就是针对这个问题的。

问题的本质:为什么在这之前增加深度不可行

在介绍这篇论文关键点之前,我们需要明白为什么增加深度在这之前不太可行:

1. 增加深度,在卷积设置不变化的前提下参数则会增加很多。
2. 增加深度,可能会导致梯度消失。

VGGNet主要针对第二个问题,至于第二个问题我们后面会介绍到。我们说到第一个问题,显然VGGNet就是要改变卷积层的设置来减少参数。毕竟参数过多会有两个直接性的问题——过拟合的倾向和训练时间加长(参数变多导致计算量加大)

VGGNet

增加深度这个问题在VGGNet问题中就变成了尽量减少参数,进一步转变成了如何设置卷积层

在介绍之前,我们必须要介绍一下卷积层的基本概念:
1. 卷积核大小和卷积核数量的计算
2. 感受野的计算
3. 深度

我们倒着来说,深度好理解,就是每一层卷积层就是一层。我这里从两方面来细说一下每一层卷积意味着什么。第一也就是感受野增加了,卷积核只要大于1就是有空间特征的,下一层的特征图的每一个元素对应到原始图像看的空间就大了。这是有好处的,就好比盲人摸象,只摸到耳朵不够好,只摸到腿也不好,要是每个地方都摸得到,这样的全局视野是重要的。至于感受野怎么计算,可以完全参照感受野的计算

第二,卷积计算也综合了每一个特征图或者原始图像中每个通道之间的关系。我们知道每一个通道是可以提取一个特征,通道之间的合并就意味着前一层特征之间的组合。这就是新特征的产生,可以得到更高级的特征,更复杂的。就如同积木,单个积木很简单的形状,但是即使简单的积木的多次组合就可以得到很漂亮的物体。

介绍了深度和感受野的计算,我们再来看看卷积核大小和数量。基本或经典卷积核主要有三个参数:大小size,步长stride,填充padding。卷积核本身可以认为是四维的,Cin,H,W,CoutC_{in}, H, W, C_{out} 依此分别为输入通道数,卷积核高度,卷积核宽度,输出特征图的通道数。或者也可以理解成CoutC_{out}个三维Cin,H,WC_{in}, H, W。 卷积核的参数就是:CinHWCoutC_{in}*H*W*C_{out}.

可以知道,卷积核的四个参数里面,宽度和高度是更容易控制的,它与各层之间没有关系,而两外两个则对前后层也有要求。大部分的宽度和高度都是相同的,这里就可以变成一个参数了。而这个参数在之前的文章里都比较高,AlexNet里面是11,7;ZFNet里面也都是7(虽然他们发现了减小这个参数的好处)。

我们再重新来定义问题本身:减少参数的含义。我们不希望降低感受野,但是可以通过设置卷积核的空间大小来增加深度。也就是说:降低卷积核空间大小(主要是变成3*3),而通过另一种方法而不降低感受野。应该知道减少卷积核空间大小直接减少了该层的感受野大小。

因此可以理解成,VGGNet并不是主观上增加深度,而是为了维持感受野大小。在降低卷积核大小的情况,我们可以通过增加深度来维持感受野大小

主要利用的idea就是:两个333*3的卷积核叠加得到的感受野和一个777*7卷积核得到的感受野相同,但是参数量减少,深度也增加一倍

写道这里VGGNet的主要贡献就基本上说清楚了。
重新总结一下:VGG实际上没有解决网络太深的问题,而是解决了卷积核设定的问题,也就是参数量和感受野之间的问题。而深度的问题还需要我们进一步去了解。

再就是1*1卷积的作用,这个特殊卷积层不改变感受野,但是可以用来减少和增加通道数,还可以增加特征之间的非线性(因为一般来说,卷积层之后都会有激活层)。具体细节可以看系统分析1*1卷积的作用

后续论文列表:

1 AlexNet, ZFNet - ImageNet Classification with Deep Convolutional Neural Networks - Visualizing and Understanding Convolutional Networks
2 GoogleNet (Inception, Inception v2-v3) - Going Deeper with Convolutions - Rethinking the Inception Architecture for Computer Vision
3 VGGNet Very deep convolutional networks for large-scale image recognition
4 ResNet Deep Residual Learning for Image Recognition
5 Inception v4, Inception-ResNet Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning
6 PolyNet PolyNet: A Pursuit of Structural Diversity in Very Deep Networks
7 ResNeXt Aggregated Residual Transformations for Deep Neural Networks
8 Residual Attention Net Residual Attention Network for Image Classification
9 DenseNet Densely Connected Convolutional Networks
10 FractalNet FractalNet: Ultra-deep neural networks without residuals
11 DualPath Net Dual Path Networks
12 SENet Squeeze-and-Excitation Networks
13 FPNet Feature Pyramid Networks for Object Detection
14 NASNet, PNASNet - Learning Transferable Architectures for Scalable Image Recognition - Progressive Neural Architecture Search
15 Dilated Convolutions Dilated Residual Networks
16 Deformable Convolutions Deformable Convolutional Networks
17 DiCENet DiCENet: Dimension-wise Convolutions for Efficient Networks
18 XceptionNet
19 ShuffleNet
20 MobileNets

为何要点赞?

如果本文解决了你的困惑,不妨点个赞鼓励一下。
不管你信不信,也不管你同不同意,实际上,你的每一次点赞都标志着你自身的进步。而打赏乃是点赞的高级形式
曾经有无数个点赞的机会,但是我都没有好好珍惜,假如时光可以倒流,我一定为他们也为自己点赞。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!