日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

VggNet网络结构详解

發(fā)布時間:2023/12/31 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VggNet网络结构详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

VggNet網(wǎng)絡(luò)結(jié)構(gòu)詳解

#圖像識別網(wǎng)絡(luò)結(jié)構(gòu)詳解

一、概述

VGG在2014年由牛津大學(xué)著名研究組VGG (Visual Geometry Group) 提出,斬獲該年ImageNet競賽中 Localization Task (定位任務(wù)) 第一名 和 Classification Task (分類任務(wù)) 第二名。

二、網(wǎng)絡(luò)詳解

VGG16相比AlexNet的一個改進是采用連續(xù)的幾個3x3的卷積核代替AlexNet中的較大卷積核(11x11,7x7,5x5)。對于給定的感受野(與輸出有關(guān)的輸入圖片的局部大小),采用堆積的小卷積核是優(yōu)于采用大的卷積核,因為多層非線性層可以增加網(wǎng)絡(luò)深度來保證學(xué)習(xí)更復(fù)雜的模式,而且代價還比較小(參數(shù)更少)。
簡單來說,在VGG中,使用了3個3x3卷積核來代替7x7卷積核,使用了2個3x3卷積核來代替5*5卷積核,這樣做的主要目的是在保證具有相同感知野的條件下,提升了網(wǎng)絡(luò)的深度,在一定程度上提升了神經(jīng)網(wǎng)絡(luò)的效果。比如,3個步長為1的3x3卷積核的一層層疊加作用可看成一個大小為7的感受野(其實就表示3個3x3連續(xù)卷積相當(dāng)于一個7x7卷積),其參數(shù)總量為 3x(9xC^2) ,如果直接使用7x7卷積核,其參數(shù)總量為 49x(C^2) ,這里 C指的是輸入和輸出的通道數(shù)。很明顯,27x(C^2)小于 49x(C^2),即減少了參數(shù);而且3x3卷積核有利于更好地保持圖像性質(zhì)。下表1為各個網(wǎng)絡(luò)配置,表2為VGG-19網(wǎng)絡(luò)各層詳細情況,圖1為VGG-16結(jié)構(gòu)圖
表1:各個網(wǎng)絡(luò)的配置

表2:VGG-19網(wǎng)絡(luò)各層詳細

圖1 VGG-16網(wǎng)絡(luò)結(jié)構(gòu)圖

三、VGGNet改進點總結(jié)

1 使用更小的33卷積核,和更深的網(wǎng)絡(luò)。兩個33卷積核的堆疊相對于55卷積核的視野,三個33卷積核的堆疊相當(dāng)于77卷積核的視野。這樣一方面可以減少參數(shù)(3個堆疊的33結(jié)構(gòu)只有77結(jié)構(gòu)參數(shù)數(shù)量的(333)/(77)=55%);另一方面擁有更多的非線性變換,增加了CNN對特征的學(xué)習(xí)能力。
2 在VGGNet的卷積結(jié)構(gòu)中,引入1*1的卷積核,在不影響輸入輸出維度的情況下,引入非線性變換,增加網(wǎng)絡(luò)的表達能力,降低計算量。
3 訓(xùn)練時,先訓(xùn)練級別簡單(層數(shù)較淺)的VGGNet的A級網(wǎng)絡(luò),然后使用A級網(wǎng)絡(luò)的權(quán)重來初始化后面的復(fù)雜模型,加快訓(xùn)練的收斂速度。
4 采用了Multi-Scale的方法來訓(xùn)練和預(yù)測。可以增加訓(xùn)練的數(shù)據(jù)量,防止模型過擬合,提升預(yù)測準(zhǔn)確率。
注:Single-Scale: 是指把一張圖片送到CNN;
Multi-Scale:一般會送到CNN十張圖片:比如高寬是256Χ256的圖片,Multi-Scale會在它的四個角以及中心進行裁剪 ,將其裁剪為10張 224Χ 224 的圖片,然后再進行翻轉(zhuǎn),總共十張圖片,最后全部送到 CNN。

四、VGGNet存在問題

唯一的不足是,在進行反向傳播時,中間的卷積層可能會導(dǎo)致占用更多的內(nèi)存。

五、VGG代碼

代碼如下(示例):

import torch.nn as nn import torch__all__ = ['VGG', 'vgg11', 'vgg11_bn', 'vgg13', 'vgg13_bn', 'vgg16', 'vgg16_bn','vgg19_bn', 'vgg19', ] model_urls = {'vgg11': 'https://download.pytorch.org/models/vgg11-bbd30ac9.pth','vgg13': 'https://download.pytorch.org/models/vgg13-c768596a.pth','vgg16': 'https://download.pytorch.org/models/vgg16-397923af.pth','vgg19': 'https://download.pytorch.org/models/vgg19-dcbb9e9d.pth','vgg11_bn': 'https://download.pytorch.org/models/vgg11_bn-6002323d.pth','vgg13_bn': 'https://download.pytorch.org/models/vgg13_bn-abd245e5.pth','vgg16_bn': 'https://download.pytorch.org/models/vgg16_bn-6c64b313.pth','vgg19_bn': 'https://download.pytorch.org/models/vgg19_bn-c79401a0.pth', }

