本文主要是介绍Pytorch卷积神经网络经典Backbone(骨干网络)——(VGG),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
VGG网络架构:
VGG16网络由13层卷积层+3层全连接层构成
1.1改进:
1.更小的卷积核,对比AlexNet,VGG网络使用的卷积核大小不超过33,这种结构相比于大卷积核有一个优点,就是两个33的卷积核堆叠对于原图提取特征的感受野(特征图一个像素融合了输入多少像素的信息决定了感受野的大小)相当于一个55的卷积核(如图),在同等感受野的条件下,两个33卷积之间加入激活函数,其非线性能力比单个5*5卷积要强。
2.更深的网络结构,相比于AlexNet只有5层卷积层,VGG系列加深了网络的深度,更深的结构有助于网络提取图像中更复杂的语义信息。
1.2pytorch复现VGG19
#全连接层分类:self.classifier = nn.Sequential(nn.Linear(512 * 7 * 7, 4096),nn.ReLU(inplace = True),nn.Dropout(),nn.Linear(4096,4096),nn.ReLU(inplace = True),nn.Dropout(),nn.Linear(4096,num_classes),)#前向传播def forward(self, x):x = self.features(x)x = x.view(x.size(0), -1)x = self.classifier(x)return x
1.2.1 小Tips:
当网络的结构重复时,使用for循环构造避免代码形式冗余
将不同功能的网络各自封装到一个大的Sequential模块中,结构分明
卷积操作输出尺寸计算公式:Out=(In-Kernel+2Padding)/Stride+1 (Kernel:卷积核尺寸,Stride:步长,Padding:边界填充) 若要保证输出尺寸和原尺寸一致,Padding可以设置为:Padding = (kernel-1)/2)
池化操作输出尺寸计算公式同卷积操作一致
在实际深度学习框架实现卷积和全连接的计算中,本质都是矩阵运算:
若输入的特征图深度是N,输出特征图深度是M,则卷积核的维度是:NxMxKxK(K为卷积核大小)。因此全卷积网络对输入图像的尺寸没有要求。
全连接层的尺寸和输入的特征尺寸相关(将特征图展平成为一维向量),若输入的特征向量是1xN,输出是1xM,则全连接层的维度是:MxN。
1.2.2 打印网络信息:
使用torch.summary输出网络架构:
vgg19 = VGG19()#print(vgg19) #输出网络的架构
summary(vgg19, input_size = [(3, 224, 224)]) #输出网络架构,每一层的输出特征尺寸,及网络参数情况
输出网络每一层的尺寸:
for param in vgg19.parameters(): # 输出每一层网络的尺寸print(param.size())batch_size = 16
input = torch.randn(batch_size, 3, 224, 224) #构建一个随机数据,模拟一个batch_size
output = vgg19(input)
print(output.shape) # torch.Size([16, 1000])
摘抄于:https://mp.weixin.qq.com/s?__biz=MzI4MDYzNzg4Mw==&mid=2247549661&idx=2&sn=da8151219635919414e7181acc27926e&chksm=ebb73a09dcc0b31fcdc05e043c087f467225129a0ba7440e60d08399f5c55afa1c787fa61e9c&scene=27
这篇关于Pytorch卷积神经网络经典Backbone(骨干网络)——(VGG)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!