PyTorch复现网络模型VGG

VGG

  1. 原论文地址:https://arxiv.org/abs/1409.1556
  2. VGGVisual Geometry Group(视觉几何组)的缩写,它是一个在计算机视觉领域中非常有影响力的研究团队,主要隶属于牛津大学的工程系和科学系。VGG以其对卷积神经网络(Convolutional Neural Networks, CNNs)结构的研究而闻名,特别是在ILSVRCImageNet Large Scale Visual Recognition Challenge)竞赛中取得了显著的成绩。
    VGG网络是VGG团队提出的一系列深度卷积神经网络模型,其中最著名的是VGG-16VGG-19。这些模型以其简洁的架构和强大的性能而受到广泛关注。VGG网络的主要特点包括:
    (1)使用小尺寸的卷积核(3x3)和最大池化层(2x2)来构建深度网络。
    (2)通过堆叠多个小卷积核来模拟大尺寸卷积核的感受野,同时减少参数数量。
    (3)在整个网络中保持卷积核尺寸和步长的一致性,使得网络结构更加规整。
    (4)使用多个全连接层进行分类任务的输出。
    VGG网络的性能在2014年当时是非常出色的,成为了计算机视觉任务中的基准模型之一。虽然现在有一些更先进的网络架构(如ResNetDenseNet等)已经超越了VGG在某些方面的性能,但VGG仍然是一个值得学习和了解的经典模型。

感受野

(1)感受野(Receptive Field)是卷积神经网络(Convolutional Neural Networks, CNNs)中的一个重要概念,它指的是网络内部的不同位置的神经元对原图像的感受范围的大小。在卷积神经网络中,每个神经元都只与输入数据的一个局部区域相连,这个局部区域就是该神经元的感受野。随着网络层次的加深,每个神经元对于输入数据的感受野会逐渐扩大,从而能够提取更加抽象和全局的特征。

(2) 感受野的大小可以通过计算得到,它与卷积核的大小、步长(stride)和填充(padding)等超参数有关。在一般的卷积神经网络中,感受野的大小会随着卷积层的加深而指数级增长。因此,深层卷积神经网络中的神经元可以具有非常大的感受野,能够覆盖输入图像的大部分区域甚至整个图像。

VGG网络结构

  1. 论文中介绍,从A-E,分别有11、11、13、16、16、19层,用的比较多的是VGG-16模型和VGG-19模型。
  2. VGG-16模型包括13层卷积层和3层全连接层。
  3. 视频中截取的模型结构图
  4. 根据论文画出网络模型图,13个卷积层和3个全连接层。

网络模型复现代码

python 复制代码
# 定义训练网络 VGG-16
import torch
from torch import nn
from torch.nn import functional as F
from torchinfo import summary


class VGG16(nn.Module):
    def __init__(self):
        super().__init__()
        # 定义网络结构
        # conv1
        self.conv1 = nn.Conv2d(3, 64, 3, padding=1)
        self.conv2 = nn.Conv2d(64, 64, 3, padding=1)
        self.pool1 = nn.MaxPool2d(2)

        # conv2
        self.conv3 = nn.Conv2d(64, 128, 3, padding=1)
        self.conv4 = nn.Conv2d(128, 128, 3, padding=1)
        self.pool2 = nn.MaxPool2d(2)

        # conv3
        self.conv5 = nn.Conv2d(128, 256, 3, padding=1)
        self.conv6 = nn.Conv2d(256, 256, 3, padding=1)
        self.conv7 = nn.Conv2d(256, 256, 3, padding=1)
        self.pool3 = nn.MaxPool2d(2)

        # conv4
        self.conv8 = nn.Conv2d(256, 512, 3, padding=1)
        self.conv9 = nn.Conv2d(512, 512, 3, padding=1)
        self.conv10 = nn.Conv2d(512, 512, 3, padding=1)
        self.pool4 = nn.MaxPool2d(2)

        # conv5
        self.conv11 = nn.Conv2d(512, 512, 3, padding=1)
        self.conv12 = nn.Conv2d(512, 512, 3, padding=1)
        self.conv13 = nn.Conv2d(512, 512, 3, padding=1)
        self.pool5 = nn.MaxPool2d(2)

        # fc1
        self.lr1 = nn.Linear(7 * 7 * 512, 4096)

        # fc2
        self.lr2 = nn.Linear(4096, 4096)

        # fc3
        self.lr3 = nn.Linear(4096, 1000)

    def forward(self, x):
        x = F.relu(self.conv1(x))
        x = self.pool1(F.relu(self.conv2(x)))
        x = F.relu(self.conv3(x))
        x = self.pool2(F.relu(self.conv4(x)))
        x = F.relu(self.conv5(x))
        x = F.relu(self.conv6(x))
        x = self.pool3(F.relu(self.conv7(x)))
        x = F.relu(self.conv8(x))
        x = F.relu(self.conv9(x))
        x = self.pool4(F.relu(self.conv10(x)))
        x = F.relu(self.conv11(x))
        x = F.relu(self.conv12(x))
        x = self.pool5(F.relu(self.conv13(x)))
        x = x.view(-1, 7 * 7 * 512)  # 铺平
        x = F.relu(self.lr1(F.dropout(x, p=0.5)))
        x = F.relu(self.lr2(F.dropout(x, p=0.5)))
        output = F.softmax(self.lr3(x), dim=1)


