VGG網絡詳解

2021-02-13 AI與計算機視覺

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

具體的來說,論文中寫到通過堆疊兩個3×3的卷積核代替5×5的卷積核,堆疊三個3×3的卷積核替代7×7的卷積核。也就說小的多個卷積核堆疊和一個大的卷積核具有相同的感受野,提取的特徵是一樣的。

在卷積神經網絡中,決定某一層輸出結果中一個元素所對應的輸入層的區域大小,被稱為感受野(receptive field)。通俗的解釋是,輸出feature map上的一個單元對應輸入層上的區域大小。

下面使用深度學習框架pytorch搭建VGG網絡,IDE環境為Pycharm2020.2.3,Pytorch1.7.1,python3.6.8。數據集以花分類數據集為例,最後進訓練得到模型,並在網上隨機下載一張鬱金香圖片預測成功。

"""Author: LGDFileName: modelDateTime: 2021/1/24 21:30 SoftWare: PyCharm"""import torch.nn as nnimport torch

class VGG(nn.Module): def __init__(self, features, num_class=1000, init_weights=False): super(VGG, self).__init__() self.features = features self.classifier = nn.Sequential( nn.Dropout(p=0.5), nn.Linear(512 * 7 * 7, 2048), nn.ReLU(True), nn.Dropout(p=0.5), nn.Linear(2048, 2048), nn.ReLU(True), nn.Linear(2048, num_class) ) if init_weights: self._initialize_weights()
def forward(self, x): x = self.features(x) x = torch.flatten(x, start_dim=1) x = self.classifier(x)
return x
def _initialize_weights(self): for m in self.modules(): if isinstance(m, nn.Conv2d): nn.init.xavier_uniform_(m.weight) if m.bias is not None: nn.init.constant_(m.bias, 0) elif isinstance(m, nn.Linear): nn.init.xavier_uniform_(m.weight) nn.init.constant_(m.bias, 0)

def make_features(cfg: list): layers = [] in_channels = 3 for v in cfg: if v == 'M': layers += [nn.MaxPool2d(kernel_size=2, stride=2)] else: conv2d = nn.Conv2d(in_channels=in_channels, out_channels=v, kernel_size=3, padding=1) layers += [conv2d, nn.ReLU(True)] in_channels = v
return nn.Sequential(*layers)

