主要介绍几种当前常见的卷积网络结构。包括AlexNet,VGGNet,GoogleNet,ResNet等。
AlexNet
AlexNet结构获得了2012年ILSVRC的冠军。其主要结构如下,这是cs231n的课件做的一个总结:
VGGNet
VGGNet是2014年ILSVRC的分类第二名,和AlexNet相比的改进是滤波器的尺寸更小,只用3x3的滤波器;还有就是更深的网络结果。具体如下;
用3x3的滤波器的原因:3个3x3的卷积层的组合的effective of field和一个7x7的卷积层是一致的。并且还有以下两个优点:1、网络更深,引入更多非线性;
2、引入更少的参数,对于每层C个通道的结构,3层3x3的参数个数为 333CC=27CC,而1个7x7的参数为77CC=49C*C。
下面是对参数的一个分析,可见占用内存最多的层是在前面的卷积层,而拥有参数最多的层在最后的全连接层:
GoogleNet
GoogleNet结构获得2014年ILSVRC的分类第一名。它具有更深的网络结构,达到22层,但是采用了更高效的计算。
它的最大的一个亮点是采用Inception module的结构。
从前一层开始并行计算4种不同类型和参数的网络层,在depth上叠加得到输出。但是这带来一个比较大的问题就是计算量太大,因为卷积层和池化层都会保留depth,所以每个并行的层都会带来整个输出的depth的增加。这个问题的一个解决方法就是使用更小深度的1x1的卷积层来减少深度。
最后得到的优化的Inception module结构如下:
于是整个GoogleNet就以多个Inception小模块为基础搭建而成。GoogleNet还有另外一个亮点是摒弃了计算量巨大的FC层。
ResNet
ResNet结构获得了2015年ILSVRC的第一名。它的最大亮点就是采用了残差学习的新思想。它将输入的结果加到通过普通网络层的输出上形成新的输出。这样使得训练很深的网络结构变得有效。
这个方法解决了之前的一个很大的问题,事实上,在这之前,如果我们将网络层数增加到特别深的情况下,其性能是会变差的,但是并不是由过拟合造成的,而是因为太深的网络结构难以优化。
而这个残差网络就能很好解决难以优化的问题。
这样一来整个网络结构就如下所示:
对于比较深的网络,还应采用类似GoogleNet的1x1的”bottleneck” layer来提高网络的计算效率。
代码实现
主要是基于tensorflow的一些实现。
tensorflow models
参考
cs231n spring2017 lecture9 slides
cvpr2017_tutorial_kaiminghe
AlexNet
GoogleNet
VGGNet
ResNet