vgg = VGG16()
# 网络结构可视化
summary(vgg, input_size=(10, 3, 224, 224))
  1. Pycharm运行输出结果,可以可视化VGG的网络结构和运行信息。
  2. 代码仓库:deeplearning

网络结构可视化torchinfo

  1. 介绍
    torchinfo是一个用于PyTorch模型信息打印的Python包。它提供了一种简单而快速的方法来打印PyTorch模型的参数数量、计算图和内存使用情况等有用的信息,从而帮助深度学习开发人员更好地理解和优化他们的模型。具体来说,torchinfo可以用于打印网络的每一层尺寸等信息,使得开发人员能够更清晰地了解模型的结构和参数。
    例如,使用torchinfo库的summary函数,可以轻松地打印出模型的结构信息,包括每一层的名称、类型、输出形状和参数数量等。这对于调试模型、优化模型结构以及进行模型剪枝等操作都非常有帮助。
    总的来说,torchinfo是一个非常实用的工具,可以帮助PyTorch开发人员更好地理解和优化他们的模型。
    ------【文心一言】
  2. 安装:conda install -c conda-forge torchinfo (或pip install torchinfo

参考

  1. 使用Pytorch复现经典网络架构VGG_哔哩哔哩_bilibili
  2. PyTorch复现网络模型VGG
相关推荐
AI小杨1 分钟前
【车道线检测】一、传统车道线检测:基于霍夫变换的车道线检测史诗级详细教程
人工智能·opencv·计算机视觉·霍夫变换·车道线检测
晨曦_子画5 分钟前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
道可云7 分钟前
道可云人工智能&元宇宙每日资讯|2024国际虚拟现实创新大会将在青岛举办
大数据·人工智能·3d·机器人·ar·vr
人工智能培训咨询叶梓16 分钟前
探索开放资源上指令微调语言模型的现状
人工智能·语言模型·自然语言处理·性能优化·调优·大模型微调·指令微调
zzZ_CMing16 分钟前
大语言模型训练的全过程:预训练、微调、RLHF
人工智能·自然语言处理·aigc
newxtc18 分钟前
【旷视科技-注册/登录安全分析报告】
人工智能·科技·安全·ddddocr
成都古河云19 分钟前
智慧场馆:安全、节能与智能化管理的未来
大数据·运维·人工智能·安全·智慧城市
UCloud_TShare21 分钟前
浅谈语言模型推理框架 vLLM 0.6.0性能优化
人工智能
软工菜鸡26 分钟前
预训练语言模型BERT——PaddleNLP中的预训练模型
大数据·人工智能·深度学习·算法·语言模型·自然语言处理·bert
放飞自我的Coder29 分钟前
【python ROUGE BLEU jiaba.cut NLP常用的指标计算】
python·自然语言处理·bleu·rouge·jieba分词