VGG首次提出的论文
Very Deep Convolutional Networks for Large-Scale Image Recognition
很长有40页,是2014年发表的。
1、使用块的VGG网络
VGG是一个使用块的网络
AlexNet最大的问题是什么呢,就是长的不规则,就像是一个变大的LeNet,这里加一点那里加一点。结构不那么清晰,大家也会问为什么要这样为什么要那样,如果我怎么变深怎么变宽我都不知道怎么变怎么办。
如果我需要更大更深,我需要一个更好的设计思想,把整个的设计框架搞得更加regular一点,这就是VGG的思路。
2、VGG
AlexNet比LeNet更大更深更好,深度学习就要更大、更深、数据更多,直到今天也是在干这个事情,就像GPT-3那些模型也是这样,深度学习最近的十几年就是怎么设计的更深更大。
- AlexNet比LeNet更深更大来得到更好精度
- 能不能更深和更大
- 选项
- 更多的全连接层(太贵)
- 更多的卷积层
- 将卷积层组合成块
一个就是有更多的全连接层,全连接是一个很贵的东西,特别的占内存,也特别需要计算资源。
第二个就是选用更多的卷积层,AlexNet的卷积层做的好像不是那么好,先把LeNet弄大再加三个卷积层。
VGG的思想就是想把这些东西组成一些小块,一些卷积块,再把卷积块给堆叠上去。先拼小块,同样的东西重复几次。
因此提出了VGG块的东西
3、VGG块
VGG块 AlexNet的一部分
AlexNet是连续3个一模一样的卷积层,放到一起最后加个池化层。
VGG将这个设计思路进行了扩展,也是3*3的卷积层,这个卷积选多少个都可以,可以重复n次,所以有n层这第一个超参数,有m个通道,AlexNet有384个输出通道,而VGG是可以随意配置,随便选什么都可以。但是VGG却用回了LeNet那个最大池化的那个窗口,stride=2,AlexNet是3*3,VGG是2*2。这些东西合在一起叫做VGG块,核心思想就是用大量的3*3的卷积形成VGG块,然后大量堆积VGG块来形成最后的网络。
- 深VS宽?
- 5*5卷积
- 3*3卷积
- 深但窄效果更好
- VGG块
- 3*3卷积(填充1)(n层,m通道)
- 2*2最大池化层(步幅2)
作者也试过用5*5来做这个块,但是同样的计算开销情况下(堆叠比较多的3*3和稍微少一点的5*5使得消耗相同计算资源),3*3的效果更好
4、VGG架构
从全局来比较,VGG就是替换掉了AlexNet整个卷积的架构,AlexNet就是一个大的LeNet,VGG将AlexNet的卷积部分替换成n个VGG块串在一起。
- 多个VGG块后接全连接层
- 不同次数的重复块得到不同的架构VGG-16,VGG-19,...
5、发展进度
- LeNet
- 2卷积+2池化层
- 2全连接层
- AlexNet
- 更大,更深
- Relu,Dropout,数据增强
- VGG
- 更大更深的AlexNet(重复的VGG块)
所以VGG就是将AlexNet中间的卷积部分留下来复制粘贴几次成了VGG,前面的那个几个卷积丢掉,更大更深的AlexNet。
这是GluonCV里面的Model Zoo,x轴是不同网络每秒钟能做的sample的个数,越到右边就表示越快,y轴是在ImageNet上的准确率,越高越好。
可以看到AlexNet,很快但是精度不高,VGG对于AlexNet提升很大的,但是会比AlexNet慢个五六倍,因为更深了。这里面的球越大表示内存越多,VGG是一个内存很大的网络。因为VGG有不同的选项,可以选择复制粘贴的次数,所以VGG在这里有好几个,一系列的模型,但是我们的硬件也一直在上涨,所以问题不大。
但是可以看到,后面那些新的网络,在性能和精度上都不占优势。VGG是13年的冠军,后面那些都是16、17年的网络。
6、总结
- VGG就是使用可重复使用的卷积块来构建深度卷积神经网络
- 不同卷积块个数和超参数可以得到不同复杂层度的变种
通过配置不同个数的VGG块和不同通道数得到各种各样的VGG网络。
使用可重复的块来构建深度神经网络这是一个非常重要的深度学习思想,不同配置的网络也会有不同的精度和性能,高配就是跑的慢精度高,低配就是跑得慢精度低,跑得慢就可以用来刷榜。 这两个思想深深影响了后面的深度神经网络的发展。