天天看點

resnet50代碼_使用Python代碼進行圖像分類的頂級4個預訓練模型

resnet50代碼_使用Python代碼進行圖像分類的頂級4個預訓練模型

介紹

人腦可以輕松識别和區分圖像中的對象。例如,給定貓和狗的圖像,在十億分之一秒之内,我們就将兩者差別開來,而我們的大腦則意識到了這種差異。如果機器模仿這種行為,那麼它與我們所能獲得的人工智能非常接近。随後,計算機視覺領域旨在模仿人類視覺系統,并且有許多裡程碑打破了這方面的障礙。

此外,如今的機器可以輕松地區分不同的圖像,檢測物體和面部,甚至生成不存在的人的圖像!令人着迷,不是嗎?當我從Computer Vision開始時,我的第一個經曆就是圖像分類的任務。機器區分物體的這種能力導緻了更多的研究途徑,例如區分人。

resnet50代碼_使用Python代碼進行圖像分類的頂級4個預訓練模型

随着轉移學習的到來,計算機視覺的快速發展以及擴充–圖像分類得到了進一步的加速。簡而言之,轉移學習使我們能夠使用在龐大的資料集上受過訓練的預先存在的模型來完成自己的任務。是以減少了訓練新的深度學習模型的成本,并且由于對資料集進行了審查,是以我們可以保證品質。

在本文中,我将介紹4種最先進的圖像分類預訓練模型,這些模型是最新的(SOTA),并且在行業中也廣泛使用。可以對各個模型進行更詳細的解釋,但是我将本文限制為僅概述其體系結構并将其實作在資料集上。

目錄-

  • 設定系統
  • 準備資料集
  • 預先訓練的圖像分類模型
    • VGG-16
    • ResNet50
    • 盜版v3
    • 高效網
設定系統

由于我們是從貓和狗開始的,是以讓我們來處理貓和狗圖像的資料集。Kaggle上的原始訓練資料集包含25000張貓和狗的圖像,而測試資料集包含10000張未标記的圖像。由于我們的目的隻是了解這些模型,是以我采用了一個更小的資料集。您也可以直接在Google Colab上運作此代碼以及其餘代碼-是以,讓我們開始吧!

讓我們也導入基本庫。此外,我将根據模型介紹未來的進口産品:

準備資料集

我們将首先準備資料集并分離出圖像:

  1. 我們首先将檔案夾内容劃分為train和驗證目錄。
  2. 然後,在每個目錄中,為僅包含貓圖像的貓建立一個單獨的目錄,為僅包含貓圖像的狗建立一個單獨的導演。

以下代碼将使我們檢查圖像是否已正确加載:

現在我們已經準備好資料集,讓我們在模型建構階段進行。我們将在此資料集上使用4個不同的預訓練模型。

預先訓練的圖像分類模型

在本節中,我們将介紹4種經過預先訓練的圖像分類模型,如下所示:

1.用于大規模圖像識别的超深度卷積網絡(VGG-16)

VGG-16是用于圖像分類的最受歡迎的預訓練模型之一。在著名的ILSVRC 2014大會上被引入,它一直是至今仍在擊敗的典範。VGG-16由牛津大學視覺圖形小組開發,超越了當時的AlexNet标準,并很快被研究人員和業界所采用,用于其圖像分類任務。

這是VGG-16的體系結構:

resnet50代碼_使用Python代碼進行圖像分類的頂級4個預訓練模型

這是VGG-16模型的更直覺的布局。

resnet50代碼_使用Python代碼進行圖像分類的頂級4個預訓練模型

以下是模型的各層:

  • 卷積層= 13
  • 合并層數= 5
  • 緻密層= 3

