02 Very Deep Convolutional Networks For Large-Scale Image Recognition
跟AlexNet比有什么不一样:层数更深了,卷积核更小(3*3和1*1)(stride=1),层的width更小(也就是channel、卷积核的数目更少)
还是使用了ReLU,但是没有用LRN局部响应归一化(性能没有提升而且增大了计算量)
跟googleNet相比,都采用了很大的深度,而且卷积核都比较小
用的卷积核感受野更小有什么好处?
1)3个使用3*3的卷积核的层,相当于一个使用7*7的卷积核的层,但是3层的话非线性修正单元会更多,学到的东西会比只是用一层的要好,多个非线性层可以学习到更复杂的模式。而且发现参数的数目其实更少(27 vs 49)
2)1*1卷积:主要是改变了通道数目,而且还可以增加一个非线性层
Training
训练上跟AlexNet其实比较像,也在前两个全连接层用了dropout机制
为什么网络更深参数更多,但跟AlexNet比起来训练停止的epoch数目还更少了呢?:更大深度和更小卷积核带来的隐式正则化&&某些层的预初始化(pre-train the parameters with a shallower model and then apply the result to the deeper nets)
图片裁剪:fixed S or multi-scale S (use pre-trained parameters)
训练过程中用到了很多预训练:比如层数更浅的模型的参数就是随机初始化的,然后将训练出来的参数用于更深层数的模型的预初始化;S=256的模型参数会被用于S=384的模型的预初始化;S=384的参数会被用于multi-scale的预初始化。
Test
考虑了两种预测方式:dense和multi-crop
dense:fully-convolutional network:,测试的时候全连接层被改成卷积层。这样的转换的好处有:
1)测试图像的大小不必与S相契合了
2)AlexNet是将测试图片的上下左右中五个框裁出来用,相当于算10张图的平均,但现在我是可以很多很多图的平均,而且其实中间的很多计算步骤和结果都是可以共享的。
3)之前裁出10张的话,使用0来进行padding,但是现在使用周边的pixel的值来进行padding
multi-crop的效果还是更好的一些的,但是计算上更费时间
GPU并行训练,机制比AlexNet更简单
Single-Scale evaluation
Q=S
使用了LRN的模型,并不比不使用任何归一化层的模型表现好
网络越深表现越好
加了1*1的网络表现更好:说明增加了非线性(这里是ReLU)对模型提升性能是有帮助的
同样深度,1*1的表现没有3*3好:3*3对于捕捉空间特征是有帮助的,不仅仅是起到了单纯增加非线性层的作用
跟5*5比,小尺寸的卷积核效果更好
浮动尺度效果更好,有助于学习同一类目标在不同尺度下的特征
Multi-Scale evaluation
这里的multi scale表示测试时的scale不固定。 当训练时的S固定时,Q取{S - 32, S, S+32}中的每个值,进行测试过后取平均结果。 当S为[Smin,Smax]浮动时,Q取{Smin, 0.5(Smin+Smax), Smax},测试后取平均。
结论基本上跟上面一样:越深效果越好
Multi-Crop evaluation
还是multi-crop的效果要好一点的
把两种结合起来效果更好:padding的方式不同?
多个网络结合取平均
总的来说其实没有跳出LeNet的大框架,主要改变的就是卷积核的大小和深度
卷积核大的好处就是感受野更大,可以看到的图片信息就越多,特征会学得好。但是卷积核大了之后,深度不能太深,否则参数会太多不好学习。采用小的卷积核可以增加层数,增加非线性的层数,这样反而可以学到更复杂的特征