基于VGG深度学习神经网络的猫狗数据集分类

摘要:VGG网络是由牛津大学视觉几何组完成的基于深度卷积神经网络的大规模图像识别架构,该网络参考了AlexNet、ZFNet、OverFeat等经典的网络架构,从而得出的。这个架构参加了ILSVRC-2014比赛,取得了定位冠军、分类亚军的成绩,因其优异的泛化性能而被广泛的应用于迁移学习中,还成为了诸多更深层次网络的基础架构,鉴于以上的表现,该团队开源了VGGG-16模型和VGG-19模型。VGG的出现。VGG的出现使小卷积核的应用正式走入大众的视野,而且开启了神将网络向深度卷积模型时代的发展。在本文中我将VGG模型应用到猫狗数据集的分类上,

一、 引言

大型图片库的开源,高性能计算系统的出现,对深度视觉识别架构的发展起到了重要作用,促进了卷积神经网络在大规模图片和视频识别中取得的重大成功。随着深度神经网络的发展,越来越多的人尝试着改进Krizhevsky等人在2012年提出的架构,以得到更优异的性能。例如,在2013年ImageNet大赛中,性能最好的改进方案之一—在第一个卷积层中使用较小的接受域窗口以及较小的步长,另一种改进方案是在整幅图片以及多个尺寸上多次训练和测试网络。在VGG中,该团队着眼于另一个方向—深度。因此VGG这篇文章中固定了架构的其他参数,并且通过添加卷积层稳定地增加网络深度。在较小地3×3卷积核的帮助下,这样的想法变得可行。
本文根据VGG团队在定会上的论文以及开源的两个网络架构入手,从网络设置、图片类的训练及评估细节、在ILSVRC比赛中网络的不同设置比较、VGG迁移模型在猫狗数据集上的应用分析等五个方面介绍我对于VGG的认识。

二、 卷积神经网络的设置

VGG论文的主要目的是衡量卷积深度对于网络的影响,因此他每层的设置都如AlexNet中的设计原则相同。
2.1 架构
在整个训练中,卷积神经网络的输入为固定的224×224的RGB图片。所做的唯一的预处理是对每个像素减去ImageNet训练集中RGB的平均值。图片通过一系列3×3卷积核的卷积层(主要是用来获取上下左右以及中心的最小尺寸),在其中一种配置中,它也用到了1×1卷积核,1×1可以看作是输入通道的线性变换(其后会接非线性的的变换)。卷积滑动的步长固定为1,卷积层的填充模式为保留原始的空间分辨率。空间池化包含五个最大池化层,接在部分卷积层的后面(而非所有卷积后都接)。最大池化使用2×2的窗口,滑动步长为2.
在一系列卷积层的后面,接着三个全连接层(FC层):前两个fc层含有4096个通道,第三个fc层用来给ILSVRC数据集进行分类,因此有1000个通道(即就是分成1000个类)。最后一层使用Softmax作为激活函数。全连接层的设置和所欲网络一致。
所有隐藏层都使用Relu非线性激活函数,当然在除了深度,VGG与AlexNet另一个不同就是,VGG没有LRN—局部响应标准化,因为经过该团队的论证,LPN并不能提高网络性能,反而会曾加内存消耗和时间复杂度。

2.2 设置
改网络所评估的卷积神经网络在下表1中列出,每列一个架构。在下面,我们沿用论文称呼他们为A-E。所有架构的配置都遵循这着2.1所描述的通用设计,唯有深度不同。A网络有11层(8卷积3全连接)到E网络19层(16卷积3全连接),卷积层的宽度较小,从第一层的64开始,每个最大池化增加一倍,直到最后的512。网络架构如下:
基于VGG深度学习神经网络的猫狗数据集分类_第1张图片
参数量:
在这里插入图片描述
论文中指出的是尽管VGG系列更深了,但是却比之前更浅而卷积层更宽接受域更广的网络权重数目大。
基于VGG深度学习神经网络的猫狗数据集分类_第2张图片
2.3 特点
与本次大赛的其他网络不同,VGG在第一个卷积层没有使用大的接收域(eg.11×11卷积核,滑动步长为4;或者7×7卷积核,滑动步长为2)。在VGG系类架构中,全部采用的是3×3小卷积核,步长为1(与每个像素都进行卷积)。可以知道的是:两个3×3卷积核相当于一个5×5卷积,三个想当于7×7。小卷积核的优点:(1)相当于使用了三个非线性层替代7×7的一个,(文章中说这样使决策函数更具区分性,而我的理解使增加非线性,拟合性更好,从而有更好的性能)。(2)使权重参数大幅减少,eg:[3(33cc)]/(77cc)=55.1%即相当于替换后的参数只有原来参数的55.1%。
1×1的应用,论文也说是一种增加非线性因素的方式,不影响卷积层接受域。个人理解应该是1×1和利用3×3替换一样,都是增加了激活函数,使网络非线性增加。

