VGG - Very Deep Convolutional Networks for Large-Scale Image Recognition

Very Deep Convolutional Networks for Large-Scale Image Recognition

ICLR 2015 (oral)

http://www.robots.ox.ac.uk/~vgg/research/very_deep/

本文针对 AlexNet 的改进主要集中在 网络的深度, depth。通过固定其他网络的结构和参数,来增加网络的深度(通过使用3*3的 小卷积滤波器来增加网络深度),得到很好的效果。

2 ConvNet Configurations
主要参考 AlexNet 网络,便于后续的对比。
2.1 Architecture
训练的输入是固定图像尺寸 224*224 的 RGB图像,唯一的预处理是每个像素减去训练集图像上RGB均值,图像经过一系列卷积层,这里我们使用很小的感受野 3*3。其中一个网络结构我们也使用了 1*1 滤波器,可以被看做是输入的线性变换。卷积步长固定为1个像素,通过填充使得卷积后的输出尺寸和输入尺寸一样大小,对于3*3卷积滤波器,周边分别填充一个像素。有5个最大池化层,采用 2*2 池化窗口,步长为 2。

卷积层(不同网络结构,卷积层数不一样)之后是3个全链接层,前两层有4096个通道,第三层有1000通道对应 ILSVRC分类中的1000类。网络最后一层是soft-max 层。所有网络结构的全链接层是一样的。

所有的隐层神经元都经过 ReLU 非线性处理,我们这里除了一个网络结构外没有采用 AlexNet 中的归一化 Local Response Normalisation (LRN),主要是因为我们发现它对 ILSVRC上数据没有性能改善,但是却增加了内存消耗和计算时间。当需要使用 LRN 时,可以使用 AlexNet 中关于 LRN 的参数。

2.2 Configurations
这里我们一共尝试了 6 个网络结构,主要差异在卷积层数,配置如下:
这里写图片描述
这里写图片描述

2.3 Discussion
这里我们网络结构和 AlexNet 以及其他网络模型中最大的不同是我们第一卷积层中的滤波器尺寸很小 3*3,其他的 都是 11*11 或 7*7 。此外我们网络其他层的滤波器都是 3*3大小。很容易发现两个 3*3 的卷积滤波器 (相邻不做空间池化)对应 5*5 的感受野。三个 3*3 对应 7*7 感受野。那么为什么这么做了?首先我们嵌入了三个非线性矫正层而不是一个,这么做增加了决策函数的表达能力。其次是降低参数的数量,假定三个叠加的3*3卷积层的输入输出都是 C 通道,那么一共有 3(3*3*C*C)=27*C*C个权值参数,而一个 7*7卷积层有 7*7*C*C= 49*C*C个参数。 所以参数总量降低了。

我们在 C 网络结构中嵌入了 1*1 卷积层,这可以增加决策函数的非线性表达能力而不影响卷积层的感受野。1*1卷积尽管是一个线性变换,但是因为引入了非线性激活函数,所以增加了非线性表达能力。我们可以看到最近提出的 Network in Network 网络结构就是利用了 1*1 卷积层。

在CNN网络中使用小尺寸卷积滤波器在其他文献已经存在,其中2014年提出的 GoogleNet 和我们类似,大量使用了小滤波器,但是它的网络拓扑结构更加的复杂。我们单个网络分类精度要高于GoogleNet。

3 Classificiaton Framework
3.1 Training
训练流程基本和 AlexNet 一样,文献也给出了一些参数设置。 其中参数的初始化,我们首先通过随机初始化训练了一个 A 网络,然后用 A 网络的参数 来初始化其他网络进行训练。

下面是一些测试结果:
这里写图片描述
上图主要是对比不同网络层数对精度的影响。

这里写图片描述
多尺度的影响

这里写图片描述

### VGG网络架构 VGG网络由牛津大学视觉几何组(Visual Geometry Group)开发,旨在解决大规模图像识别中的挑战[^1]。该网络的特点在于使用非常深的卷积层结构来提取特征。 #### 架构特点 - **多层堆叠**:VGG采用了多个连续的小尺寸(3×3)卷积核进行特征抽取,而不是采用较大尺寸的卷积核。 - **固定步幅和填充方式**:所有的卷积操作都保持相同的步幅(stride=1),并使用零填充使得输入输出具有相同的空间维度。 - **池化层配置**:在网络的不同阶段之后加入最大池化层以减少空间分辨率,从而降低参数数量并控制过拟合风险。 - **全连接层设计**:最后几层通常为全连接层,在分类任务中用于映射到类别标签上;然而现代实现往往省略这些密集层转而使用全局平均池化替代。 具体来说,最著名的两个版本分别是: - **VGG16**:包含13个卷积层以及3个全连接层; - **VGG19**:则进一步扩展到了16个卷积层加3个全连接层。 这种简单却有效的设计方案不仅提高了模型性能,同时也促进了后续研究者对于更深更复杂网络结构探索的热情。 ```python import torch.nn as nn class VGG(nn.Module): def __init__(self, num_classes=1000): super(VGG, self).__init__() # 定义卷积部分 self.features = nn.Sequential( *make_layers([64]*2 + [128]*2 + [256]*3 + [512]*3 + [512]*3)) # 定义分类器部分 (可选) self.classifier = nn.Linear(512*7*7, num_classes) def forward(self, x): out = self.features(x) out = out.view(out.size(0), -1) # 展平处理 out = self.classifier(out) return out def make_layers(cfg): layers = [] in_channels = 3 for v in cfg: if v == 'M': layers += [nn.MaxPool2d(kernel_size=2, stride=2)] else: conv2d = nn.Conv2d(in_channels, v, kernel_size=3, padding=1) layers += [conv2d, nn.ReLU(inplace=True)] in_channels = v return nn.Sequential(*layers) ``` ### 应用领域 自发布以来,VGG已被广泛应用于各种计算机视觉任务当中: - 图像分类与目标检测; - 实例分割; - 场景理解; 此外,VGG作为预训练基础模型也被用来迁移学习新数据集上的相似问题求解.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值