cfgs = { 'vgg11': [64, 'M', 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M'], '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 vgg(model_name='vgg16', **kwargs): try: cfg = cfgs[model_name] except: print("Waring: model name {} not in cfgs dict!".format(model_name)) exit(-1)
model = VGG(make_features(cfg), **kwargs)
    return model

相關焦點

  • VGG:使用基礎卷積塊的網絡
    雖然AlexNet指明了深度卷積神經網絡有出色的表現,但並沒有提供簡單的規則以指導後來的研究者如何設計新的網絡。VGG網絡是Oxford的Visual Geometry Group組提出的,VGG網絡是實驗室名字的縮寫。
  • 一文讀懂VGG網絡
    本文旨在加深Amusi對VGG網絡的印象,並儘可能詳盡地來介紹VGG網絡,供以後方便查詢。若能順便幫助各位CVer理解VGG網絡,實屬榮幸。該網絡是在ILSVRC 2014上的相關工作,主要工作是證明了增加網絡的深度能夠在一定程度上影響網絡最終的性能。VGG有兩種結構,分別是VGG16和VGG19,兩者並沒有本質上的區別,只是網絡深度不一樣。
  • 深度理論VGG-NET 網絡
    VGGNet的主要特點在於:(1)網絡很深;(2)卷積層中使用的卷積核很小,且都是3*3的卷積核。方法使用了卷積神經網絡,其中卷積核為3x3卷積核,按照模型的層數,分為11-19層,其中16層的模型為VGG-16,19層的為VGG-19論文中,作者測試了A-E不同深度的神經網絡。
  • 常用CNN網絡(AlexNet,GoogleNet,VGG,ResNet,DenseNet,inceptionV4)適合初學者
    /ZiliangWang0505/Alexnet_with_keras    GoogleNet    https://github.com/pinae/GoogLeNet-Keras-Test    VGG    https://github.com/geifmany/cifar-vgg
  • Mini-VGG實現CIFAR10數據集分類
    VGG16網絡架構論文講解請詳見:【深度神經網絡】三、VGG網絡架構詳解(https://blog.csdn.net/qq_30091945/article/details/95481941)整個項目的github地址為:Mini-VGG-CIFAR10(https://github.com/Daipuwei/Mini-VGG-CIFAR10
  • [深度學習] AlexNet,GoogLeNet,VGG,ResNet簡化版
    總結了一下這幾個網絡的比較重要的點,像這些經典的網絡,面試的時候,估計會經常問到,怎麼用自己的話說出來?不知道大家想過沒有。
  • [計算機視覺]圖像分類中的網路結構(4)VGG
    """vgg in pytorch[1] Karen Simonyan, Andrew Zisserman Very Deep Convolutional Networks for Large-Scale Image Recognition.
  • 資源 | 如何利用VGG-16等模型在CPU上測評各深度學習框架
    目前這兩個網絡的參數都是隨機生成的,因為我們只需要測試輸入數據通過神經網絡的測試時間。最後的結果並不能保證絕對正確,但作者希望能與我們共同測試並更新結果。: 0.044592 (sd 0.010633)caffe2(1.0)caffe2-vgg-16 : 1.351302 (sd 0.053903)caffe2-mobilenet : 0.069122 (sd 0.003914)caffe2(mkl, 1.0)caffe2-vgg-16 : 0.526263 (sd 0.026561
  • 實戰 | 基於深度學習模型VGG的圖像識別(附代碼)
    該模型相比以往模型進一步加寬和加深了網絡結構,它的核心是五組卷積操作,每兩組之間做Max-Pooling空間降維。同一組內採用多次連續的3X3卷積,卷積核的數目由較淺組的64增多到最深組的512,同一組內的卷積核數目是一樣的。卷積之後接兩層全連接層,之後是分類層。由於每組內卷積層的不同,有11、13、16、19層這幾種模型,下圖展示一個16層的網絡結構。
  • 零基礎入門深度學習(七):圖像分類任務之VGG、GoogLeNet和ResNet
    VGG通過使用一系列大小為3x3的小尺寸卷積核和pooling層構造深度卷積神經網絡,並取得了較好的效果。VGG模型因為結構簡單、應用性極強而廣受研究者歡迎,尤其是它的網絡結構設計方法,為構建深度神經網絡提供了方向。圖3 是VGG-16的網絡結構示意圖,有13層卷積和3層全連接層。
  • 北大和阿里提出:M2Det,基於多級特徵金字塔網絡的目標檢測器,已開源
    目前常用的四種特徵金字塔有:SSD型,FPN型,STDN型,還有我們介紹的MLFPN型.並總結了前三種特徵金字塔的缺點,主要有兩點:一是均基於分類網絡作為主幹提取,對目標檢測任務而言特徵表示可能不夠(特徵提取的和特徵融合還是太少);二是每個feature map僅由主幹網絡的single level給出,不夠全面(一般來說,高層特徵利於進行分類,低層特徵利於回歸目標位置)
  • SSD論文與代碼詳解
    SSD網絡結構SSD是YOLO V1出來後,YOLO V2出來前的一款One-stage目標檢測器。仔細閱讀論文會發現他的很多tricks被後面提出的,其他的檢測網絡所借鑑。就網絡結構這塊,SSD用到了多尺度的特徵圖,其實在YOLO V3的darknet53中,也是用到了多尺度特徵圖的思想。
  • RegNet網絡詳解
    AnyNet Design SpaceAnyNetX(A)Design SpaceAnyNetX(B)Design SpaceAnyNetX(C)Design SpaceAnyNetX(D)Design SpaceAnyNetX(E)Design SpaceRegNet Design SpaceRegNet網絡結構詳解
  • 深度學習算法優化:VGG,ResNet,DenseNe 模型剪枝代碼實戰
    接著聯合訓練網絡權重和這些縮放因子,最後將小縮放因子的通道直接移除,微調剪枝後的網絡,特別地,目標函數被定義為:在這裡插入圖片描述其中剪枝的具體步驟如下:模型加載加載需要剪枝的模型,也即是稀疏訓練得到的BaseLine模型,代碼如下,其中args.depth用於指定VGG模型的深度,一般為16和19:model = vgg(dataset=args.dataset, depth=args.depth)if
  • 卷積神經網絡之 - VGGNet
    Networks for Large-Scale Image Recognition》論文中,作者給出了 6 個 VGG 模型,對應不同的網絡結構和深度,具體結構如下:不同的網絡結構這樣的連接方式使得網絡參數量更小,而且多層的激活函數令網絡對特徵的學習能力更強。多個 3*3 的卷積核比一個較大尺寸的卷積核有更多層的非線性函數,增加了非線性表達,使判決函數更具有判決性。結合 1×1 卷積層是增加決策函數非線性而不影響卷積層感受野的一種方式。訓練設置:批量大小設為 256,動量為 0.9。
  • VGGNet、ResNet、Inception和Xception圖像分類及對比
    該網絡使用 3×3 卷積核的卷積層堆疊並交替最大池化層,有兩個 4096 維的全連接層,然後是 softmax 分類器。16 和 19 分別代表網絡中權重層的數量(即列 D 和 E):圖 1 深層網絡配置示例在 2015 年,16 層或 19 層網絡就可以認為是深度網絡,但到了 2017 年,深度網絡可達數百層。
  • AI 代碼實踐:卷積神經網絡圖像風格轉換(Style Transfer)
    所以樣式圖像網絡是 多輸出模型。因此,網絡中早期層中的激活圖將捕獲一些更精細的紋理( 低級特徵),而激活貼圖更深的層將捕獲更高級別的圖像樣式元素。為了獲得最佳結果,我們將結合淺層和深層作為輸出來比較圖像的樣式表示和 我們相應地定義了多輸出模型。首先,我們計算每層的Gram矩陣,並計算樣式網絡的總樣式損失。我們對不同的層採用不同的權重來計算加權損失。
  • VMware虛擬機三種網絡模式詳解
    在使用虛擬機軟體的時候,很多初學者都會遇到很多問題,而VMware的網絡連接問題是大家遇到最多問題之一。在學習交流群裡面,幾乎每天都會有同學問到這些問題,寫這篇詳解也是因為群裡童鞋網絡出故障,然後在幫他解決的過程中,對自己的理解也做一個總結。接下來,我們就一起來探討一下關於VMware Workstations網絡連接的三種模式。
  • 【乾貨】VMware虛擬機三種網絡模式詳解
    在使用虛擬機軟體的時候,很多初學者都會遇到很多問題,而vmware的網絡連接問題是大家遇到最多問題之一。在學習交流群裡面,幾乎每天都會有同學問到這些問題,寫這篇詳解也是因為群裡童鞋網絡出故障,然後在幫他解決的過程中,對自己的理解也做一個總結。接下來,我們就一起來探討一下關於vmware workstations網絡連接的三種模式。