VGG历史

VGGNet是牛津大学计算机视觉组(Visual Geometry Group)和Google DeepMind公司的研究员一起研发的卷积神经网络。VGGNet探索了卷积神经网络的深度与其性能之间的关系,通过反复的使用3x3的小型卷积核和2x2的最大池化层,VGGNet成功地构筑了16~19层深的卷积神经网络。

VGG网络结构


首先解释一下图中的结构,ABCDE分别为当时VGG项目组测试的不同的网络结构,对于不同的结构进行了效果上的比较,从中发现LRN(local response normalization)好像并没什么用,之后就在后面的结构中舍弃了。图中D和E分别为VGG16和VGG19。

这里献上一个比较直观的结构图。

VGG16网络的好处

接触过深度学习的应该都知道最早的卷积神经网络都是通过比较大的卷积核进行卷积来提取特征的(例如AlexNet,LeNet),虽然卷积核的尺寸越大,越能够总结空间信息。但是同样也增加了参数的数量,提高了计算量。而VGG网络通过每个block中多个3x3 的卷积核来代替之前的大尺寸卷积核,可以说是非常的nice!举个例子,用3个3x3的卷积核来卷积得到像素对应的感受野大小与一个7x7卷积核得到的感受野大小是一样的。但是,参数量却是差了近一倍(3x3x3=27,7x7=49)。

各模块的讲解

相信你在学习深度学习网络的过程中,一定会听说过以下几个名词:卷积操作、池化操作、归一化操作、非线性变换(激活函数/ReLu)、感受野等。【这里大家需要好好理解,对于每一步的前后联系和目的一定要好好思考

0)感受野
其实就是指一个像素点和之前的多少个像素有关联。例如下面图示中的3x3卷积操作,Convolved Feature的一个像素点对应的感受野大小就是3x3=9。
1)卷积操作

图中用一个简单的动态图很好的表述了3x3卷积的过程。这里主要包含卷积核的尺寸参数,以及卷积核的个数也就是通道数channels【默认strides=1,padding=‘SAME‘】。这里以VGG16的block1举例,其中包含了两个conv3-64。这里的3代表的就是3x3的卷积核尺寸,而64就代表卷积核的个数,也就是得到的feature map的通道数。这里也顺便总结一下卷积的好处和一些trick。

参数共享:也就是说一个卷积核对图像进行卷积时,里边的参数是不变的。直观点理解,就是尺度不变性,这就使得网络的容忍能力加强。就好比一个杯子它横放和竖放人都能够将它辨别出来一样。

low/high-level feature map:即低阶/高阶特征。这是随着卷积网络的加深对不同深度的feature map的取名。低阶特征可以理解为颜色、边缘等特征,就好比是一个图片中车的轮廓。 高阶特征可以理解为是更加抽象的特征,相当于更加细化的,比如说车中车轮,以及车轮中的车胎等。而通过卷积网络深度的增加,提取到的最后的高阶特征就是组成元素的基本组成单位:比如点、线、弧等。而最后的全连接层的目的其实就是进行这些高阶特征的特征组合

ReLu和BN:即为激活函数层和归一化层。激活函数层的目的就是为了非线性化,得到结果的非线性表达。而归一化BN层,它能够防止梯度爆炸和梯度弥散,而且对网络的收敛也有好处。Conv+BN+relu基本上都会一起使用。

2)池化操作

池化操作主要包含最大池化和平均池化:
最大池化:其实就是降低维度,提取图像的主要特征。
平均池化:取一个区域的平均值,用来保留图像的背景信息。

对于卷积和池化一些详细的参数介绍可以参照:
https://blog.csdn/errors_in_life/article/details/65950699

小结

VGGNet的好处真是太多了
1. 图片具有天然的空间结构信息,而卷积操作恰恰就是很好的利用了这种空间结构信息。而且每个block中通过多个Conv的操作,即减少了参数量还保留了同样的感受野。
2. 通过网络结构的加深,网络能够提取更加抽象的高阶特征,这也就是为什么最后提取了512通道的feature map。
3. 说明了随着网络的加深对精度的提升有很大的帮助
4. 缺点:它的参数量太大,耗费了很多的计算资源,这主要是因为最后的三个全连接层。而后也提出了Inception v1、v2、v3版本以及FCN等网络,都很好的解决了这些问题,有兴趣的可以自己查阅一下。

目前,深度学习还是很难去解释,对于VGGNet的理解,也仅仅都是本人的个人理解。如有偏差,非常希望大家能够在下方给我留言,大家一起讨论,互相进步。

更多推荐

快速理解卷积神经网络VGG16/VGG19,以及每个模块的作用及意义。