VGG的起源
VGG网络起源于Simonyan 和Zisserman的文章Very Deep Convolutional Networks for Large Scale Image Recognition,其中VGG是两位作者所在的牛津大学视觉几何组(Visual Geometry Group)的缩写。
VGG网络在2014年ImageNet图像分类与定位挑战赛中获得分类任务的第二名和定位任务的第一名,因其优异的性能为人熟知。该网络的主要工作证明了增加网络深度能够在一定程度上影响网络的最终性能。
VGG网络的基本结构
VGG网络根据卷积核大小和尺寸的不同可以分为六种配置方式,其中最为人所熟知的配置方式为VGG16和VGG19两种结构。
VGG网络结构如下图所示,其中VGG16的基本结构如图中的绿色标注部分,共包含:
13个卷积层(Convolutional Layer),分别用conv3-xxx表示
3个全连接层(Fully Connected Layer),分别用FC-xxxx表示
5个池化层(Pool layer),分别用maxpool表示
注意一些表示方法:
Conv3-512 第三层卷积后围堵编程512;
Conv3_2 s=2 第三层卷积层里面的第二子层,滑动步长等于2(每次移动2个格子)
卷积层和全连接层具有权重系数,因此也被称之为权重层,总数目为13+3=16,这即是VGG16中16的来源。(池化层不涉及权重,因此不属于权重层,不被计数)
尽管VGG的结构简单,但是所包含的权重数目非常大,达到了惊人的139,357,544个参数,这些参数包括剪辑和权重和全连接层权重。
例如:第一层卷积,由于输入图像的通道数为3,网络必须学习大小为3*3,通道数为3的卷积核,这样的卷积核有64个,因此总共有(3*3*3)*64=1728个参数。
计算全连接层权重参数数目的方法为:前一层节点数*本层的节点数 前一层维度*本层的节点数,因此,全连接层的参数分别为:
7*7*512*4096=1027,645,444
4096*4096=16,781,321
4096*1000=4096000
FeiFei Li教授在CS231的课件中给出了整个网络的全部参数计算过程(不考虑偏置),如下:
其中蓝色为计算权重参数数量,红色为计算所需内存容量。
VGG的优缺点
VGG的优点:
1. 结构简洁,整个网络都是用了同样大小的卷积核(3*3)和最大池化尺寸(2*2);
2. 几个小滤波器(3*3)卷积层的组合要比一个大滤波器(5*5或7*7)卷积层好;
3. 验证了通过不断加深网络结构可以提升性能;
VGG的缺点:
VGG耗费了更多计算资源,并且使用了更多的参数(这里不是3*3卷积的锅),导致更多的内存占用(140M),其中绝大多数的参数都是来自于第一个全连接层。并且VGG共有3个全连接层。其缺点可以总结为以下两点:
1.训练时间过长,调参难度大;
2.需要的存储容量大,不利于部署;
PS:目前一些文章发现,VGG网络中的全连接层即使被去除,对于性能也没有什么影响,这样就显著降低了参数数量。
注:很多预训练方法均使用CGG的Model(16或者19),VGG相对其他的方法,参数空间很大,最终的model有500多M,AlexNet只有200M,GoogLeNet更少,所以train一个vgg模型通常要花费更长的时间,所幸有公开的pretrained model让我们很方便的使用。
关于感受野:
假设你一层一层的重叠了3个3*3的卷积层(层与层之间有非线性激活函数)。在这个排列下,第一个卷积层中的每个神经元都对输入数据体有一个3*3的视野。
下一篇文章将为大家介绍一下VGG16做图像分类的实例,欢迎大家持续关注!