当前位置: 首页 > ai >正文

Pytorch模型复现笔记-VGG讲解+架构搭建(可直接copy运行)+冒烟测试

Very Deep Convolutional Networks for Large Scale Image Recognition

  • 中文名:专门用来做大规模图像识别的超深卷积神经网络 (VGG)
  • 论文发表年份:2014

    目录

    • Very Deep Convolutional Networks for Large Scale Image Recognition
      • 模型简介
      • 提出背景
      • 设计思路
      • 达到效果
      • 对后续模型的影响
      • VGG网络结构
      • Pytorch模型实现+冒烟测试

模型简介

VGG 架构由牛津大学视觉几何小组的 Karen Simonyan 和 Andrew Zisserman 于 2014 年开发,因此被命名为 VGG。该模型与当时的过去模型相比表现出显着改进——具体来说是 2014 年 Imagenet 挑战赛,也称为 ILSVRC。

提出背景

之前有哪些相同目的的模型?

在VGG模型被提出之前,深度卷积网络(CNN)的先驱是LeNet和AlexNet。LeNet在较小的灰度图像数据集上取得了成功,为后来的模型奠定了基础。而AlexNet则在2012年的ILSVRC挑战赛中取得了巨大成功,证明了深度卷积网络在大规模图像识别任务上的巨大潜力。

之前的模型有什么不足?

  1. 模型深度有限:例如,AlexNet只有8层(5个卷积层和3个全连接层),这使得它难以捕捉到图像中更复杂、更抽象的特征。研究者们普遍认为增加网络深度可以提升性能,但如何有效地做到这一点仍然是一个挑战。

  2. 卷积核尺寸不统一:AlexNet等模型使用了不同大小的卷积核(如11x11、5x5和3x3),这使得网络结构相对复杂,设计上缺乏一致性,也增加了超参数调优的难度。

设计思路

这个模型针对不足提出了什么改进方案?解决了什么问题?

VGG团队正是针对这些不足,提出了一个核心假设:通过增加网络的深度,并使用非常小的、统一的3x3卷积核,可以显著提高模型的性能。 他们的目标是系统性地研究网络深度对准确率的影响,并证明深度的增加是提高图像识别性能的关键因素。这直接导致了VGG架构的诞生,其设计思想简洁而有效,为后续的深度学习模型(如ResNet)提供了重要启示。

  1. Uniform Convolution FIlters: 始终使用3x3卷积滤波器,有助于简化结构,保持一致性(uniformity)
    • 多个具有 ReLU 激活的小型 (3X3) 感受野滤波器而不是一个大型(7X7 或 11X11)滤波器可以更好地学习复杂特征。较小的卷积核也意味着每层的参数更少,中间引入了额外的非线性。

这里的uniformity指的是设计上的简约和统一性,指导哲学思想为奥卡姆剃刀

  1. Deep Architecture: 比之前所有的图片分类网络都深(AlexNet八层卷积层),以学习到更复杂的模式和特征

达到效果

在使用多网络和密集评估策略后

  • top-1 val 性能吊打2014其他所有SOTA
  • top-5 val/test 性能略逊googleLeNet 0.1个百分点

在这里插入图片描述
证明了VGG模型在图像分类任务上表现出色,特别是使用多网络和特定评估策略时。

对后续模型的影响

VGG结构上的简约有效性对后续深度学习模型的设计产生了深远影响,例如ResNet和Inception等架构都从VGG模型架构设计中的Deep Architecture 和 Uniform design思想中汲取了灵感。

其论文的最重要影响是证明了增加深度可以显著提高图像识别任务的性能。

VGG网络结构

这里以VGG19为例:
在这里插入图片描述在这里插入图片描述

Pytorch模型实现+冒烟测试

