C語言中文網 目錄
TensorFlow
1 TensorFlow是什么
2 TensorFlow安裝和下載
3 第一個TensorFlow程序
4 TensorFlow程序結構
5 TensorFlow常量、變量和占位符
6 TensorFlow矩陣基本操作
7 TensorFlow TensorBoard數據流圖可視化
8 TensorFlow代碼自動升級為1.0版本
9 TensorFlow XLA
10 TensorFlow指定CPU和GPU設備
11 TensorFlow與深度學習
12 TensorFlow常用Python擴展包
13 回歸算法有哪些
14 TensorFlow損失函數
15 TensorFlow優化器
16 TensorFlow csv文件讀取數據
17 TensorFlow實現簡單線性回歸
18 TensorFlow實現多元線性回歸
19 TensorFlow邏輯回歸處理MNIST數據集
20 感知機與神經網絡
21 TensorFlow常用激活函數(6種)
22 TensorFlow實現單層感知機
23 TensorFlow實現反向傳播算法
24 TensorFlow多層感知機實現MINIST分類
25 TensorFlow多層感知機函數逼近
26 TensorFlow超參數
27 TensorFlow Keras
28 CNN卷積神經網絡
29 三維卷積神經網絡預測MNIST數字
30 卷積神經網絡分類圖片
31 遷移學習
32 DeepDream網絡
33 TensorFlow實現文本情感分析
34 VGG網絡濾波器
35 VGGNet、ResNet、Inception和Xception
36 預建深度學習提取特征及實現
37 TensorFlow實現InceptionV3
38 TensorFlow WaveNet聲音合成
39 TensorFlow視頻分類(6種方法)
40 RNN循環神經網絡
41 神經機器翻譯(seq2seq RNN)
42 注意力機制(基于seq2seq RNN)
43 RNN訓練模型并生成文本
44 RNN循環神經網絡實現預測比特幣價格
45 主成分分析法(PCA)
46 k均值聚類算法
47 SOM自組織映射法
48 受限玻爾茲曼機訓練
49 推薦系統的實現(基于RBM)
50 基于DBN實現情緒檢測
51 自編碼器
52 標準自編碼器
53 稀疏自編碼器
54 去燥自編碼器
55 卷積自編碼器
56 堆疊自編碼器
57 強化學習
58 OpenAI Gym安裝和使用
59 全連接神經網絡實現玩Pac-Man游戲
60 Q learning實現Cart-Pole平衡游戲
61 DQN算法(深度Q網絡)
62 David Silver策略梯度算法
63 深度學習在移動端的應用
64 Android移動端部署TensorFlow mobile
65 iPhone移動端部署TensorFlow mobile
66 移動端優化TensorFlow代碼
67 GAN生成式對抗網絡
68 GAN生成式對抗網絡虛構MNIST圖像
69 DCGAN虛構MNIST圖像
70 DCGAN虛構名人面孔和其他數據集
71 VAE變分自編碼器
72 CapsNet膠囊網絡
73 TensorFlow分布式
74 TensorFlow GPU的安裝和使用
75 TensorFlow分布式
76 TensorFlow分布式訓練MNIST分類器
77 TensorFlow Serving運行Docker容器
78 TensorFlow分布式在谷歌云平臺運行
79 TensorFlow分布式在谷歌CloudML運行
80 TensorFlow分布式在Microsoft Azure上運行
81 TensorFlow分布式在Amazon AWS上運行
首頁 > TensorFlow 閱讀:201

VGGNet、ResNet、Inception和Xception圖像分類及對比

圖像分類任務是一個典型的深度學習應用。人們對這個任務的興趣得益于 ImageNet 圖像數據集根據 WordNet 層次結構(目前僅有名詞)組織,其中檢索層次的每個節點包含了成千上萬張圖片。

更確切地說,ImageNet 旨在將圖像分類并標注為近 22000 個獨立的對象類別。在深度學習的背景下,ImageNet 一般是指論文“ImageNet Large Scale Visual Recognition Challenge”中的工作,即 ImageNet 大型視覺識別競賽,簡稱 ILSVRC。

在這種背景下,目標是訓練一個模型,可以將輸入圖像分類為 1000 個獨立的對象類別。本節將使用由超過 120 萬幅訓練圖像、50000 幅驗證圖像和 100000 幅測試圖像預訓練出的模型。

VGG16和VGG19

