VGG16网络详解并使用pytorch搭建模型
VGG网络结构
网络中的亮点:通过堆叠多个3x3的卷积核来代替大尺度卷积核(减少所需参数),可以拥有相同的感受野
1、一张原始图片被resize到(224,224,3)。
2、conv1两次[3,3]卷积网络,输出的特征层为64,输出为(224,224,64),再2X2最大池化,输出net为(112,112,64)。
3、conv2两次[3,3]卷积网络,输出的特征层为128,输出net为(112,112,128),再2X2最大池化,输出net为(56,56,128)。
4、conv3三次[3,3]卷积网络,输出的特征层为256,输出net为(56,56,256),再2X2最大池化,输出net为(28,28,256)。
5、conv4三次[3,3]卷积网络,输出的特征层为512,输出net为(28,28,512),再2X2最大池化,输出net为(14,14,512)。
6、conv5三次[3,3]卷积网络,输出的特征层为512,输出net为(14,14,512),再2X2最大池化,输出net为(7,7,512)。
7、利用卷积的方式模拟全连接层,效果等同,输出net为(1,1,4096)。共进行两次。
8、利用卷积的方式模拟全连接层,效果等同,输出net为(1,1,1000)。
最后输出的就是每个类的预测。
在卷积神经网络中,决定某一层输出结果中一个元素所对应的输入层的区域大小,被称作感受野。通俗的解释是,输出feature map上的一个单元对应输入层上的区域大小。
在VGG中,使用三个3x3的卷积核可以替代一个7x7的卷积核(步长默认为1):
论文中提到通过这种方法能够减少所需参数:
假设输入输出channel为C,那么使用7x7卷积核所需参数为7x7xCxC=49C3;堆叠三个3x3卷积核所需参数为3x3xCxC+3x3xCxC+3x3xCxC=27C3。
VGG网络搭建
VGG网络可以分为两个部分:提取特征网络结构和分类网络结构
不同网络结构配置
#cfgs字典文件,字典的每个key代表每个模型的配置文件
cfgs = {'vgg11': [64, 'M', 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M'], #列表中的数字代表卷积层卷积核的个数,M代表池化层的结构(maxpool)'vgg13': [64, 64, 'M', 128, 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M'],'vgg16': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 'M', 512, 512, 512, 'M', 512, 512, 512, 'M'],'vgg19': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 256, 'M', 512, 512, 512, 512, 'M', 512, 512, 512, 512, 'M'],
}
特征提取网络
def make_features(cfg: list): #生成提取特征网络(list类型)layers = [] #定义一个空列表用来盛放定义的每一层结构in_channels = 3 #输入的图片是RGB图像for v in cfg: #for循环来遍历配置列表if v == "M": #如果配置元素是M,那么说明该层为最大池化层,那么就创建一个最大池化下采样层layers += [nn.MaxPool2d(kernel_size=2, stride=2)]else: #否则该层为卷积层,则创建卷积操作conv2d = nn.Conv2d(in_channels, v, kernel_size=3, padding=1)layers += [conv2d, nn.ReLU(True)] #将定义的卷积层和ReLU激活函数拼接并添加到layers列表中in_channels = v #当特征矩阵通过该层卷积后其输出变成vreturn nn.Sequential(*layers) #将列表通过非关键字参数的形式传入(*代表通过非关键字形式,sequential要求)
分类网络
self.classifier = nn.Sequential( #生成分类网络结构nn.Linear(512*7*7, 4096), #展平处理nn.ReLU(True),nn.Dropout(p=0.5),nn.Linear(4096, 4096),nn.ReLU(True),nn.Dropout(p=0.5),nn.Linear(4096, num_classes))
训练和预测相关代码和AlexNet网络差不多
导师博客:https://blog.csdn.net/qq_37541097/article/details/103482003
导师github:https://github.com/WZMIAOMIAO/deep-learning-for-image-processing
代码用的导师的,自己又加了些备注,就放在自己的github里了:
https://github.com/Petrichor223/Deep_Learning/tree/master
VGG16网络详解并使用pytorch搭建模型相关推荐
- MobileNetv1、v2网络详解、使用pytorch搭建模型MobileNetv2并基于迁移学习训练
1.MobileNetv1网络详解 传统卷积神经网络专注于移动端或者嵌入式设备中的轻量级CNN网络,相比于传统卷积神经网络,在准确率小幅降低的前提下大大减少模型参数与运算量.(相比VGG16准确率减少 ...
- ResNet网络详解并使用pytorch搭建模型、并基于迁移学习训练
1.ResNet网络详解 网络中的创新点: (1)超深的网络结构(突破1000层) (2)提出residual模块 (3)使用Batch Normalization加速训练(丢弃dropout) (1 ...
- GoogLeNet网络详解并使用pytorch搭建模型
1.GoogLeNet网络详解 网络中的创新点: (1)引入了Inception结构(融合不同尺度的特征信息) (2)使用1x1的卷积核进行降维以及映射处理 (虽然VGG网络中也有,但该论文介绍的更详 ...
- Faster-RCNN.pytorch的搭建、使用过程详解(适配PyTorch 1.0以上版本)
Faster-RCNN.pytorch的搭建.使用过程详解 引言 faster-rcnn pytorch代码下载 faster-rcnn pytorch配置过程 faster-rcnn pytorch ...
- YOLOv4网络详解
0前言 在YOLOv4论文中,作者其实就是把当年所有的常用技术罗列了一遍,然后做了一堆消融实验. 1.YOLOV4的网络改进部分 1.主干特征提取网络:DarkNet53 => CSPDarkN ...
- ResNet网络详解与keras实现
ResNet网络详解与keras实现 ResNet网络详解与keras实现 Resnet网络的概览 Pascal_VOC数据集 第一层目录 第二层目录 第三层目录 梯度退化 Residual Lear ...
- GoogleNet网络详解与keras实现
GoogleNet网络详解与keras实现 GoogleNet网络详解与keras实现 GoogleNet系列网络的概览 Pascal_VOC数据集 第一层目录 第二层目录 第三层目录 Incepti ...
- EfficientNetV2网络详解
原论文名称:EfficientNetV2: Smaller Models and Faster Training 论文下载地址:https://arxiv.org/abs/2104.00298 原论文 ...
- ResNet、ResNeXt网络详解及复现
网络详解: ResNet网络详解 ResNeXt网络详解 torch复现: import torch.nn as nn import torch''' 对应着18层和34层的残差结构 既要拥有实现部分 ...
最新文章
- Error:java: 无效的源发行版: 11
- ModuleNotFoundError: No module named ‘cx_Oracle‘
- JAVA作业 02 JAVA语法基础
- views 多个文件夹 netcore_.NET Core中的使用Kestrel服务器理解及应用
- 网络安全之SQL注入
- 软件项目管理第二课—项目投标准备工作及投标函
- g2o图优化简介与基本使用方法
- SpringBoot-Bean作用域
- 如何把空间数据从CGCS2000转换到WGS84和BD09 ——JAVA语言实现
- indy-sdk tutorials数字身份认证(一)
- HTML 修真录------深渊三君王
- Mac 下如何解压 bin 文件
- 英文字母pc是什么意思,互联网的pc指的是什么
- “任期”已近20年,这个AI训练工具有点儿问题
- 2019CCPC江苏南京女生赛 | 总结
- 深入产品线的配置管理
- 电商设计师(美工)必备的素材网站!
- 网页下载工具curl命令简介
- 《作为意志和表象的世界》_世界作为表象初论_叔本华
- python mongodb驱动 pymongo模块常见用法总结