Press "Enter" to skip to content

卷积神经网络|VGG

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

VGG名字来源于论文作者所在的实验室Visual GeoMetry Group。VGG提出了可以通过 重复使用简单的基础块 来构建深度模型的思路。

 

VGG块

 

VGG块的组成规律是:连续使用数个填充为1、窗口形状为3×3的卷积层后接上一个步幅为2、窗口形状为2×2的最大池化层。卷积层保持输入的高和宽不变,而池化层对其减半。

 

每经过一个VGG块,样本的高和宽减半,输出通道翻倍。设输出通道数是 co ,输入通道数是 ci ,样本的高和宽是 hw ,卷积核的高和宽是 khkw 。可得出卷积核的形状是 co*ci*kh*kw ,互运算的次数是 co*ci*(h-kh+1)*(w-kw+1) (步长是1,无填充)。

 

由此可看出,互运算的次数和 h*w*ci*co 成正比。VGG的这种 高和宽减半 , 通道翻倍 的设计使得多数卷积层具有相同的模型参数尺寸和计算复杂度。

 

VGG网络

 

VGG网络由卷积层模块后连接全连接层模块构成。VGG网络先以卷积层构成的模块充分抽取空间特征,再以由全连接层构成的模块来输出分类结果。下面这个网络使用了8个卷积层和3个全连接层,被称为VGG-11。

 

(
  (vgg_block1): Sequential(
    (0): Conv2d(1, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (1): ()
    (2): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
  )
  (vgg_block2): Sequential(
    (0): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (1): ReLU()
    (2): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
  )
  (vgg_block3): Sequential(
    (0): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (1): ReLU()
    (2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (3): ReLU()
    (4): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
  )
  (vgg_block4): Sequential(
    (0): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (1): ReLU()
    (2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (3): ReLU()
    (4): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
  )
  (vgg_block5): Sequential(
    (0): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (1): ReLU()
    (2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (3): ReLU()
    (4): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
  )
  (fc): Sequential(
    (0): FlattenLayer()
    (1): Linear(_features=25088, out_features=4096, =True)
    (2): ReLU()
    (3): Dropout(p=0.5, inplace=False)
    (4): Linear(in_features=4096, out_features=4096, bias=True)
    (5): ReLU()
    (6): Dropout(p=0.5, inplace=False)
    (7): Linear(in_features=4096, out_features=10, bias=True)
  )
)

 

设计原则

 

二维卷积层中,与输出数组中元素x有关的输入区域叫做 x 的「感受野」(receptive field)。图1中,输入中阴影部分的四个元素是输出中阴影部分元素的感受野。我们把图1中2×2的输出记为 Y ,并考虑一个更深的卷积网络:将 Y 与另一个形状为2×2的卷积核做互相关运算,输出单个元素 z 。那幺, zY 上的感受野包括 Y 的全部四个元素,在输入上的感受野包括其中全部9个元素。可见,我们可以 通过更深的卷积网络使特征图中单个元素的感受野变得更加广阔,从而捕捉输入上更大尺寸的特征 。

 

 

VGG网络整个输出的感受野是整个输入,但是随着网络深度的增加,单个元素的感受野越来越大。在设计网络时采用堆积的小卷积核优于采用大的卷积核,因为可以增加网络深度来保证学习更复杂的模式。

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注