现有网络模型的使用及修改
- 一级目录
- 二级目录
- 三级目录
- 现有网络模型的使用及修改
- 1.VGG16模型
- VGG16网络模型简介
- **核心特点**
- **网络结构细节**
- **优缺点与应用**
- **变种与后续发展**
- 2. 使用vgg16模型
一级目录
二级目录
三级目录
现有网络模型的使用及修改
1.VGG16模型
VGG16网络模型简介
VGG16是2014年由牛津大学视觉几何组(Visual Geometry Group, VGG)提出的卷积神经网络(CNN)模型,在当年的ImageNet大规模视觉识别挑战赛(ILSVRC)中获得亚军。它以结构简洁、层次深、特征表达能力强著称,是深度学习领域的经典模型之一,常用于图像分类、目标检测等任务的特征提取。
核心特点
-
深度结构
- 由16个可训练的权重层组成(包括13个卷积层和3个全连接层),网络层次较深,通过堆叠多个小尺寸卷积核(3×3)来增加网络深度和非线性表达能力。
- 相比早期使用大尺寸卷积核(如AlexNet的11×11)的模型,VGG16通过小卷积核的组合(两个3×3卷积核相当于1个5×5的感受野,三个3×3相当于1个7×7的感受野),在减少参数的同时增强特征提取能力。
-
简洁的网络设计
- 整体结构统一,采用卷积层+池化层交替堆叠的模式:
- 卷积层:均使用3×3卷积核,步长为1, padding为1(保持特征图尺寸不变),激活函数为ReLU。
- 池化层:均使用2×2最大池化(Max Pooling),步长为2,用于下采样和减少计算量。
- 整体结构统一,采用卷积层+池化层交替堆叠的模式:
-
全连接层与分类
- 最后3层为全连接层,前两层各有4096个神经元,第三层有1000个神经元(对应ImageNet的1000类分类任务),通过Softmax激活函数输出分类概率。
网络结构细节
以下是VGG16的层结构概览(以输入224×224 RGB图像为例):
层类型 | 尺寸/数量 | 说明 |
---|---|---|
输入层 | 224×224×3 | 输入图像(RGB三通道) |
卷积块1 | ||
卷积层 | 64×3×3×2 | 2个3×3卷积核,输出64通道,ReLU激活 |
最大池化层 | 2×2,步长2 | 输出尺寸变为112×112×64 |
卷积块2 | ||
卷积层 | 128×3×3×2 | 2个3×3卷积核,输出128通道,ReLU激活 |
最大池化层 | 2×2,步长2 | 输出尺寸变为56×56×128 |
卷积块3 | ||
卷积层 | 256×3×3×3 | 3个3×3卷积核,输出256通道,ReLU激活 |
最大池化层 | 2×2,步长2 | 输出尺寸变为28×28×256 |
卷积块4 | ||
卷积层 | 512×3×3×3 | 3个3×3卷积核,输出512通道,ReLU激活 |
最大池化层 | 2×2,步长2 | 输出尺寸变为14×14×512 |
卷积块5 | ||
卷积层 | 512×3×3×3 | 3个3×3卷积核,输出512通道,ReLU激活 |
最大池化层 | 2×2,步长2 | 输出尺寸变为7×7×512 |
全连接层 | ||
全连接层 | 4096神经元 | ReLU激活,Dropout(防止过拟合) |
全连接层 | 4096神经元 | ReLU激活,Dropout |
全连接层 | 1000神经元 | Softmax激活,输出分类概率 |
优缺点与应用
-
优点:
- 结构简单、层次分明,易于复现和修改,是研究CNN网络深度影响的经典基准。
- 特征表达能力强,预训练权重可迁移到其他视觉任务(如目标检测、图像分割)中进行迁移学习。
-
缺点:
- 参数总量较大(约1.38亿参数),计算复杂度高,训练需要大量显存和时间。
- 全连接层占参数比例高,对输入图像尺寸敏感(需固定为224×224)。
-
应用场景:
- 图像分类(如ImageNet)、目标检测(如Faster R-CNN中作为特征提取骨干网络)、图像特征提取等。
变种与后续发展
VGG系列还包括VGG11、VGG13、VGG19等变种,主要区别在于卷积层的数量(如VGG19有19个权重层)。尽管VGG模型在现代任务中逐渐被更高效的网络(如ResNet、EfficientNet)取代,但其设计思想(如小卷积核堆叠、层次化特征提取)对后续CNN发展具有深远影响。
2. 使用vgg16模型
import torchvision
from torch import nnvgg16 = torchvision.models.vgg16(pretrained=False)
vgg_true = torchvision.models.vgg16(pretrained=True) # 预训练,保留参数print(vgg_true)
可以看到vgg网络模型有1000个特征输出
我们可以通过一下方法对网络模型的结构进行修改,让网络模型有10个特征输出
import torchvision
from torch import nnvgg16_false = torchvision.models.vgg16(pretrained=False)
vgg16_true = torchvision.models.vgg16(pretrained=True) # 预训练,保留参数# print(vgg_true)
train_data = torchvision.datasets.CIFAR10("./das",train=True, transform=torchvision.transforms.ToTensor(),download=True)vgg16_true.classifier.add_module('add_linear', nn.Linear(1000,10)) # 添加一层
print(vgg16_true)