【從零開始學習Tensorflow】(四)第6章 圖像識別與卷積神經網絡


轉載請註明作者和出處: https://blog.csdn.net/weixin_37392582
代碼平臺https://gitee.com/wuweijun
開發平臺: Win10 + Python3.6 + Anaconda3
筆  者: 無尾


筆者注:【從零開始學習Tensorflow】系列博客爲《Tensorflow + 實戰 Google 深度學習框架》一書的學習筆記。



前言


在第5章中,通過 MNIST 數據集驗證了第 4 章介紹的神經網絡設計與優化的方法。從實驗結果可以看出,神經網絡的結構會對神經網絡的準確率產生巨大的影響。本章將介紹一個非常常用的神經網絡結構——卷積神經網絡(Convolutional Neural Network, CNN)。卷積神經網絡應用很廣,在自然語言處理、醫藥發現、災難氣候發現甚至圍棋人工智能程序中都有應用。本章主要通過 CNN 在圖像識別上的應用來講解卷積神經網絡的基本原理以及如何使用 TensorFlow 實現卷積神經網絡。

首先,第一節中,將介紹圖像識別領域解決的問題以及圖像識別領域中經典的數據集。

第二節中,將介紹卷積神經網絡的主體思想和整體架構。

第三節中,將詳細講解卷積層和池化層的網絡結構,以及 TensorFlow 對這些網絡結構的支持。

第四節中,將通過兩個經典的卷積神經網絡模型來介紹如何設計卷積神經網絡的架構以及如何設置每一層神經網絡的配置。這一節將通過 TensorFlow 實現 LeNet-5 模型,並介紹 TensorFlow-Slim 來實現更加複雜的 Inception-v3 模型中的 Inception 模塊。

最後在第五節中,將介紹如何通過 TensorFlow 實現卷積神經網絡的遷移學習

Let’s Go!


一、圖像識別問題簡介及經典數據集

圖像識別問題希望藉助計算機程序來處理、分析和理解圖片中的內容,使得計算機可以從圖片中識別各種不同模式的目標和對象。近幾年來,圖像識別問題作爲人工智能的一個重要領域取得了很多突破性的進展。

在第5章使用了 MNIST 手寫識別數據集,這是一個相對簡單的數據集,在更加複雜的圖像識別數據集上,卷積神經網絡能夠有更加突出的表現。Cifar 數據集就是一個影響力很大的圖像分類數據集。 Cifar 數據集分爲了 Cifar-10 和 Cifar-100 兩個問題,他們都是圖像詞典項目(Visual Dictionary)中 800 萬張圖片的一個子集。 Cifar數據集中的圖片爲 32×32 的彩色圖片,這些圖片是由 Alex Krizhevsky 教授、Vinod Nair 博士和 Geoffrey Hinton 教授整理的。

Cifar-10 問題收集了 10 個不同種類的 60000 張圖片,類別分別有:飛機,汽車,鳥,貓,鹿,狗,青蛙,馬,船和卡車。Cifar 官網提供了不同格式的 Cifar 數據集下載

'''
The archive contains the files data_batch_1, data_batch_2, ..., data_batch_5, as well as test_batch. 
Each of these files is a Python "pickled" object produced with cPickle. 
Here is a python3 routine which will open such a file and return a dictionary:
'''
def unpickle(file):
    import pickle
    with open(file, 'rb') as fo:
        dict = pickle.load(fo, encoding='bytes')
    return dict

CSDN 無尾君

但是無論是 MNIST 數據集還是 Cifar數據集,相比真實環境下的圖像識別問題,有兩個最大的問題。第一,現實生活中的圖片分辨率要遠高於 32×32,而且圖像的分辨率也不會是固定的。第二,現實生活中的物體類別很多,無論是 10 種還是 100 種都遠遠不夠,而且一張圖片中不會只出現一個種類的物體。爲了更貼近真實環境下的圖像識別問題,由斯坦福大學的李飛飛教授帶頭整理的 ImageNet 很大程度上解決了這兩個問題。

ImageNet 是一個基於 WordNet 的大型圖像數據庫。在 ImageNet 中,將近 1500 萬圖片被關聯到了 WordNet 的大約 20000 個名詞同義詞集上。目前每一個與 ImageNet 相關的 WordNet 同義詞集都代表了現實世界的一個實體,可以被認爲是分類問題中的一個類別。 ImageNet 中的圖片都是從互聯網上爬取下來的,並且通過亞馬孫的人工標註服務將圖片分類到 WordNet的同義詞集上。在 ImageNet 的圖片中,一張圖片中可能出現多個同義詞集所代表的實體。

ImageNet每年都舉辦圖像識別相關的競賽(ImageNet Large Scale Visual Recognition Challenge, ILSVRC)。ImageNet官網 列出了歷屆 ILSVRC 競賽的題目和數據集。本書將着重介紹使用的最多的 ILSVRC2012 圖像分類數據集。