VGG16 和 VGG19 網絡已經被引用到“Very Deep Convolutional Networks for Large Scale Image Recognition”(由 Karen Simonyan 和 Andrew Zisserman 于2014年編寫)。該網絡使用 3×3 卷積核的卷積層堆疊并交替最大池化層,有兩個 4096 維的全連接層,然后是 softmax 分類器。16 和 19 分別代表網絡中權重層的數量(即列 D 和 E):


圖 1 深層網絡配置示例

在 2015 年,16 層或 19 層網絡就可以認為是深度網絡,但到了 2017 年,深度網絡可達數百層。請注意,VGG 網絡訓練非常緩慢,并且由于深度和末端的全連接層,使得它們需要較大的權重存儲空間。

ResNet

ResNet(殘差網絡)的提出源自論文“Deep Residual Learning for Image Recognition”(由 Kaiming He、XiangyuZhang、ShaoqingRen 和 JianSun 于 2015 年編寫)。這個網絡是非常深的,可以使用一個稱為殘差模塊的標準的網絡組件來組成更復雜的網絡(可稱為網絡中的網絡),使用標準的隨機梯度下降法進行訓練。
與 VGG 相比,ResNet 更深,但是由于使用全局平均池操作而不是全連接密集層,所以模型的尺寸更小。

Inception

Inception 網絡源自文章“Rethinking the Inception Architecture for Computer Vision”(由Christian Szegedy、Vincent Vanhoucke、Sergey Ioffe、Jonathon Shlens和Zbigniew Wojna于2015年編寫)。其主要思想是使用多個尺度的卷積核提取特征,并在同一模塊中同時計算 1×1、3×3 和 5×5 卷積。然后將這些濾波器的輸出沿通道維度堆疊并傳遞到網絡中的下一層,如下圖所示:


 
Inception-v3 見論文“Rethinking the Inception Architecture for Computer Vision”;Inception-v4 見論文“Inception-ResNet and the Impact of Residual Connections on Learning”(由 Christian Szegedy、Sergey Ioffe、Vincent Vanhoucke 和 Alex Alemi 于 2016 年編寫)。

Xception

Xception 網絡是 Inception 網絡的擴展,詳見論文“Xception:Deep Learning with Depthwise Separable Convolutions”(由 Fran?ois Chollet 于 2016 年編寫),網址為。Xception 使用了一種叫作深度可分離卷積運算的新概念,它可以在包含 3.5 億個圖像和 17000 個類的大型圖像分類數據集上勝過 Inception-v3。由于 Xception 架構具有與 Inception-v3 相同的參數數量,因此性能提升不是由于容量的增加,而是由于更高效地使用了模型參數。

圖像分類準備工作

本節使用 Keras 因為這個框架有上述模塊的預處理模塊。Keras 在第一次使用時會自動下載每個網絡的權重,并將這些權重存儲在本地磁盤上。

換句話說,你不需要重新訓練網絡,而是使用互聯網上已有的訓練參數。假設你想在 1000 個預定義類別中分類網絡,這樣做是沒問題的。下一節將介紹如何從這 1000 個類別開始,將其擴展到一個定制的集合,這個過程稱為遷移學習。

