現有網絡模型的使用及修改
- 一級目錄
- 二級目錄
- 三級目錄
- 現有網絡模型的使用及修改
- 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)