计算机视觉:VGGNet网络详解

VGGNet是由牛津大学视觉几何组提出的深度学习模型,在ILSVRC2014比赛中取得佳绩。VGG16是其典型代表,由多个3x3卷积层和池化层组成,最后接全连接层。文章介绍了VGG16的网络结构,并提供了基于CIFAR-10数据集的PyTorch实现,包括数据预处理、模型构建和训练过程。

1 VGGNet介绍

1.1 VGGnNet概述

VGGNet是牛津大学视觉几何组(Visual Geometry Group)提出的模型,故简称VGGNet, 该模型在2014年的ILSVRC中取得了分类任务第二、定位任务第一的优异成绩。该模型证明了增加网络的深度能够在一定程度上影响网络最终的性能。

论文地址:原文链接

根据卷积核大小与卷积层数目不同,VGG可以分为6种子模型,分别是A、A-LRN、B、C、D、E,分别对应的模型为VGG11、VGG11-LRN(第一层采用LRN)、VGG13、VGG16-1、VGG16-3和VGG19。不同的后缀代表不不同的网络层数。VGG16-1表示后三组卷积块中最后一层卷积采用卷积核尺寸为1*1,VGG16-3为3*3。VGG19位后三组每组多一层卷积,VGG19为3*3的卷积。我们常看到的基本是D、E这两种模型,官方给出的6种结构图如下:

1.2 VGG16网络结构     

VGG16的网络结果如上图所示:在卷积层1(conv3-64),卷积层2(conv3-128),卷积层3(conv3-256),卷积层4(conv3-512)分别有64个,128个,256个,512个3X3卷积核,在每两层之间有池化层为移动步长为2的2X2池化矩阵(maxpool)。在卷积层5(conv3-512)后有全连接层,再之后是soft-max预测层。

 处理过程的直观表示:

1.2.1 输入层

输入的图像一般情况是彩色的三维图像,所以输入的维度是`[B,N,H,W] , B是batchsize的意思, N输入 的Channel,彩色图像是3 , H是高度为224 ,W是宽度为224。

输入的图像经历两个卷积3✖3的卷积, BatchNorm和ReLU,输出的维度是[B,64,224,224]。

这里要注意两点:第一,默认卷积层后保持维度不改变,第二,卷积层、 BN层和激活函数一般会同时存在。这两点已经成了默认的规则。

然后,输入到池化层,维度变为[B,64,112,112]。

1.2.2 第二个卷积Block

到了第二个卷积Block,输入的维度为[[B,64,112,112],输出的Channel变成了128,所以在定义卷积的时 候需要扩大channel。

从上图中,我们可以看到是两个128Channel的卷积,但是这两个卷积还有所不同,在经历第一个卷积的时候,输入的Channel设置为64,输出的Channel设置为128,经过卷积之后维度变 为[B,128,112,112],然后再经过BN层和激活函数层。

第二卷积的输入和输出都是128,然后再经过BN成和激活函数层,在这里维度没有发生变化。然后再输入到MaxPool,将尺寸减小一半,输出的维度变为[B,128,56,56]

1.2.3 第三个卷积Block

这个Block中有3个3✖3的卷积,和上面的Block一样,第一个卷积起到成承上启下的桥梁作用,经过第一个卷积后,维度变为[B,256,56,56],然后经过第二个和第三个卷积,然后再经过最大池化层,维度变为[B,256,28,28]。

1.2.4 第四个卷积Block

同上, Channel为512,所以经过这个Block后,维度变为[B,512,14,14].

1.2.5 第五个卷积Block

同上, Channel为512,所以经过这个Block后,维度变为[B,512,7,7],经过卷积后得到了维度为[B,512,7,7]的特征图。

1.2.6 变换维度

这部分也是一个承上启下的作用,将[B,N,W,H]维度变成[B,N✖W✖H]。方法有很多,一般常用view方法,代码如下:

# forward函数中
x = x.view(x.size(0), -1)

也可以使用flatten方法,代码如下:

# forward函数中
x = torch.flatten(x, 1)

我们观察现在的网络,在变换维度之前还有一部操作。

现在统一使用平均池化,pytorch官方使用的 nn.AdaptiveAvgPool2d ,也可以使用AvgPool2d。关于这两个平均池化的区别可以参考:nn.AdaptiveAvgPool2d和nn.AvgPool2d的区别。

所以上面的代码改为:

#init函数中
self.avgpool = nn.AdaptiveAvgPool2d((7, 7))

# forward函数中
x = self.avgpool(x)
x = torch.f
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

源启智能

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值