VGG是一种经典的卷积神经网络架构,由牛津大学视觉几何组(Visual Geometry Group)提出。VGG以其简单而有效的设计而闻名,其核心思想是通过多层深度的卷积和池化层来逐渐提取图像特征,并且通过堆叠多个卷积层和池化层来增加网络的深度。VGG网络结构中主要采用3x3大小的卷积核和2x2大小的最大池化核,这种统一的设计使得网络架构非常规整,易于理解和实现。VGG网络共有多个版本,其中VGG16和VGG19是最为常用的两个版本,分别包含16和19个卷积层,以及若干个全连接层。虽然VGG相对于其他深度学习模型而言较为简单,但其在图像分类等任务上表现出色,成为了深度学习领域的经典模型之一。
这篇文章很简单,就是卷积块的堆叠, 注意力卷积的通道输入输出即可,没什么难度。
Pytorch代码
# Define VGG-16 and VGG-19.
import torch
cfg = {
'VGG-16': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 'M', 512, 512, 512, 'M', 512, 512, 512, 'M'],
'VGG-19': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 256, 'M', 512, 512, 512, 512, 'M', 512, 512, 512, 512, 'M']
}
# VGG-16 and VGG-19
class VGGNet(torch.nn.Module):
def __init__(self, VGG_type, num_classes):
super(VGGNet, self).__init__()
self.features = self._make_layers(cfg[VGG_type])
self.classifier = torch.nn.Linear(512, 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(self, cfg):
layers = []
in_channels = 3
for x in cfg:
if x == 'M': # MaxPool2d
layers += [torch.nn.MaxPool2d(kernel_size=2, stride=2)]
else:
layers += [torch.nn.Conv2d(in_channels, x, kernel_size=3, padding=1),
torch.nn.BatchNorm2d(x),
torch.nn.ReLU(inplace=True)]
in_channels = x
layers += [torch.nn.AvgPool2d(kernel_size=1, stride=1)]
return torch.nn.Sequential(*layers) # The number of parameters is more than one.