CNN经典算法VGGNet介绍(论文详细解读)

CNN经典算法VGGNet介绍

本文是深度学习经典算法解读的一部分,原文发之:https://www.datalearner.com/blog/1051558603213207

来源论文:Simonyan, Karen, and Andrew Zisserman. “Very deep convolutional networks for large-scale image recognition.” arXiv preprint arXiv:1409.1556 (2014).

VGGNet(Visual Geometry Group)是2014年又一个经典的卷积神经网络。VGGNet最主要的目标是试图回答“如何设计网络结构”的问题。随着AlexNet提出,很多人开始利用卷积神经网络来解决图像识别的问题。一般的做法都是重复几层卷积网络,每个卷积网络之后接一些池化层,最后再加上几个全连接层。而VGGNet的提出,给这些结构设计带来了一些标准参考。

一、VGGNet的出发点

在VGGNet的论文中,作者主要探究了卷积网络深度的影响。其最主要的贡献是使用较小的卷积核,但较深的网络层次来提升深度学习的效果。在此之前,有很多研究者利用如较小的receptive window size和步长等技巧来提升网络效果。而在这边文章中,作者的主要目标是探索深度学习深度的影响。作者固定了网络中其他的参数,通过缓慢的增加网络的深度来探索网络的效果。

先前的网络使用的接受野都是较大的。例如AlexNet的第一层使用的是11x11、步长为4的卷积核扫描。而VGGNet全部使用很小的3x3、步长为1的卷积核来扫描输入。可以看到,如果将两个这样的卷积核堆起来,和5x5的卷积核效果一样,如果是三个堆叠,其效果等同于7x7。

这里解释一下,“堆叠”的意思是先用3x3扫描一次,再用3x3对结果继续扫描一次。所以,假如输入的长为n,根据计算公式【(n - k + p + s) / s,这里的n是输入大小假设输入是nxn,k是卷积核大小,p是padding的大小两侧一共填充的大小,s是步长】那么3x3扫描一次的结果是(n - 3 + 1) / 1 = n - 2,再扫描一次就是(n - 2 - 3 + 1) / 1 = n - 4。如果卷积核是5x5,那么扫描一次n的输入就是(n - 5 + 1) / 1= n - 4。其结果是一样的。VGGNet思想就是用更小更深的卷积核代替大的卷积核。

作者是这样解释为什么使用3个3x3卷积核堆叠代替一个7x7的卷积核的:首先,使用更深的层可以使得函数具有更好的分辨能力;其次,通过这样做也可以减少参数。例如,假设使用3x3的卷积核,那么堆叠3次3x3的卷积网络的参数是3(3^{2}C^2)=27C^2​​,而使用一个7x7的卷积核的参数是7^2C^2=49C^2,这里的C是输入和输出的通道数。

在之前的论文中,也有人使用了较小的卷积核,但是他们的网络都比VGGNet的网络深度浅。

二、VGGNet网络结构

CNN经典算法VGGNet介绍(论文详细解读)_第1张图片

从上图可以看到,A-E的网络深度都是越来越深的,其主要的区别在于网络深度。卷积层参数的含义是”conv(receptive filed size)-(number of channels)”。作者使用的激活函数是ReLU,表中为了简洁没有列出来了。表2列出了所有网络的参数数量。

三、VGGNet的优缺点

优点:

  • VGGNet的结构非常简洁,整个网络都使用了同样大小的卷积核尺寸(3x3)和最大池化尺寸(2x2)。
  • 几个小滤波器(3x3)卷积层的组合比一个大滤波器(5x5或7x7)卷积层好:
  • 验证了通过不断加深网络结构可以提升性能。

缺点:

  • VGG耗费更多计算资源,并且使用了更多的参数(这里不是3x3卷积的锅),导致更多的内存占用。其中绝大多数的参数都是来自于第一个全连接层。VGG可是有3个全连接层啊!

相比较而言,VGGNet的参数数量还是太多了,所以比较难以处理。但是,VGGNet提供了简单统一的网络结构标准,即所有的卷积核大小都是3x3的。而且manxpooling都是每2(也有3次的)次卷积之后进行一次,卷积核的数量在每次maxpooling之后都翻一倍。此外,VGGNet最重要的贡献是证明了分类任务可以通过使用小的卷积核增加CNN的深度来提高精度。同时,作者公开了VGGNet的权重配置,它的预训练结果被用来处理很多任务,也作为特征抽取的基准被很多研究对比使用。

四、VGGNet预训练模型及代码资源

VGGNet被用来作为预训练也是广为人知的,下面列举几个预训练的模型。

Keras:https://gist.github.com/baraldilorenzo/07d7802847aaad0a35d3
Tensorflow: http://download.tensorflow.org/models/vgg_19_2016_08_28.tar.gz
PyTorch各种版本:https://chsasank.github.io/vision/_modules/torchvision/models/vgg.html

VGGNet代码:https://gist.github.com/baraldilorenzo/07d7802847aaad0a35d3

 

 

 

 

你可能感兴趣的:(深度学习的经典算法的论文,解读和代码实现)