import torch.nn as nn
import torchclass VGG19(nn.Module):def __init__(self, num_classes=1000):super().__init__()# 特征提取骨架,卷积和池化层self.feature_extractor = nn.Sequential(nn.Conv2d(3, 64, kernel_size=3, padding=1),nn.ReLU(),nn.Conv2d(64, 64, kernel_size=3, padding=1),nn.MaxPool2d(kernel_size=2, stride=2), # 此时尺寸减半nn.Conv2d(64, 128, kernel_size=3, padding=1),nn.ReLU(),nn.Conv2d(128, 128, kernel_size=3, padding=1),nn.MaxPool2d(kernel_size=2, stride=2), # 尺寸再减半nn.Conv2d(128, 256, kernel_size=3, padding=1),nn.ReLU(),nn.Conv2d(256, 256, kernel_size=3, padding=1),nn.ReLU(),nn.Conv2d(256, 256, kernel_size=3, padding=1),nn.ReLU(),nn.MaxPool2d(kernel_size=2, stride=2),nn.Conv2d(256, 512, kernel_size=3, padding=1),nn.ReLU(),nn.Conv2d(512, 512, kernel_size=3, padding=1),nn.ReLU(),nn.Conv2d(512, 512, kernel_size=3, padding=1),nn.ReLU(),nn.MaxPool2d(kernel_size=2, stride=2),)# Pooling Layer, 一个神奇的层,无论输入特征图的尺寸是多少,它都会将其自适应地调整为指定的输出尺寸self.avgpool = nn.AdaptiveAvgPool2d(output_size=(7, 7))# 全连接层,用于分类self.classifier = nn.Sequential(nn.Flatten(),  # 作为全连接层的第一步,展平向量nn.Linear(512 * 7 * 7, 4096),nn.ReLU(),nn.Dropout(0.5), # 随机给你禁用50%的神经元,加强鲁棒性nn.Linear(4096, 4096),nn.ReLU(),nn.Dropout(0.5),nn.Linear(4096, num_classes),)def forward(self, x):x = self.feature_extractor(x)x = self.avgpool(x)x = self.classifier(x)return x
# 冒烟测试
device = torch.accelerator.current_accelerator().type if  torch.accelerator.is_available() else "cpu"
print(f"Using {device} device")
model = VGG19()
print(model)
input = torch.randn(1, 3, 224, 224, device=device)
output = model(input)
print(output[0].shape)
http://www.xdnf.cn/news/18043.html

相关文章:

  • 三维重建-动手学计算机视觉19(完结)
  • openEuler等Linux系统中如何复制移动硬盘的数据
  • 豆包 Java的23种设计模式
  • 力扣3:无重复字符的最长子串
  • 【LeetCode题解】LeetCode 33. 搜索旋转排序数组
  • Java研学-SpringCloud(二)
  • 从零到一:打包并发布你的第一个MCP AI工具服务
  • DNS总结
  • 从CVPR到NeurIPS,可变形卷积+可变形空间注意力如何斩获最佳论文
  • python+flask后端开发~项目实战 | 博客问答项目--模块化文件架构的基础搭建
  • 灰色预测模型
  • matlab tlc的文件、字符串操作
  • 【力扣热题100】双指针—— 接雨水
  • redis和cdn的相似性和区别
  • Android中切换语言的方法
  • Perf使用详解
  • 黑马商城day08-Elasticsearch作业(个人记录、仅供参考、详细图解)
  • 解决 SECURE_PCI_CONFIG_SPACE_ACCESS_VIOLATION蓝屏报错
  • 大模型提示词(Prompt)终极指南:从原理到实战,让AI输出质量提升300%
  • 为什么TCP连接是三次握手?不是四次两次?
  • ruoyi-vue(十一)——代码生成
  • ansible管理变量和事实
  • Chrome插件开发实战:todoList 插件
  • 影刀初级B级考试大题2
  • Java ArraysParallelSortHelpers 并行排序
  • PyTorch 面试题及详细答案120题(01-05)-- 基础概念与安装
  • 深度学习-计算机视觉-数据增广/图像增广
  • AMBA-AXI and ACE协议详解(三)
  • TDengine IDMP 运维指南(1. 部署规划)
  • 基于飞算JavaAI的可视化数据分析集成系统项目实践:从需求到落地的全流程解析