具體做法

  1. 導入處理和顯示圖像所需的預建模型和附加模塊:


     
  2. 定義一個用于記憶訓練中圖像尺寸的映射,這些是每個模型的一些常量參數:


     
  3. 定義用于加載和轉換圖像的輔助函數。請注意,預先訓練的網絡已經在張量上進行了訓練,其形狀還包括 batch_size 的附加維度。所以為了圖像兼容性需要補充這個維度:


     
  4. 定義一個輔助函數,用于對圖像進行分類并對預測結果進行循環,顯示前 5 名的預測概率:


     
  5. 測試不同類型的預訓練網絡,你將看到一個帶有各自類別預測概率的預測列表:
    測試欲訓練網絡 預測列標 預測示例圖
    classify_image("image/parrot.jpg","vgg16") 1.macaw:99.92%
    2.jacamar:0.03%
    3.lorikeet:0.02%
    4.bee_eater:0.02%
    5.toucan:0.00%
    classify_image("image/parrot.jpg","vgg19") 1.macaw:99.77%
    2.lorikeet:0.07%
    3.toucan:0.06%
    4.hornbill:0.05%
    5.jacamar:0.01%
    classify_image("image/parrot.jpg","resnet") 1.macaw:97.93%
    2.peacock:0.86%
    3.lorikeet:0.23%
    4.jacamar:0.12%
    5.jay:0.12%
    classify_image("image/parrot_cropped1.jpg","resnet") 1.macaw:99.98%
    2.lorikeet:0.00%
    3.peacock:0.00%
    4.sulphur-crested_cockatoo:0.00%
    5.toucan:0.00%
    classify_image("image/incredible-hulk-180.jpg","resnet") 1.comic_book:99.76%
    2.book_jacket:0.19%
    3.jigsaw_puzzle:0.05%
    4.menu:0.00%
    5.packet:0.00%
    classify_image("image/croppoed_panda.jpg","resnet") 1.giant_panda:99.04%
    2.indri:0.59%
    3.lesser_panda:0.17%
    4.gibbon:0.07%
    5.titi:0.05%
    classify_image("image/space-shuttle1.jpg","resnet") 1.space_shuttle:92.38%
    2.triceratops:7.15%
    3.warplane:0.11%
    4.cowboy_hat:0.10%
    5.sombrero:0.04%
    classify_image("image/space-shuttle2.jpg","resnet") 1.space_shuttle:99.96%
    2.missile:0.03%
    3.projectile:0.00%
    4.steam_locomotive:0.00%
    5.warplane:0.00%
    classify_image("image/space-shuttle3.jpg","resnet") 1.space_shuttle:93.21%
    2.missile:5.53%
    3.projectile:1.26%
    4.mosque:0.00%
    5.beacon:0.00%
    classify_image("image/space-shuttle4.jpg","resnet") 1.space_shuttle:49.61%
    2.castle:8.17%
    3.crane:6.46%
    4.missile:4.62%
    5.aircraft_carrier:4.24%

    注意可能報出一些錯誤,比如:
    測試欲訓練網絡 預測列標 預測示例圖
    classify_image("image/parrot.jpg","inception") 1.stopwatch:100.00%
    2.mink:0.00%
    3.hammer:0.00%
    4.black_grouse:0.00%
    5.web_site:0.00%
    classify_image("image/parrot.jpg","xception") 1.backpack:56.69%
    2.military_uniform:29.79%
    3.bib:8.02%
    4.purse:2.14%
    5.ping-pong_ball:1.52%
  6. 定義用于顯示每個預建和預訓練網絡的內部架構的函數:

解讀分析

我們已經使用了 Keras 應用,帶有預訓練權重的預訓練 Keras 學習模型是可以獲取的,這些模型可用于預測、特征提取以及參數微調。

在本例中,使用的是預測模型。將在下一個例子中看到如何使用該模型進行參數微調,以及如何在數據集上構建自定義的分類器,這些分類器在最初訓練模型時是不可用的。

需要注意的是,Inception-v4 在 2017 年 7 月之前不能在 Keras 中直接使用,但可以在線上單獨下載(https://github.com/kentsommer/keras-inceptionV4)。安裝完成后,模塊將在第一次使用時自動下載其權重參數。

AlexNet 是最早的堆疊深度網絡之一,它只包含八層,前五層是卷積層,后面是全連接層。該網絡于 2012 年提出,當年憑借其優異的性能獲得冠軍(其誤差約為 16%,而亞軍誤差為 26%)。

最近對深度神經網絡的研究主要集中在提高精度上。具有相同精度的前提下,輕量化 DNN 體系結構至少有以下三個優點:
  1. 輕量化CNN在分布式訓練期間需要更少的服務器通信。
  2. 輕量化CNN需要較少的帶寬將新模型從云端導出到模型所在的位置。
  3. 輕量化CNN更易于部署在FPGA和其他有限內存的硬件上。

為了提供以上優點,論文“SqueezeNet:AlexNet-level accuracy with 50x fewer parameters and<0.5MB model size”(Forrest N.Iandola,Song Han,Matthew W.Moskewicz,Khalid Ashraf,William J.Dally,Kurt Keutzer,2016)提出的 SqueezeNet 在 ImageNet 上實現了 AlexNet 級別的準確性,參數少了 50 倍。

另外,由于使用模型壓縮技術,可以將 SqueezeNet 壓縮到小于 0.5 MB(比 AlexNet 小 510 倍)。Keras 實現的 SqueezeNet 作為一個單獨的模塊,已在網上開源(https://github.com/DT42/squeezenet_demo)。

精美而實用的網站,提供C語言、C++、STL、Linux、Shell、Java、Go語言等教程,以及socket、GCC、vi、Swing、設計模式、JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo