VGG


深度学习神经网络特征提取(二)

网络结构

要构建VGG16特征提取网络,我们只需要了解:

  • VGG16网络层数:VGG16,VGG19

在本文中,根据实际的项目要求,构建了VGG16网络,相对于ResNet网络较为简单,整个网络只是一个线性的结构,没有分支,所以在VGG的学习中只需要掌握基础的深度学习原理就可以构建出来VGG网络。
VGG网络结构
VGG16网络结构

构建VGG16网络结构

VGG16的网络有三种不同的层构成,分别是卷积、池化和全连接,具体的运行方式:

  • 输入一张尺寸为(224,224,3)的图片
  • 两次(3,3)卷积,层数64,输出为(224,224,64),(2,2)最大池化,输出(112,112,64)。
  • 两次(3,3)卷积,层数128,输出为(112,112,128),(2,2)最大池化,输出(56,56,64)。
  • 三次(3,3)卷积,层数256,输出为(56,56,64),(2,2)最大池化,输出(28,28,64)。
  • 三次(3,3)卷积,层数512,输出为(28,28,64),(2,2)最大池化,输出(14,14,64)。
  • 三次(3,3)卷积,层数512,输出为(14,14,64),(2,2)最大池化,输出(7,7,64)。
  • 对结果进行平铺,接上两层4096的全连接层
  • 最后全连接进行分类

代码如下:

    def get_VGG16_model(input_shape,classes):
        image_input = Input(shape = input_shape)

        x = layers.Conv2D(64,(3,3),padding = 'same', activation = 'relu')(image_input)
        x = layers.Conv2D(64,(3,3),padding = 'same', activation = 'relu')(x)
        x = layers.MaxPooling2D((2,2),strides =(2,2))(x)

        x = layers.Conv2D(128,(3,3),padding = 'same', activation = 'relu')(x)
        x = layers.Conv2D(128,(3,3),padding = 'same', activation = 'relu')(x)
        x = layers.MaxPooling2D((2,2),strides =(2,2))(x)

        x = layers.Conv2D(256,(3,3),padding = 'same', activation = 'relu')(x)
        x = layers.Conv2D(256,(3,3),padding = 'same', activation = 'relu')(x)
        x = layers.Conv2D(256,(3,3),padding = 'same', activation = 'relu')(x)
        x = layers.MaxPooling2D((2,2),strides =(2,2))(x)

        x = layers.Conv2D(512,(3,3),padding = 'same', activation = 'relu')(x)
        x = layers.Conv2D(512,(3,3),padding = 'same', activation = 'relu')(x)
        x = layers.Conv2D(512,(3,3),padding = 'same', activation = 'relu')(x)
        x = layers.MaxPooling2D((2,2),strides =(2,2))(x)

        x = layers.Conv2D(512,(3,3),padding = 'same', activation = 'relu')(x)
        x = layers.Conv2D(512,(3,3),padding = 'same', activation = 'relu')(x)
        x = layers.Conv2D(512,(3,3),padding = 'same', activation = 'relu')(x)
        x = layers.MaxPooling2D((2,2),strides =(2,2))(x)

        x = layers.Flatten()(x)
        x = layers.Dense(4096,activation = 'relu')(x)
        x = layers.Dense(4096,activation = 'relu')(x)
        x = layers.Dense(classes, activation = 'softmax')(x) 
        model = models.Model(image_input,x)
        return model

最后,根据VGG16的网络结构,大家可以自行尝试构建VGG19的网络结构。


文章作者: Fanrencli
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Fanrencli !
  目录