ILSVRC2012 圖像分類數據集的任務和 Cifar 數據集基本一致,也是識別圖像中的主要物體。 ILSVRC2012 圖像分類數據集包含了來自 1000 個類別的 120 萬張圖片,其中每張圖片屬於且只屬於一個類別,因爲圖片是直接從網上爬的,圖片大小從幾千字節到幾百萬字節不等。


二、卷積神經網絡簡介


卷積神經網絡在前一節介紹的所有圖像分類數據集上由非常突出的表現。在前面章節中所介紹的神經網絡每兩層之間的所有節點都是有邊相連的,所有書中稱這種網絡結構爲全連接層網絡結構。爲了將只包含全連接層的神經網絡與卷積神經網絡、循環神經網絡區分開,書中將只包含全連接層的設施南京網絡稱之爲全連接神經網絡。在這一節中將講解卷積神經網絡與全連接神經網絡的差異,並介紹組成一個卷積神經網絡的基本網絡結構。全連接神經網絡與卷積神經網絡對比圖如下:

CSDN 無尾君

卷積神經網絡與全連接神經網絡的整體假體非常相似。同全連接神經網絡一樣,卷積神經網絡也是通過一層一層的節點組織起來的。CNN(後面用縮寫)中的每一個節點都是一個神經元。在全連接神經網絡中,每相鄰兩層之間的節點都有邊相連,於是一般會將每一層全連接層中的節點組織成一列,這樣方便顯示連接結構。而對於CNN,相鄰兩層之間只有部分節點相連,爲了展示每一層神經元的維度,一般會將每一層卷積層的節點組成一個三維矩陣。

除了結構相似,CNN 的輸入輸出以及訓練流程與全神經網絡也基本一致。以圖像分類爲例,CNN 的輸入層就是圖像的原始像素,而輸出層中的每一個節點代表了不同類別的可置信度。這和全連接神經網絡的輸入輸出是一致的。類似的,第4章中介紹的損失函數以及參數的優化過程也都適用於 CNN 。在後面的章節中會看到,在 TensorFlow 中訓練一個 CNN 的流程和訓練一個全連接神經網路沒有任何區別。CNN 和全連接神經網絡的唯一區別就在於神經網絡中相鄰兩層的連接方式。在進一步介紹 CNN 的連接結構之前,本節將先介紹爲什麼全連接神經網絡無法很好地處理圖像數據。

全連接神經網絡處理圖像的最大問題在於全連接層的參數太多。以第一層隱藏層爲例,如果隱藏層節點數爲 500 個,MNIST 的一張圖片大小是 28×28×1,1表示圖像是黑白的,只有一個彩色通道。那麼一個全連接神經網絡的隱藏層將有 28*28*500 (權重)+ 500(偏置) = 392500 個參數。 在 Cifar數據集中,圖片大小是 32×32×3,3表示圖片是通過紅綠藍三個色彩通道(channel)表示的,如果第一層全連接層仍然是 500 個節點, 那麼這一層將有 32×32×3×500+500≈150 萬個參數。參數增多除了導致計算速度減慢,還很容易導致過擬合問題。所以需要一個更合理的神經網絡來有效地減少神經網絡中參數個數。CNN就可以達到這個目的。

CSDN 無尾君

在 CNN 的前幾層中,每一層的節點都被組織成一個三維矩陣。比如處理 Cifar-10 數據集中的圖片時,可以將輸入層組織成一個 32×32×3 的三維矩陣。途中虛線部分展示了 CNN 的一個連接示意圖,從圖中可以看到 CNN 的前幾層中每一個節點只和上一層中部分的節點相連。CNN 的具體連接方式將在第三節中介紹。一個 CNN 主要由以下 5 種結構組成:

1、輸入層。
輸入層時整個神經網絡的輸入,在處理圖像的卷積神經網絡中,它一般代表了一張圖片的像素矩陣。三維矩陣代表一張圖片,三維矩陣的長和寬代表了圖像的大小,而三維矩陣的深度代表了圖像的色彩通道(channel)。比如黑白圖片深度爲 1,而在 RGB 色彩模式下,圖像的深度爲 3。從輸入層開始,卷積神經網絡通過不同的神經網絡結構將上一層的三維矩陣轉化爲下一層的參爲矩陣,直到最後的全連接層。

2、卷積層。
和傳統全連接層不同,卷積層中每一個節點的輸入只是上一層神經網絡的一小塊,這個小塊常用的大小有 3×3 或者 5×5.卷積層試圖將神經網絡中的每一小塊進行更加深入地分析從而得到抽象程度更高的特徵。一般來說,通過卷積層處理過的節點矩陣會變得更“深”,所有在圖 6-7 中可以看到經過卷積層之後的節點矩陣的深度會增加。

3、池化層(Pooling)。


三、辛苦寫的沒有保存上,跳過一大部分,後面再補全


四、經典卷積網絡模型


放上一個 類似 LeNet - 5的模型

發佈了34 篇原創文章 · 獲贊 23 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章