VGG16模型详解

VGG16模型详解

0、VGG16介绍

VGG16是一种深度卷积神经网络,由牛津大学的研究团队于2014年开发。

VGG16在2014年的ImageNet Large Scale Visual Recognition Challenge (ILSVRC) 竞赛中取得了显著的成绩。它在图像分类任务中获得了当年的第二名,其准确率超过了之前的深度神经网络模型,并为后来的研究提供了重要的启示。

1、网络模型结构

这张图来源于论文《VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE            IMAGE RECOGNITION》,其中的D、E就表示的是VGG16和VGG19。

parameters:

  • input(224x224 RGB image):输入尺寸为224x224的RGB彩色图片。
  • conv3-64:前一个数字表示卷积核的大小,后一个数字表示卷积核的数量。其它的也如此。
  • maxpool:最大池化,有助于提取主要特征、降低维度、增加不变性。
  • FC-4096-1:全连接(Fully Connected)层,具体指的是包含4096个神经元的全连接层。将来自卷积和池化层的特征映射进行扁平化,然后与权重矩阵相乘并加上偏置,产生一组4096维的输出。
  • FC-4096-2:这是VGG16网络的第二个全连接层,同样具有4096个神经元。它接收来自第一个全连接层的4096维输出作为输入,然后进行相同的矩阵相乘和偏置操作,得到最终的特征表示。
  • FC-1000:最后一个全连接层是FC-1000,它有1000个神经元,对应于ImageNet数据集中的1000个类别(即网络被训练用于ImageNet图像分类任务)。这一层的输出经过softmax激活函数后,表示图像属于每个类别的概率分布,从而实现了分类功能。

2、VGG16的卷积核特点

VGG网络的卷积层全部采用的是3x3卷积核,这个设计是VGG16网络的一个显著特点。一个3x3卷积核包含了一个像素的上下左右的最小单元。连续多层的3x3卷积核可以拟合更复杂的特征,同时增加网络深度。

两个3x3卷积可以替代一个5x5卷积,三个3x3卷积可以替代一个7x7卷积。这样多个小卷积核的卷积层替代一个卷积核较大的卷积层,一方面参数数量减少了,另一方面非线性次数也变多了,学习能力变得更好,网络的表达能力也提升了。

3、网络卷积过程

图片来源于同济子豪兄的视频。

  • 输入尺寸为224x224x3的RGB图像,经过block1,步长为1,padding=1的填充。经过两个卷积层后,再经过ReLU函数激活,尺寸不变,通道数为64。尺寸变为224x224x64。
  • 每经过maxpool,滤波器大小为2x2,步长为2,尺寸减半。尺寸变为112x112x64。
  • 经过block2,两次卷积,ReLU激活。尺寸变为112x112x128。
  • maxpool池化,尺寸变为56x56x128。
  • 经过block3,三次卷积,ReLU激活。尺寸变为56x56x256。
  • maxpool池化,尺寸变为28x28x256。
  • 经过block4,三次卷积,ReLU激活。尺寸变为28x28x512。
  • maxpool池化,尺寸变为14x14x512。
  • 经过block5,三次卷积,ReLU激活。尺寸变为14x14x512。
  • maxpool池化,尺寸变为7x7x512。
  • 然后Flatten(),变成一维512*7*7=25088。
  • 经过两层1x1x4096,一层1x1x1000的全连接层(共三层),经ReLU激活。
  • 最后通过softmax输出1000个预测结果。

4、查看Pytorch内置的VGG16模型

import torch
import torchvision
import torch.nn as nn
import torchsummary# pytorch内置的VGG16的模型
model = torchvision.models.vgg16()
print(model)

控制台部分内容:

5、内置模型的参数量

import torch
import torchvision
import torch.nn as nn
import torchsummarymodel = torchvision.models.vgg16()
torchsummary.summary(model,input_size=(3,244,244),batch_size=2,device='cpu')

控制台部分内容:

部分参数量 

Total params: 138,357,544

总的参数量达到了1.38亿。VGG16具有如此之大的参数数目,可以预期它具有很高的拟合能力,但同时缺点也很明显,即训练时间过长,调参难度大。需要的存储容量大,不利于部署。

6、使用Pytorch实现VGG16

