VGG网络详解
使用时用的是D的配置,十六层。
网络分成两个部分:
1、全连接层前:提取特征网络的结构
2、三层全连接层:分类网络结构
感受野的计算
感受野:
3个33的卷积核可以替代一个77的卷积核:
采用多个小的卷积核进行堆叠,得到的感受野大小相同,这可以去替代一个大的卷积核,可以节省网络的训练参数的个数。
网络结构:
- 输入:
224x224大小的RGB图像。 - 通过两层3x3的卷积核:
得到的特征层大小:224x224x64。由于stride和padding为1,所以高宽不变。卷积核个数为64,所以深度为64。 - 通过Maxpooling最大下采样:
stride和padding为2 —> 高和宽缩减为原来一半,深度不变:112x112x64。 - 通过两层3x3的卷积核:
112x112x128 - 通过Maxpooling最大下采样:
56x56x128 - 通过三层3x3的卷积核:
56x56x256 - 通过Maxpooling最大下采样:
28x28x256 - 通过三层3x3的卷积核:
28x28x512 - 通过Maxpooling最大下采样:
14x14x512 - 通过三层3x3的卷积核(还是512个):
14x14x512 - 通过Maxpooling最大下采样:
7x7x512 - 连接三个全连接层:
全连接层一和二采用的节点都是4096个;
全连接层三1000个节点(依据ImageNet的分类任务,1000个类别)
这1000个节点不需要加RELU函数,因为最后要通过softmax层进行激活。 - 加上softmax处理:将预测结果转换为概率分布。
使用pytorch搭建VGG
模型部分
搭建ABDE四个配置模型
训练部分
别人的网络可能预处理第一步R、G、B三个通道分别减去如下值:
为ImageNet图像数据集所有图的R、G、B三通道均值。
但此处的网络没有这么操作,因为是从头开始训练的。
如果是基于迁移学习的方式使用再训练的话,则就要减去这三个值。因为预训练的模型是基于ImageNet训练的。
其余的跟AlexNet里面的训练方法一样。
模型比较大,但是这里的flowers数据集比较小,没法充分训练,这里不运行了。
训练时间长,训练效果一般。
如果要用vgg的话,建议使用迁移学习的方法(resnet网络会讲)。
预测
跟之前的AlexNet网络的预测过程是一样的。