【深度学习】全面理解VGG16模型

article/2025/4/22 21:44:02

全面理解VGG16模型

  • VGG16的结构层次
    • 介绍结构图
    • VGG16模型所需要的内存容量
    • 介绍卷积中的基本概念
    • 1.从input到conv1:
    • 2.从conv1到conv2之间的过渡:
    • 3.conv2到conv3:
    • 4.进入conv3:
    • 5.从conv3到conv4之间的过渡:
    • 6.最后到三层全连接FC层
    • 结论

VGG16的结构层次

vgg16总共有16层,13个卷积层和3个全连接层,第一次经过64个卷积核的两次卷积后,采用一次pooling,第二次经过两次128个卷积核卷积后,再采用pooling,再重复两次三个512个卷积核卷积后,再pooling,最后经过三次全连接。附上,官方的vgg16网络结构图:
在这里插入图片描述

介绍结构图

首先需要看懂上图中的一些式子含义,如conv3-64,conv3-125

  1. conv3-64 :是指第三层卷积后维度变成64,同样地,conv3-128指的是第三层卷积后维度变成128;
  2. input(224x224 RGB image) :指的是输入图片大小为224244的彩色图像,通道为3,即224224*3;
  3. maxpool :是指最大池化,在vgg16中,pooling采用的是2*2的最大池化方法(如果不懂最大池化,下面有解释);
  4. FC-4096 :指的是全连接层中有4096个节点,同样地,FC-1000为该层全连接层有1000个节点;
  5. padding:指的是对矩阵在外边填充n圈,padding=1即填充1圈,5X5大小的矩阵,填充一圈后变成7X7大小;
  6. 最后补充,vgg16每层卷积的滑动步长stride=1,padding=1,卷积核大小为333;

VGG16模型所需要的内存容量

此处引用大佬的一张图片来说明:
VGG16模型所需要的内存容量
上图,非常清晰地展示了每经过一次卷积或pooling后,所需要占用的内存,以及需要传送的权重值个数。

介绍卷积中的基本概念

什么是卷积? 最直观的解释,直接上图(引用网上最火的图片)
卷积过程
image为需要进行卷积的图片,而convolved feature为卷积后得到的特征图;那么什么是卷积的过滤器也就是filter呢?图中黄色矩阵即为filter,image为5X5大小的一维图像,filter为3X3大小的一维矩阵;卷积过程是:filter与image对应位置相乘再相加之和,得到此时中心位置的值,填入第一行第一列,然后在移动一个格子(stride=1),继续与下一个位置卷积…最后得到是3X3X1的矩阵。
——这里需要注明:卷积后的结果矩阵维度=(image矩阵维数-filter矩阵维数+2xpad)/2+1,对应上图即宽width:3=(5-3+2x0)/1+1,高height:3=(5-3+2x0)/1+1;
如果还不懂,请接着看下图(为博主自己手写的卷积过程图)
卷积过程
在这里补充经过padding填充,那么卷积后图片大小不会发生改变,如5X5的图像大小,padding=1变成7X7,再用3X3的filter进行卷积,那么卷积后的宽高为(7-3+2x1)/1+1=7。

什么是maxpool? 最大池化就是取filter对应区域内最大像素值替代该像素点值,其作用是降维。在这里,池化使用的滤波器都是2*2大小,因此池化后得到的图像大小为原来的1/2。下图为最大池化过程:
最大池化过程

介绍完基本概念之后,就开始进入到理解VGG16的网络模型了

1.从input到conv1:

由于224不太好计算,那么这里使用input图片大小为300x300x3举例:
图片: 第一层
首先两个黄色的是卷积层,是VGG16网络结构十六层当中的第一层(Conv1_1)和第二层(Conv1_2),合称为Conv1。

那么,第一层怎么将300x300x3的矩阵变成一个300x300x64的呢??

在这里插入图片描述
假设RGB图像为蓝色框,橙色方块为3x3x3的卷积核(即filter),那么卷积后得到的图像应为298x298x1(此处没有进行padding,步长为1),但是经过填充一圈的矩阵,所以得到的结果为300x300x1,在这层中有64个卷积核,那么原来的300x300x1就变成了300x300x64。

2.从conv1到conv2之间的过渡:

在上面的结构图可以看到,第一层卷积后要经过pooling,才到第二层,那么:
第一层与第二层过渡
这层,pooling使用的filter是2x2x64,且步长为2,那么得到的矩阵维数刚好为原来的一半,第三个维度64不改变,因为那个指的是filter个数。

3.conv2到conv3:

我们从上面的过程中知道了,input为300x300x3的图片,经过第一层之后变成150x150x64,那么第二层里面有128个卷积核,可以推出经过第二层后得到是75x75x128。

4.进入conv3:

第三层
可知,第三层有256个卷积核,那么得到就是75x75x256

5.从conv3到conv4之间的过渡:

在这里插入图片描述
这里75是奇数,经过pad之后变成偶数76,那么就得到结果为38x38x256
其余的过程与上述一样,最终得到10x10x512。

6.最后到三层全连接FC层

在全连接层中的每一个节点都与上一层每个节点连接,把前一层的输出特征都综合起来。在VGG16中,第一个全连接层FC1有4096个节点,上一层pool之后得到是10x10x512=51200个节点,同样第二个全连接层FC2也有4096个节点,最后一个FC3有1000个节点。

结论

上述对VGG16进行了初步深入的理解,还有很多知识点没写,不足之处请多多原谅。另外本博文也参考了其他文章,图片来源于网络。

参考文章:

[1]: (https://blog.csdn.net/gbyy42299/article/details/78969261]
[2]: [http://mini.eastday.com/mobile/180329080222874.html#]
[3]: https://www.jianshu.com/p/a4b8b0fc7d21


http://chatgpt.dhexx.cn/article/6YWxLBql.shtml

相关文章

经典卷积神经网络---VGG16详解

一.VGG概述 VGGNet是牛津大学视觉几何组(Visual Geometry Group)提出的模型,该模型在2014ImageNet图像分类与定位挑战赛 ILSVRC-2014中取得在分类任务第二,定位任务第一的优异成绩。VGGNet突出的贡献是证明了很小的卷积,通过增加网络深度可以…

SpringCloud笔记

Eureka 一、不引入Eureka时 1.引入公共模块依赖 <!-- 引入公共模块依赖 --> <dependency><groupId>niit</groupId><artifactId>springcloud-api</artifactId> </dependency>引入后会发现Maven视图报错&#xff0c;此处需要在父工…

服务链路追踪怎么搞?好搞吗?

微服务架构是一个分布式架构&#xff0c;它按业务划分服务单元&#xff0c;一个分布式系统往往有很多个服务单元。由于服务单元数量众多&#xff0c;业务的复杂性&#xff0c;如果出现了错误和异常&#xff0c;很难去定位。主要体现在&#xff0c;一个请求可能需要调用很多个服…

java小白进阶之基础篇

JAVA基础语法归纳>>小白进阶~~java基础语法 >>Java概述 Java语言的发展历史 1991年出现&#xff0c;1995年正式发布 创始人&#xff1a;James Gosling 出生地&#xff1a;SUN 被Oracle公司在这里插入代码片 最新的JDK的版本&#xff1a; 2020年发布JDK14 Java体系…

WAF绕过总结+工具介绍

什么是WAF Waf是web应用防火墙&#xff08; Web Application Firewa‖l&#xff09;的简称&#xff0c;对来自Web应用程序客户端的各类请求进行内容检测和验证&#xff0c;确保其安全性与合法性&#xff0c;对非法的请求予以实时阻断&#xff0c;为web应用提供防护&#xff0c…

Java基础入门笔记(看到就是赚到)

一、初始java 1. 生活中的程序&#xff1a; 从起床到上班的过程 穿衣打扮—起床—洗漱—吃饭—出门—乘坐交通工具—到公司 2.计算机中的程序: 一组有序指令的集合,需要和计算机交流就要使用计算机语言&#xff0c;java就是计算机语言的一种 3.java能做什么&#xff1a; …

vue-plugin-hiprint vue hiprint vue使用hiprint打印控件VUE HiPrint HiPrint简单使用

vue-plugin-hiprint vue hiprint vue使用hiprint打印控件VUE HiPrint HiPrint简单使用 安装相关依赖安装 vue-plugin-hiprintJQuery安装 打印客户端 引入依赖打印 html 内容 - 简单使用根据模版打印 - 简单使用以下内容 和上面demo 没关系 &#xff01;&#xff01;&#xff01…

Kafka问题整理 (Too many open files等)/kafka重要参数总结

1.Kafka集群搭建好以后&#xff0c;运行一段时间Kafka节点挂掉&#xff0c;程序中出现如下错误 ERROR Error while accepting connection (kafka.network.Acceptor) java.io.IOException: Too many open files 或者 ERROR Error while deleting the clean shutdown file in…

picoCTF,Reverse Engineering,逆向类,42/55

picoCTF&#xff0c;Reverse Engineering&#xff0c;42/55 2019 picoCTF01、vault-door-training&#xff0c;50分02、vault-door-1&#xff0c;100分03、vault-door-3&#xff0c;200分04、vault-door-4&#xff0c;250分05、vault-door-5&#xff0c;300分06、vault-door-6&…

Java学习(12)(String类、String的查找方法、字符串转化、 替换、拆分、截取、trim方法、字符串的不可变性、StringBuilder和StringBuffer)

接上次博客&#xff1a;Java学习&#xff08;11&#xff09;&#xff1a;Java实现图书馆书库管理系统_di-Dora的博客-CSDN博客 目录 String类 构造字符串的方法&#xff1a; String 对象的比较 1、比较是否引用了同一个对象。 2、比较字符串内容是否相同 3、"int co…

渗透测试工具实战技巧合集

本文为作者总结自己在渗透测试中常用的一些小技巧。原文分为两部分&#xff0c;译者将其合二为一&#xff0c;方便大家查阅。 最好的 NMAP 扫描策略 # 适用所有大小网络最好的 nmap 扫描策略# 主机发现&#xff0c;生成存活主机列表 $ nmap -sn -T4 -oG Discovery.gnmap 192.1…

Netty堆外内存泄漏排查,这一篇全讲清楚了

上篇文章介绍了Netty内存模型原理&#xff0c;由于Netty使用不当会导致堆外内存泄漏&#xff0c;网上关于这方面的资料比较少&#xff0c;所以写下这篇文章&#xff0c;基于Netty4.1.43.Final&#xff0c;专门介绍排查Netty堆外内存相关的知识点&#xff0c;诊断工具&#xff0…

分支选择结构

分支语句又被称为选择结构&#xff0c;选择结构就是根据一个boolean表达式,来决定执行哪一些代码(代码块)。比较常见的分支语句有if语句和switch语句&#xff0c;下面将以代码的形式说明if和switch语句的基本构成以及其作用。 1、if语句&#xff1a;if语句作为选择语句&#xf…

选择结构。

1. 掌握if(如果)选择(分支)结构 注意&#xff1a; 经常会用到标志位&#xff0c;定义标志位的时候 也得考虑其位置 是局部变量还是全局变量 掌握基本if if(条件){// 条件成立时执行的内容 }掌握if-else(互斥) if(条件){// 条件成立 }else{// 条件不成立 }一般流程图也是这样…

C#选择结构

选择结构 概述IF选择语句if单分支选择结构if…else双分支选择结构if…else if…else多分支选择结构 switch选择语句基本语法 this关键字 概述 在程序当中&#xff0c;也存在选择语句&#xff0c;C#中共有2个选择语句&#xff1a;if和switch&#xff0c;if是单分支选择语句&…

5、选择结构

什么是选择结构 C程序的执行通常是按照顺序从上到下逐行执行。 而选择结构是根据某个变量或表达式的值来选择哪些语句执行&#xff0c;哪些语句不执行。 选择结构需要先进行条件判断&#xff08;对表达式的值判断&#xff09;&#xff0c;根据表达式的值选择是否执行。 三木运…

Python的选择结构

Python的选择结构—— if 语句 Python 中的选择结构就是判断真假。 Python 中的 if 语句就是选取要执行的结果&#xff0c;从一些备选的操作中进行要选择的语句。 if 语句后面跟着一个或多个可选的 elif &#xff08;“ else if ”&#xff09;&#xff0c;以及一个最终可选的…

初识C语言—— 选择结构程序设计

文章目录 一、if语句二、if语句的基本形式1.if语句形式2.if...else语句形式3.else if语句形式 三、if的嵌套形式四、条件运算符五、switch语句1switch语句的基本形式2.多路开关模式的switch语句 六、if...else语句和switch语句的区别七、总结 一、if语句 在C语言程序中&#x…

顺序结构 与 选择结构

1、顺序结构 流程&#xff1a;就是"程序代码的执行"顺序。 流程控制&#xff1a; 规定的语句&#xff0c;按照 哪几种方式 执行。&#xff08;这几种方式 指的是 顺序结构、选择结构、循环结构&#xff09; 顺序结构&#xff1a;按照程序&#xff08;自上而下&…

选择结构语句

if条件语句 ifelse的多层叠加 格式流程图代码console结论 ifelse ifelse语句 格式流程图代码console结论 if条件语句 1.if&#xff08;&#xff09;…else的多层叠加 格式 if&#xff08;判断语句&#xff09;{ 执行if语句1 }else{ 执行esle语句1} if&#xff08;判断语句…