三、 分类框架

在大概讲完VGG的网络设置细节后,现在开始描述VGG卷积神经网络的训练和评估.
3.1 训练
VGG的训练过程也与AlexNet有着极其相似,甚至可以说是一样的。在改网络中使用了包含动量的小批量梯度下降做多项式逻辑回归的优化器来对模型进行训练。批次大小为256,动量为0.9,权值衰减(L2惩罚因子设置为5*10^-4)和对前两个全连接层进行Dropout(概率为0.5)以实现正则化。学习率初始化为0.01。当验证集准确率不提时,学习率除以10。
在该文章的训练过程中,学习率衰减了三次,训练次数为为370K(迭代47次),与AlexNet相比,是有比较大的提升的。究其原因,该文章认为是:(1)深度以及更小的滤波器数量增强了正则化;(2)某些层执行了预初始化。我个人认为还应考虑到计算机性能的提升。
在训练的过程中,文章中还使用了一个比较节省的方法,即在层数较少的网络上进行训练,然后获得参数结果,再将获得的权重作为更深层次网络的初始化值来使用;和在多尺度训练时,先进行单一的尺度训练,得到的权重作为多尺度的训练。在文章中这个方法获得了比较好的效果。

四、 测试

4.1测试技巧
测试时,为了能够更好的测试网络的性能,文章采用了多尺度测试、Dense测试、及Multi-crop测试。
多尺度测试,即使是利用单一尺寸图片训练的模型,文章在进行测试时采用了输入图片尺度扰动法,即:图片等比例缩放至最短边为Q,设置三个Q,对图片进行预测,取平均,方法1 当S为固定值时:Q = [S-32, S, S+32];方法2 当S为随机值时:Q = (S_min, 0.5*(S_min + S_max), S_max)。
稠密测试(Dense test):将FC层转换为卷积操作,变为全卷积网络,实现任意尺寸图片输入:
基于VGG深度学习神经网络的猫狗数据集分类_第3张图片
基于VGG深度学习神经网络的猫狗数据集分类_第4张图片
Multi-Crop测试:借鉴AlexNet与GoogLeNet,对图片进行Multi-crop,裁剪大小为224224,并水平翻转1张图,缩放至3种尺寸,然后每种尺寸裁剪出50张图片;50 = 55*2。

实验结果在此省略,有兴趣的同学可以自行阅读进行对比。

五、 VGG在猫狗数据集上的迁移学习

5.1 猫狗数据集
猫狗数据集中包含了25000张图片,其中训练集2250(0.9)张,测试集2500(0.1)张。该数据集是Kaggle中一个比赛提供的,主要为各种场景下的猫狗图片。选择此数据集,是因为只需将结果分为两类,分类数目不多;其次是数据集大小合适,便于我们作为平常的实验使用。
5.2 VGG在猫狗数据集上训练
在这个迁移训练中,使用的是基于VGG-16的在ImageNet数据集上的预训练模型,这样可以减少我本人的计算开销和时间的花费。在超参数的设置上:
MAX_EPOCH = 3
BATCH_SIZE = 6 电脑内存不足,只能选择我电脑允许的最大Epoch和Batch_size
LR = 0.001
log_interval = 2 打印当前训练情况
val_interval = 1 在多少个epoch之运行验证集
classes = 2 类别数
start_epoch = -1 起始epoch
lr_decay_step = 1 学习率经过多少个epoch修改一次

在进行了一个epoch后电脑因为内存不足而停止训练。结果如下:
Training: Iteration[3750/3750] Loss: 0.0107 Acc:96.91% lr:0.001

六、 论文总结

6.1 关键点&创新点
堆叠小卷积核,加深网络
训练阶段,尺度扰动
测试阶段,多尺度及Dense+Multi crop

6.2 启发点
1.采用小卷积核获取高精度
2.采用多尺度及稠密测试获得高精度
3.1*1卷积可认为是线性变换,同时增加非线性层
4.填充大小准则:保持卷积后特征图分辨率不变
5.LRN对精度无提升
6.Xavier初始化可达到较好的效果
7.S远大于224,图片可能仅包含物体的一部分
8. 大尺度模型采用小尺度模型初始化,可加快收敛
9. 物体尺寸不一,因此采用多尺度训练,可以提高精度
10. multi crop 存在重复计算,因而低效
11. multi crop可看成dense的补充,因为它们边界处理有所不同
12.小而深的卷积网络优于大而浅的卷积网络
13.尺度扰动对训练和测试阶段有帮助

声明:
本文仅作为结果呈现,想要交流具体步骤及实现方法的请私戳。

你可能感兴趣的:(pytorch,神经网络,机器学习,深度学习)