一、网络结构
图片输入是224*224,对图片的每个像素减去RGB的均值
采用3*3的卷积核,这种卷积核是能够获得左右、上下和中心的最小尺寸;另外还会采用1*1的卷积核,用于对输出做线性变化,stride=1,
在感受野不变的情况下,增加决策函数的非线性。使用padding以保证输入和输出的图片大小一致;一共有5层池化层,2*2,stride=2,没有使用overlapping
两个全连接隐层有4096个单元,每个隐层采用ReLu进行非线性化
采用对A结构进行了
Local Response Normalisation (LRN),但是没有明显的效果
VGG网络采用两个3*3的filter代替5*5,用三个3*3代替7*7,有以下几个好处:
1. 让决策函数能更好的判别(makes the decision function more discriminative)
2.减少参数个数(3*3^2 *C^2=27C^2) 7^2C^2
= 49C^2
采用小的卷积核不是第一次,但是本结构是在深度网络中第一次应用,也是第一次在
ILSVRC这样的大数据集上使用。VGG和GoogLeNet是同一年相互独立开发出来的,GoogLeNet的网络也很深(22层)除了采用3*3的卷积核外,还采用了1*1和5*5两种,但是后者比前者网络结构更复杂,也需要消耗更多的空间
二、训练过程:
采用mini-batch(258),带动量(0.9)的梯度下降法,采用的权重衰减,并且对两层全连接层采用dropout(0.5),学习率为0.01,当精度停止提高时,将学习率除以10,总共除了三次,进行了74
epochs(备注:一个epochs就是把数据完整的训练一遍)
和AlexNet相比,尽管参数更多,但是收敛需要的epochs却更少了,有两个原因:1)更深的网络和更小的卷积核带来的隐含正则化;2)特定层的预初始化
首先训练结构比较浅的A网络,因为A网络足够浅,训练过程不衰减权重。当A训练完成之后,将A的前四层卷积层和三个全连接层的系数用于更深的网络,对于中间新的卷积层随机初始化权重(均值0,方差0.01,b为0)。这个过程就是上一段中所提及的方法2
关于训练图像尺寸的选择,有两种方案:一是固定尺寸,采用256和384两种,先训练256,然后将参数配置到384的结构中,然后降低学习率至0.001;第二种方案是多尺寸,即在一定的范围内(如256~512)均可,这种方法相当于做了data augumentation,可以识别不同尺寸的图片,这种技术被称为数据抖动(scale jittering)
三、测试结果
从上图可以看出:
1. 随着深度的增加,错误率在逐渐降低
2. 从C和B的比较看出,多加了一层非线性层,提高了准确率
3. 从D和C的比较看出,采用3*3的卷积代替1*1的卷积,能够检测出更多的图像上下文信息,比单纯的观测一个像素点,识别效果要更好(
it is also important to capture spatial context by using conv. filters with non-trivial receptive fields (D is better than C))
4. 将B的每层的两个3*3换成一个5*5的卷积层,效果不如B好,从而得出,采用小卷积核的深层网络,要由于浅层大卷积核的网络
5. 多尺寸的输入图片效果要好于单一尺寸的图片,这也说明了data arugumentation的重要性