美文网首页
VGGNet详解

VGGNet详解

作者: 风之旅人c | 来源:发表于2019-07-18 22:19 被阅读0次

本博文主要介绍了VGGNET的网络结构,并在cifar10数据集上实现了

VGGNET详解

  VGG Net由牛津大学的视觉几何组(Visual Geometry Group)和 Google DeepMind公司的研究员一起研发的的深度卷积神经网络,在 ILSVRC 2014 上取得了第二名的成绩,将 Top-5错误率降到7.3%。它主要的贡献是展示出网络的深度(depth)是算法优良性能的关键部分。
  VGGNET的网络结构如下图所示,VGGNET包含多层网络,深度从11层到19层不等,较为常用的是VGG16和VGG19,接下来我们以VGG16为例,即下图中的D,介绍VGGNET。

VGGNET网络结构
  1. 输入尺寸为224\times224\times3的图片,用64个3\times3的卷积核作两次卷积和ReLU,卷积后的尺寸变为224\times224\times64
  2. 池化层,使用max pooling,池化单元大小为2\times2,池化后尺寸变为112\times112\times64
  3. 输入尺寸为112\times112\times64,使用128个3\times3的卷积核作两次卷积和ReLU,尺寸改变为112\times112\times128
  4. 池化层,使用max pooling,池化单元大小为2\times2,池化后尺寸变为56\times56\times128
  5. 输入尺寸为56\times56\times128,使用256个3\times3的卷积核作三次卷积和ReLU,尺寸改变为56\times56\times256
  6. 池化层,使用max pooling,池化单元大小为2\times2,池化后尺寸变为28\times28\times256
  7. 输入尺寸为28\times28\times256,使用512个3\times3的卷积核作三次卷积和ReLU,尺寸改变为28\times28\times512
  8. 池化层,使用max pooling,池化单元大小为2\times2,池化后尺寸变为14\times14\times512
  9. 输入尺寸为14\times14\times512,使用512个3\times3的卷积核作三次卷积和ReLU,尺寸改变为14\times14\times512
  10. 池化层,使用max pooling,池化单元大小为2\times2,池化后尺寸变为7\times7\times512
  11. 与两层1x1x4096,一层1x1x1000进行全连接+ReLU(共三层)。
  12. 通过softmax输出1000个预测结果。

VGGNET的特点

  1. VGGNET全部使用3\times3的卷积核和2\times2的池化核,通过不断加深网络深度来提升性能。作者认为,两个3\times3卷积层的串联相当于1个5\times5的卷积层,3个3\times3的卷积层串联相当于1个7*7的卷积层,即3个3\times3卷积层的感受野大小相当于1个7\times7的卷积层。但是3个3\times3的卷积层参数量只有7\times7的一半左右,同时前者可以有3个非线性操作,而后者只有1个非线性操作,这样使得前者对于特征的学习能力更强。

  2. VGGNet的卷积层有一个显著的特点:特征图的空间分辨率单调递减,特征图的通道数单调递增。

代码实现

import torch.nn as nn


cfg = {
    'VGG11': [64, 'M', 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M'],
    'VGG13': [64, 64, 'M', 128, 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M'],
    'VGG16': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 'M', 512, 512, 512, 'M', 512, 512, 512, 'M'],
    'VGG19': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 256, 'M', 512, 512, 512, 512, 'M', 512, 512, 512, 512, 'M'],
}


class VGG(nn.Module):
    def __init__(self, vgg_name):
        super(VGG, self).__init__()
        self.features = self._make_layers(cfg[vgg_name])
        self.classifier = nn.Linear(512, 10)

    def forward(self, x):
        out = self.features(x)
        out = out.view(out.size(0), -1)
        out = self.classifier(out)
        return out

    def _make_layers(self, cfg):
        layers = []
        in_channels = 3
        for x in cfg:
            if x == 'M':
                layers += [nn.MaxPool2d(kernel_size=2, stride=2)]
            else:
                layers += [nn.Conv2d(in_channels, x, kernel_size=3, padding=1),
                           nn.BatchNorm2d(x),
                           nn.ReLU(inplace=True)]
                in_channels = x
        layers += [nn.AvgPool2d(kernel_size=1, stride=1)]
        return nn.Sequential(*layers)


def VGG11():
    return VGG('VGG11')


def VGG13():
    return VGG('VGG13')


def VGG16():
    return VGG('VGG16')


def VGG19():
    return VGG('VGG19')

相关文章

  • VGGNet详解

    本博文主要介绍了VGGNET的网络结构,并在cifar10数据集上实现了 VGGNET详解   VGG Net由牛...

  • tvm源码笔记 vggnet16/vggnet19/resnet

    caffe模型文件 vggnet 16 caffe模型文件vggnet19 caffe2模型文件vggnet19 ...

  • CNN经典模型——VGGNet

    VGGNet结构 VGGNet 是牛津大学视觉几何组(Visual Geometry Group)和 Google...

  • VGGNet

    VGGNet 是牛津大学计算机视觉组(Visual Geometry Group)和 GoogleDeepMind...

  • VGGNet

    概述 VGGNet这篇论文最主要的贡献在于从网络深度这一角度出发,对卷积神经网络进行了改进。非常详尽的评估了网络深...

  • VGGNet

    VGGNet网络结构: VGGNe初步探索了卷积神经网络深度与其性能的关系,通过反复堆叠3x3的卷积层和2x2的池...

  • VGGNet

    VGGNet Reference [1409.1556]Very Deep Convolutional Netwo...

  • VGG

    【深度学习】VGGNet原理解析及实现VGGNet由牛津大学的视觉几何组(Visual Geometry Grou...

  • 3.4 卷积神经网络进阶-Vggnet-Resnet 实战

    4.2.4 VGG-ResNet实战 VGGNET实战VGGNET的思想就是加深神经网络层次,多使用3*3的卷积...

  • 3.2 卷积神经网络进阶-Vggnet-Resnet

    4.2.2 卷积神经网络进阶(Vggnet-Resnet) VGGNet调参经验更深层次的神经网络多使用3*3的卷...

网友评论

      本文标题:VGGNet详解

      本文链接:https://www.haomeiwen.com/subject/jgmzkctx.html