深度学习研究理解10:Very Deep Convolutional Networks for Large-Scale Image Recognition

这篇博客详细介绍了VGG网络的结构和设计思路,包括3*3小过滤器的使用、多阶段网络配置以及1*1过滤器的作用。通过对AlexNet的改进,VGG提出了更深层次的网络,证明了深度对于提升图像识别性能的重要性。在ILSVRC上,VGG网络取得了优异的分类和定位结果。

本文是牛津大学 visual geometry group(VGG)Karen Simonyan 和Andrew Zisserman 于14年撰写的论文,主要探讨了深度对于网络的重要性;并建立了一个19层的深度网络获得了很好的结果;在ILSVRC上定位第一,分类第二。

一:摘要

……

从Alex-net发展而来的网络主要修改一下两个方面:

1,在第一个卷基层层使用更小的filter尺寸和间隔;

2,在整个图片和multi-scale上训练和测试图片。

二:网络配置

2.1配置

2.1.1 小的Filter尺寸为3*3

卷积的间隔s=1;3*3的卷基层有1个像素的填充。

1:3*3是最小的能够捕获上下左右和中心概念的尺寸。

2:两个3*3的卷基层的有限感受野是5*5;三个3*3的感受野是7*7,可以替代大的filter尺寸

3:多个3*3的卷基层比一个大尺寸filter卷基层有更多的非线性,使得判决函数更加具有判决性。

4:多个3*3的卷积层比一个大尺寸的filter有更少的参数,假设卷基层的输入和输出的特征图大小相同为C,那么三个3*3的卷积层参数个数3*(3*3*C*C)=27CC;一个7*7的卷积层参数为49CC;所以可以把三个3*3的filter看成是一个7*7filter的分解(中间层有非线性的分解)。

2.1.2 1*1 filter:

作用是在不影响输入输出维数的情况下,对输入线进行线性形变,然后通过Relu进行非线性处理,增加网络的非线性表达能力。

Pooling:2*2,间隔s=2;

2.2 结构

和之前流行的三阶段网络不通的是,本文是有5个max-pooling层,所以是5阶段卷积特征提取。每层的卷积个数从首阶段的64个开始,每个阶段增长一倍,直到达到最高的512个,然后保持。

基本结构A:

Input(224,224,3)→64F(3,3,3,1)→max-p(2,2)→128F(3,3,64,1)→max-p(2,2) →256F(3,3,128,1)→256F(3,3,256,1)→max-p(2,2)→512F(3,3,256,1)→512F(3,3,512,1)→max-p(2,2)→512F(3,3,256,1)→512F(3,3,512,1)→max-p(2,2)→4096fc→4096fc→1000softmax

### 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作为预训练基础模型也被用来迁移学习新数据集上的相似问题求解.
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值