VGG(Pytorch实现)

VGG简介

论文:VGG原文(可直接下载,可能加载较慢,稍等即可)

1.背景介绍

VGG模型是2014年ILSVRC竞赛的第二名,第一名是GoogLeNet。但是VGG模型在多个迁移学习任务中的表现要优于googLeNet。而且,从图像中提取CNN特征,VGG模型是首选算法。它的缺点在于,参数量有140M之多,需要更大的存储空间。但是这个模型很有研究价值。

2.网络结构

首先放一张官方的各种VGG的网络结构

VGG(Pytorch实现)_第1张图片

再来一张我觉得结构更加清晰的VGG16的结构图:(图片出自:https://blog.csdn.net/qq_29893385/article/details/81197471

VGG(Pytorch实现)_第2张图片

其实可以看出VGG只是对网络层进行不断的堆叠,并没有进行多大的创新,而增加深度确实可以一定程度上改善模型效果。

3.VGG特点

1. 小卷积核

相较与AlexNet,VGG最大的改进或者说区别就是用小size的Filter代替大size的Filter。23*3的卷积层连接,就达到了5*5的效果,33*3的卷积层连接,就达到了7*7的效果。

举例: 假设输入图片的大小为28*28,如果我们使用5*5的卷积核,得到的输出将是:(28 - 5)/ 1 + 1 = 24

           又假如我们使用2个卷积核为3*3的卷积核(2个是指两层):

                 第一层卷积(3*3)得的结果为:(28 - 3)/ 1 + 1 = 26

                 第二层卷积(3*3)得的结果为:(23 - 3)/ 1 + 1 = 24

          所以我们最终的结果和5*5的卷积核是一样的!!

使用多个较小卷积核的卷积层代替一个卷积核较大的卷积层,一方面可以减少参数,另一方面相当于进行了更多的非线性映射,可以增加网络的拟合 / 表达能力。

减少参数:

VGG(Pytorch实现)_第3张图片

2.与AlexNet的区别

1.所有的卷积层使用的都是3*3的卷积核(对比实验中用到了1*1的卷积核,它的作用在于引入更多的非线性。最终的VGG16和VGG19都不包含1*1的卷积核,所以它的出现只是为了做对比实验)

2.使用max pooling,但并不是所有的卷积层后面都跟着pooling层,一共只有5个max pooling层。kernel大小是2*2,步长为2,也就是说,和AlexNet不同,VGGNet使用的是不重叠的pooling。

3.没有使用AlexNet中的LRN技术。这是因为后面的实验中证明了使用LRN对性能并没有提升作用,反而增加内存和时间消耗。(在我的上篇博客AlexNet中已经提过LRN的争议性)
               

你可能感兴趣的:(深度学习)