1.定義分類網(wǎng)絡(luò)結(jié)構(gòu)

代碼如下(示例):

class VGG(nn.Module):# 定義初始化函數(shù)def __init__(self, features, num_classes=1000, init_weights=True):super(VGG, self).__init__()self.features = featuresself.avgpool = nn.AdaptiveAvgPool2d((7, 7))self.classifier = nn.Sequential(nn.Dropout(0.4),nn.Linear(512 * 7 * 7, 4096),nn.ReLU6(True),nn.Dropout(0.4),nn.Linear(4096, 2048),nn.ReLU6(True),nn.Dropout(0.4),nn.Linear(2048, num_classes),)if init_weights:self._initialize_weights()# 定義前向傳播函數(shù)def forward(self, x):x = self.features(x)x = self.avgpool(x)x = x.view(x.size(0), -1)x = self.classifier(x)return x# 定義初始化權(quán)重函數(shù)def _initialize_weights(self):for m in self.modules():if isinstance(m, nn.Conv2d):nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')if m.bias is not None:nn.init.constant_(m.bias, 0)elif isinstance(m, nn.BatchNorm2d):nn.init.constant_(m.weight, 1)nn.init.constant_(m.bias, 0)elif isinstance(m, nn.Linear):nn.init.normal_(m.weight, 0, 0.01)nn.init.constant_(m.bias, 0)

2 .定義提取特征網(wǎng)絡(luò)結(jié)構(gòu)函數(shù)

代碼如下(示例):

def make_layers(cfg:list, batch_norm=False):layers = []in_channels = 3for v in cfg:if v == 'M':layers += [nn.MaxPool2d(kernel_size=2, stride=2)]else:conv2d = nn.Conv2d(in_channels, v, kernel_size=3, padding=1)if batch_norm:layers += [conv2d, nn.BatchNorm2d(v), nn.ReLU(inplace=True)]else:layers += [conv2d, nn.ReLU(inplace=True)]in_channels = vreturn nn.Sequential(*layers) cfg = {'A0': [64, 'M', 128, 'M', 256, 256, 'M'],'A1': [64, 'M', 128, 'M', 256, 256, 'M', 512, 512, 'M'],'A': [64, 'M', 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M'],'B': [64, 64, 'M', 128, 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M'],'D': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 'M', 512, 512, 512, 'M', 512, 512, 512, 'M'],'E': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 256, 'M', 512, 512, 512, 512, 'M', 512, 512, 512, 512, 'M'], }

3 . 定義實例化給定的配置模型函數(shù)

代碼如下(示例):

def vgg7(**kwargs):model = VGG(make_layers(cfg['A0']), **kwargs)return modeldef vgg7_bn(**kwargs):model = VGG(make_layers(cfg['A0'], batch_norm=True), **kwargs)return modeldef vgg9(**kwargs):model = VGG(make_layers(cfg['A1']), **kwargs)return modeldef vgg9_bn(**kwargs):model = VGG(make_layers(cfg['A1'], batch_norm=True), **kwargs)return modeldef vgg11(**kwargs):model = VGG(make_layers(cfg['A']), **kwargs)return modeldef vgg11_bn(**kwargs):model = VGG(make_layers(cfg['A'], batch_norm=True), **kwargs)return modeldef vgg13(**kwargs):model = VGG(make_layers(cfg['B']), **kwargs)return modeldef vgg13_bn(**kwargs):model = VGG(make_layers(cfg['B'], batch_norm=True), **kwargs)return modeldef vgg16(**kwargs):model = VGG(make_layers(cfg['D']), **kwargs)return modeldef vgg16_bn(**kwargs):model = VGG(make_layers(cfg['D'], batch_norm=True), **kwargs)return modeldef vgg19(**kwargs):model = VGG(make_layers(cfg['E']), **kwargs)return modeldef vgg19_bn(**kwargs):model = VGG(make_layers(cfg['E'], batch_norm=True), **kwargs)return modelif __name__ == '__main__':# 'VGG', 'vgg11', 'vgg11_bn', 'vgg13', 'vgg13_bn', 'vgg16', 'vgg16_bn', 'vgg19_bn', 'vgg19'# Examplenet13 = vgg13_bn()print(net13)

六 總結(jié)

1.在本文中主要介紹了VggNet網(wǎng)絡(luò)結(jié)構(gòu)以及各層的使用情況。
2.總結(jié)了VggNet網(wǎng)絡(luò)結(jié)構(gòu)的優(yōu)缺點 。
3.提供了示例代碼。
本人水平有限,文章有寫的不對的地方歡迎各位指出!!!

總結(jié)

以上是生活随笔為你收集整理的VggNet网络结构详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。