VGG网络详解

pytorch 按照间隔slice pytorch average pooling_学习


使用时用的是D的配置,十六层。网络分成两个部分:

1、全连接层前:提取特征网络的结构

2、三层全连接层:分类网络结构

pytorch 按照间隔slice pytorch average pooling_人工智能_02

感受野的计算

感受野:

pytorch 按照间隔slice pytorch average pooling_学习_03


pytorch 按照间隔slice pytorch average pooling_人工智能_04


pytorch 按照间隔slice pytorch average pooling_人工智能_05


pytorch 按照间隔slice pytorch average pooling_学习_06


3个33的卷积核可以替代一个77的卷积核:

pytorch 按照间隔slice pytorch average pooling_学习_07


采用多个小的卷积核进行堆叠,得到的感受野大小相同,这可以去替代一个大的卷积核,可以节省网络的训练参数的个数。

pytorch 按照间隔slice pytorch average pooling_卷积核_08


pytorch 按照间隔slice pytorch average pooling_人工智能_09


网络结构:

  1. 输入:
    224x224大小的RGB图像。
  2. 通过两层3x3的卷积核:
    得到的特征层大小:224x224x64。由于stride和padding为1,所以高宽不变。卷积核个数为64,所以深度为64。
  3. 通过Maxpooling最大下采样:
    stride和padding为2 —> 高和宽缩减为原来一半,深度不变:112x112x64。
  4. 通过两层3x3的卷积核:
    112x112x128
  5. 通过Maxpooling最大下采样:
    56x56x128
  6. 通过三层3x3的卷积核:
    56x56x256
  7. 通过Maxpooling最大下采样:
    28x28x256
  8. 通过三层3x3的卷积核:
    28x28x512
  9. 通过Maxpooling最大下采样:
    14x14x512
  10. 通过三层3x3的卷积核(还是512个):
    14x14x512
  11. 通过Maxpooling最大下采样:
    7x7x512
  12. 连接三个全连接层:
    全连接层一和二采用的节点都是4096个;
    全连接层三1000个节点(依据ImageNet的分类任务,1000个类别)
    这1000个节点不需要加RELU函数,因为最后要通过softmax层进行激活。
  13. 加上softmax处理:将预测结果转换为概率分布。

使用pytorch搭建VGG

模型部分

搭建ABDE四个配置模型

pytorch 按照间隔slice pytorch average pooling_学习_10


pytorch 按照间隔slice pytorch average pooling_人工智能_11


pytorch 按照间隔slice pytorch average pooling_pytorch 按照间隔slice_12


pytorch 按照间隔slice pytorch average pooling_人工智能_13


pytorch 按照间隔slice pytorch average pooling_人工智能_14

训练部分

别人的网络可能预处理第一步R、G、B三个通道分别减去如下值:

pytorch 按照间隔slice pytorch average pooling_pytorch 按照间隔slice_15


为ImageNet图像数据集所有图的R、G、B三通道均值。

但此处的网络没有这么操作,因为是从头开始训练的。

如果是基于迁移学习的方式使用再训练的话,则就要减去这三个值。因为预训练的模型是基于ImageNet训练的。

pytorch 按照间隔slice pytorch average pooling_pytorch_16


其余的跟AlexNet里面的训练方法一样。

模型比较大,但是这里的flowers数据集比较小,没法充分训练,这里不运行了。
训练时间长,训练效果一般。
如果要用vgg的话,建议使用迁移学习的方法(resnet网络会讲)。

预测

跟之前的AlexNet网络的预测过程是一样的。