讓我們詳細探讨各層:

  1. 輸入 :尺寸為(224,224,3)的圖像。
  2. 卷積層Conv1:
  • Conv1-1:64個過濾器
  • Conv1-2:64個過濾器和最大池
  • 圖像尺寸:(224,224)
  1. 卷積層Conv2: 現在,我們将過濾器增加到128
  • 輸入圖像尺寸:(112,112)
  • Conv2-1:128個過濾器
  • Conv2-2:128個過濾器和最大池化
  1. 卷積層Conv3: 再次将濾鏡加倍至256,然後添加另一個卷積層
  • 輸入圖像尺寸:(56,56)
  • Conv3-1:256個過濾器
  • Conv3-2:256個過濾器
  • Conv3-3:256個過濾器和最大池化
  1. 卷積層Conv4: Conv3 類似,但現在具有512個濾鏡
  • 輸入圖像尺寸:(28,28)
  • Conv4-1:512個過濾器
  • Conv4-2:512個過濾器
  • Conv4-3:512個過濾器和最大池化
  1. 卷積層Conv5: 與Conv4相同
  • 輸入圖像尺寸:(14,14)
  • Conv5-1:512個過濾器
  • Conv5-2:512個過濾器
  • Conv5-3:512個過濾器和最大池
  • 這裡的輸出尺寸為(7,7)。至此,我們将這一層的輸出拉平以生成特征向量
  1. 完全連接配接/密集FC1 :4096個節點,生成大小為(1,4096)的特征向量
  2. 完全連接配接密集FC2 :4096個節點生成大小為(1,4096)的特征向量
  3. 完全連接配接/密集FC3 :4096個節點,為1000個類别生成1000個通道。然後将其傳遞給Softmax激活功能
  4. 輸出層

如您所見,該模型本質上是順序的,并使用了很多過濾器。在每個階段,都使用3 * 3的小型過濾器來減少參數數量,所有隐藏層都使用ReLU激活功能。即使到那時,參數的數量仍然是

1,380億個

,這使得它比其他模型更慢,而且模型要大得多。

此外,VGG16模型也有一些變化,基本上是對它的改進,例如VGG19(19層)。您可以找到詳細的說明

現在讓我們探索如何在我們的資料集上訓練VGG-16模型-

第1步:圖像增強

由于我們之前占用的圖像資料集要小得多,是以可以通過增加此資料并增加資料集大小來彌補它。如果您正在使用原始的較大資料集,則可以跳過此步驟,直接繼續構模組化型。

步驟2:訓練和驗證集

步驟3:載入基本模型

我們将僅使用基本模型,而僅對最後一層進行更改。這是因為這隻是二進制分類問題,而這些模型可處理多達1000個類。

由于我們不必訓練所有層,是以我們使它們不可訓練:

步驟4:編譯并拟合

然後,我們将建構最後一個完全連接配接的層。我剛剛使用了基本設定,但可以随意嘗試不同的dropout值,不同的Optimisers和激活功能。

現在,我們将根據之前建立的訓練和驗證集建構最終模型。請注意,請使用原始目錄本身而不是我在下面使用的擴充資料集。我僅使用了10個紀元,但您也可以增加它們以獲得更好的結果:

太棒了!如您所見,我們僅用10個時間段就可以實作93%的驗證準确度,并且無需對模型進行任何重大更改。在這裡,我們認識到了轉移學習的強大功能以及用于圖像分類的預訓練模型有多有用。需要注意的是–與其他模型相比,VGG16需要花費很長時間進行訓練,這在我們處理龐大的資料集時可能是不利的。

話雖如此,我真的很喜歡這個模型多麼簡單和直覺。在ImageNet語料庫上進行訓練的VGG-16的另一個顯著成就是,它在ImageNet ILSVRC-2014中獲得了第一名,進而鞏固了其在用于圖像分類的頂級預訓練模型清單中的地位。

2.開始

在研究本文時-一件事很清楚。就真正流行的圖像分類預訓練模型的發展而言,2014年是标志性的一年。盡管上述VGG-16在當年的ILSVRC中獲得了第二名,但第一名卻是由Google憑借其模型GoogLeNet或Inception(後來被稱為)而獲得的。

原始論文提出了Inceptionv1模型。它隻有700萬個參數,比當時的VGG和AlexNet模型要小得多。加上較低的錯誤率,您可以了解為什麼它是突破性模型。不僅如此,本文的主要創新也是另一個突破-Inception Module。

可以簡單地看出,Inception子產品僅對輸入執行具有不同過濾器大小的卷積,執行最大池化,并為下一個Inception子產品合并結果。1 * 1卷積運算的引入極大地減少了參數。

resnet50代碼_使用Python代碼進行圖像分類的頂級4個預訓練模型