class VGG16(nn.Module):"""每个卷积核大小都是3x3,后面步长为1,padding=1每个卷积后面都用了ReLU"""def __init__(self,in_channel=3,out_channel=1000,num_hidden=512*7*7):super(VGG16,self).__init__()self.features=nn.Sequential(# block1nn.Conv2d(in_channel,64,(3,3),(1,1),1),nn.ReLU(inplace=True),nn.Conv2d(64, 64, (3, 3), (1, 1), 1),nn.ReLU(inplace=True),nn.MaxPool2d(2,2),# block2nn.Conv2d(64, 128, (3, 3), (1, 1), 1),nn.ReLU(inplace=True),nn.Conv2d(128, 128, (3, 3), (1, 1), 1),nn.ReLU(inplace=True),nn.MaxPool2d(2, 2),# block3nn.Conv2d(128, 256, (3, 3), (1, 1), 1),nn.ReLU(inplace=True),nn.Conv2d(256, 256, (3, 3), (1, 1), 1),nn.ReLU(inplace=True),nn.Conv2d(256, 256, (3, 3), (1, 1), 1),nn.ReLU(inplace=True),nn.MaxPool2d(2, 2),# block4nn.Conv2d(256, 512, (3, 3), (1, 1), 1),nn.ReLU(inplace=True),nn.Conv2d(512, 512, (3, 3), (1, 1), 1),nn.ReLU(inplace=True),nn.Conv2d(512, 512, (3, 3), (1, 1), 1),nn.ReLU(inplace=True),nn.MaxPool2d(2, 2),# block5nn.Conv2d(512, 512, (3, 3), (1, 1), 1),nn.ReLU(inplace=True),nn.Conv2d(512, 512, (3, 3), (1, 1), 1),nn.ReLU(inplace=True),nn.Conv2d(512, 512, (3, 3), (1, 1), 1),nn.ReLU(inplace=True),nn.MaxPool2d(2, 2),)self.avgpool = nn.AdaptiveAvgPool2d(output_size=(7,7))self.classifier = nn.Sequential(nn.Linear(num_hidden, 4096),nn.ReLU(),nn.Dropout(),nn.Linear(4096, 4096),nn.ReLU(),nn.Dropout(),nn.Linear(4096, out_channel),)def forward(self, x):x = self.features(x)x = self.avgpool(x)x = torch.flatten(x, 1)x = self.classifier(x)return x

上面均为仿照Pytorch内置的VGG16模型的参数编写的。

7、总结

VGG16作为深度学习发展历程中的重要里程碑,强调了通过增加网络深度和一致性设计来提取图像特征。它的成功启发了后续更复杂的网络架构和方法,并在图像分类等任务中取得了重要成就。通过研究和实践,我们可以更好地理解VGG16的原理,并将其应用于实际问题中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/30303.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matplotlib 笔记 plt.grid

用于添加网格线 主要参数 visible 布尔值,True表示画网格 which表示要显示的刻度线类型,可以是 major(主刻度)或 minor(次刻度),或者同时显示(both)alpha 透明度 …

音视频--视频数据传输

参考文献 H264码流RTP封装方式详解:https://blog.csdn.net/water1209/article/details/126019272H264视频传输、编解码----RTP协议对H264数据帧拆包、打包、解包过程: https://blog.csdn.net/wujian946110509/article/details/79129338H264之NALU解析&a…

【Redis】初学Redis

目录 使用Redisyum安装redis启动redis操作redis设置远程连接 Redis路线Redis 使用Redis yum安装redis 使用命令,直接将Redis安装到linux服务器: yum -y install redis启动redis redis-server /etc/redis.conf &操作redis redis-cli设置远程连接…

Shopee虾皮买家号注册时需要注意什么问题

虾皮是一家在线购物平台,如果您打算在虾皮上注册一个买家账号,以下是一些需要注意的问题: 账号安全:确保您选择一个安全的密码,并定期更改密码,以保护您的账号免受未经授权的访问。 个人信息:…

网页版Java(Spring/Spring Boot/Spring MVC)五子棋项目(四)对战模块

网页版Java(Spring/Spring Boot/Spring MVC)五子棋项目(四)对战模块 一、约定前后端交互接口1. 建立连接接口2. 针对落子的请求和响应 二、实现前端页面三、实现后端1. 当用户进入房间,更新用户状态 OnlineUserManager…

Linux mysql5.7开启 binlog

查看 mysql是否开启 binlog。 查看命令: show variables like %log_bin%; log_bin OFF 是关闭的状态。 编辑my.cnf配置文件 vim /etc/my.cnf 默认的配置文件内容: 增加下面内容 server_id 1 binlog_format ROW log-bin mysql_log_bin 重启mysq…

木马免杀(篇一)基础知识学习

木马免杀(篇一)基础知识学习 ———— 简单的木马就是一个 exe 文件,比如今年hw流传的一张图:某可疑 exe 文件正在加载。当然木马还可能伪造成各式各样的文件,dll动态链接库文件、lnk快捷方式文件等,也可能…

MySQL单表查询

单表查询 素材: 表名:worker-- 表中字段均为中文,比如 部门号 工资 职工号 参加工作 等 CREATE TABLE worker ( 部门号 int(11) NOT NULL, 职工号 int(11) NOT NULL, 工作时间 date NOT NULL, 工资 float(8,2) NOT NULL, 政治面貌 varch…

Spring MVC项目概述及创建

Spring MVC项目概述及创建 1.什么是Spring MVC Spring MVC是基于SevletAPI的原始Web框架。Spring MVC项目也叫做SpringWeb项目。 它是在springboot项目中引入了web框架,原本的spring项目不具备网络通信能力,而spring mvc允许http响应,当用…

无刷电机控制

无刷电机控制 特点: 线圈不动,磁极转动电子换向方式消除了有刷电机的缺点单位质量/功率转矩大驱动较复杂

徐雷,太委屈

文 | 螳螂观察 作者 | 仲夏 自3月8日上线以来,京东百亿补贴已整整5个月。相比首月投入10个亿,京东百亿补贴如今的存在显得尴尬与鸡肋。 眼看百亿补贴难以肩负发力下沉市场、扛起低价策略的重任,京东近期又将“京喜拼拼”更名“京东拼拼”卷…

FFmpeg 编码详细流程

介绍 FFmpeg的 libavcodec 模块完成音视频多媒体的编解码模块。FFmpeg 本身不具有音视频编码的功能和底层能力,只是对各类第三方的编码器API 进行封装调用。老版本的 FFmpeg 将avcodec_encode_video2()作为视频的解码函数 API,将avcodec_encode_audio2(…

(学习笔记-进程管理)进程间有哪些通信方式?

每个进程的用户地址空间都是独立的,一般而言是不能互相访问的,但内核空间时每个进程都共享的,所以进程之间要通信必须通过内核 管道 在Linux命令中 [ | ] 这个竖线就是一个管道。 $ ps auxf | grep mysql 它的功能是讲前一个命令&#xf…

如何使用 AT+WEBSERVER 指令实现自定义的 Webserver html 网页配网

开启 AT 固件中的 Webserver 指令和 FS 指令支持 乐鑫官网发布的默认通用 AT 固件不支持 webserver 配网功能, 需要用户自己搭建 esp-at 环境,并在 sdkconfig 中开启 webserver AT 指令 和 FS 指令的支持, 如下图所示: 测试 AT 固…

java中try-with-resources自动关闭io流

文章目录 java中try-with-resources自动关闭io流0 简要说明try-with-resources java中try-with-resources自动关闭io流 0 简要说明 在传统的输入输出流处理中,我们一般使用的结构如下所示,使用try - catch - finally结构捕获相关异常,最后不…

Mybatis-plus的使用

1、介绍 2、开发方式 3、MyBatisPlus-01-MybatisPlus入门案例_哔哩哔哩_bilibili,105,3.55分钟 Mybatis使用流程可以看这: 4、創建一張表: ​ 5、创建一个SpringBoot工程 ​ ​ 6、版本调成8 ​ 7、这里之只做数据层,不弄we…

SpringBoot 依赖管理

Spring Boot 依赖管理 在 Spring Boot 中,依赖管理是通过 Maven 或 Gradle 进行管理的。Spring Boot 提供了一种简化的方式来管理和引入依赖项,使得构建和管理项目变得更加容易。下面是一些关于 Spring Boot 依赖管理的基本信息和示例: 使用…

如何系统的学习单片机?

一、学习单片机需要的一些基础知识 (1)要具有一些模电、数电的知识(不一定要精通,但基本至少要知道) (2)具备C语言基础,有基础就可以入门了。数据结构、设计模式、汇编这些&#x…

管理类联考——逻辑——论证逻辑——汇总篇——真题和典例——假设

通用方法/没有特点 方法关系 199-2013-1-41——方法关系——方法有效或方法可行 新近一项研究发现,海水颜色能够让飓风改变方向,也就是说,如果海水变色,飓风的移动路径也会变向。这也就意味着科学家可以根据海水的“脸色”判断…

node.js

什么是Node.js Node.js 是一个免费的、开源的、跨平台的 JavaScript 运行时环境,使开发者可以搭建服务器端的JavaScript应用程序 概念: 使用Node.js编写后端程序 // 支持前端工程化 ​ 后端程序:提供接口和数据 ,网页资源 ​ 前端工程化:对代码压缩&…