本章包括:
1、了解卷積神經網絡(convnets)
2、使用數據增強來減輕過度擬合
3、使用預訓練的convnet進行特征提取
4、微調預訓練的信號
5、可視化回饋學習的內容以及他們如何做出分類決策
一、引言
一個簡單的convnet示例。
??第二章中的密接網絡的測試精度為97.8%,而convnet的測試精度為99.3%:我們將錯誤率降低了68%(相對)。為什么這個簡單的convnet比一個緊密連接的模型工作得那么好呢?為了回答這個問題,讓我們深入研究conv2d和maxpooling2d層的作用。
1、卷積操作
??密集連接層和卷積層的根本區別在于:密集層在其輸入特征空間中學習全局模式(例如,對于mnist數字,涉及所有像素的模式),而卷積層學習局部模式(參見圖5.1):對于圖像,在輸入。在前面的示例中,這些窗口都是3×3。
??這個關鍵特性為convnets提供了兩個有趣的屬性:
- 他們學習的模式是翻譯不變的—學習了這種模式之后,convnets可以在別的任何地方識別出來;這使得convnets在處理圖像時的數據效率更高(因為視覺世界基本上是不變的)。
-
他們可以學習模式的空間層次結構(見圖5.2)。 第一卷積層將學習諸如邊緣的小局部圖案,第二卷積層將學習由第一層的特征構成的較大圖案,等等。 這使得convnets能夠有效地學習越來越復雜和抽象的視覺概念(因為視覺世界從根本上講是空間分層的)。
??卷積作用于稱為特征映射的三維張量上,它有兩個空間軸(高度和寬度)和一個深度軸(也稱為通道軸)。對于RGB圖像,深度軸的尺寸為3,因為圖像有三個顏色通道:紅色、綠色和藍色。對于黑白圖片,像mnist數字一樣,深度為1(灰度)。
??卷積操作從其輸入特征映射中提取補丁,并對所有這些補丁應用相同的轉換,生成輸出特征映射。這個輸出特征映射仍然是一個三維張量:它有一個寬度和一個高度。它的深度可以是任意的,因為輸出深度是圖層的一個參數,并且該深度軸上的不同通道不再代表特定的顏色,就像在RGB輸入中一樣;相反,它們代表過濾器。
??過濾器對輸入數據的特定方面進行編碼:例如,在高層,一個過濾器可以對“輸入中存在一個面”的概念進行編碼。在mnist示例中,第一個卷積層獲取大小為(28、28、1)的特征映射并輸出大小為(26、26、32)的特征映射:它在其輸入上計算32個過濾器。這32個輸出通道中的每個通道都包含一個26×26的網格值,這是輸入端濾波器的響應圖,指示該濾波器模式在輸入端不同位置的響應(見圖5.3)。這就是術語“特征映射”的含義:深度軸中的每個維度都是特征(或過濾器),而二維張量輸出[:,:,n]是該過濾器對輸入響應的二維空間映射。
卷積由兩個關鍵參數定義: - 從輸入中提取的補丁大小—通常為3×3或5×5
-
輸出特征映射的深度—由卷積計算的濾波器數量。該示例的開始深度為32,結束深度為64。
??在keras conv2d層中,這些參數是傳遞給層的第一個參數:Conv2D(output_depth, (window_height, window_width)) 卷積的工作原理是將這些尺寸為3×3或5×5的窗口滑動到三維輸入特征映射上,在每個可能的位置停止,并提取周圍特征的三維面片(shape (window_height, window_width, input_depth)) 然后,所有這些向量在空間上重新組合成三維形狀輸出圖(height,width, output_depth) 輸出特征映射中的每個空間位置對應于輸入特征映射中的相同位置(例如,輸出的右下角包含有關輸入右下角的信息)。例如,使用3×3窗口時,矢量輸出[i, j, :]來自3D補丁輸入[i-1:i+1, j-1:j+1, :]。整個過程如圖5.4所示。
注意,輸出寬度和高度可能與輸入寬度和高度可能因兩個原因而不同: - Border effects:可通過填充輸入特征映射來抵消。
-
The use of strides
填充:如果要獲得與輸入空間尺寸相同的輸出特征映射,可以使用填充。填充包括在輸入功能圖的每一側添加適當數量的行和列,以便在每個輸入圖塊周圍放置中心卷積窗口。
??在conv2d層中,padding可通過padding參數進行配置,padding參數采用兩個值:“valid”,表示沒有padding(只使用有效的窗口位置);“same”(相同),表示“pad的方式使輸出具有與輸入相同的寬度和高度。”padding參數默認為“valid”。
??影響輸出大小的另一個因素是步幅的概念。迄今為止對卷積的描述假定卷積窗口的中心瓷磚都是連續的。但兩個連續窗口之間的距離是卷積,稱為步幅,默認為1。跨步卷積:跨步大于1的卷積。在圖5.7中,可以看到通過3×3卷積在5×5輸入(不帶填充)上使用跨距2提取的補丁。
??使用“跨距2”意味著特征地圖的寬度和高度將被一個系數2(除了由邊界效果引起的任何變化)所減小。跨步卷積在實踐中很少使用,盡管對于某些類型的模型來說,跨步卷積可以派上用場;為了縮小功能圖的樣本,我們傾向于使用max pooling操作,而不是跨步,在第一個convnet示例中在action中看到了這一操作。
2、最大池操作
??max pooling的作用:大幅縮小feature maps的樣本,很像跨步卷積。最大池包括從輸入功能圖中提取窗口并輸出每個通道的最大值。它在概念上類似于卷積,除了通過學習的線性變換(卷積核)轉換局部補丁之外,它們通過硬編碼的max張量操作進行轉換。與卷積的一個大區別是,最大池通常使用2×2窗口和跨步2來完成,以便將特征映射的采樣率降低2倍。卷積通常是用3×3個窗口完成的,沒有跨距(跨距1)。使用降采樣的原因是減少要處理的特征映射系數的數量,并通過使連續的卷積層查看越來越大的窗口(根據它們覆蓋的原始輸入的比例)來誘導空間濾波器層次。
??注意,最大池并不是實現這種降采樣的唯一方法。還可以在先前的卷積層中使用跨步。可以使用平均池而不是最大池,其中每個本地輸入補丁都是通過在補丁上取每個通道的平均值而不是最大值來轉換的,但是最大池比這些可選的解決方案工作得更好。
??最合理的子采樣策略是首先生成密集的特征圖(通過無重疊卷積),然后查看小補丁上特征的最大激活,而不是查看輸入窗口較稀疏(通過跨步卷積)或平均輸入補丁,這可能會導致您錯過或稀釋特征-P重置信息。
??此時,應該了解convnets特性圖、卷積和max pooling的基本知識,并且知道如何構建一個小的convnet來解決諸如mnist digits分類之類的問題。
二、在小數據集上從頭開始訓練convnet
??只有很少的數據來訓練一個圖像分類模型是一種常見的情況,在這個例子里,我們將把圖像分類為“狗”或“貓”,在一個包含4000張貓和狗(2000只貓,2000只狗)圖片的數據集中。我們將使用2000張圖片進行訓練,1000張用于驗證,最后1000張用于測試。
??在本節中,我們將回顧一個解決這個問題的基本策略:從頭開始培訓一個新模型,我們擁有的數據量很少。我們將從2000個訓練樣本上訓練一個小的convnet開始,不進行任何正規化,為可以達到的目標設定一個基線。這將使我們的分類精度達到71%。在那一點上,我們的主要問題將是過度擬合。然后我們將介紹數據增強,這是一種減輕計算機視覺中過擬合的強大技術。通過利用數據擴充,我們將改進我們的網絡,使其精度達到82%。
??在下一節中,我們將回顧將深度學習應用于小數據集的兩個更重要的技術:使用預先訓練的網絡進行特征提取(這將使我們的精度達到90%到93%),以及對預先訓練的網絡進行微調(這將使我們的最終精度達到95%)。總之,這三種策略——從頭開始訓練一個小模型,使用預先訓練的模型進行特征提取,以及微調預先訓練的模型——將構成未來解決使用小數據集進行計算機視覺的問題的工具箱。
1、 深度學習對小數據問題的相關性
??有時我們會覺得,只有在有大量數據可用時,深度學習才有效。這在一定程度上是一個有效的觀點:深度學習的一個基本特征是,它能夠自己在訓練數據中發現有趣的特性,而不需要任何手動特性工程,并且只有在有大量訓練示例的情況下才能實現。這對于輸入樣本是高維的問題尤其適用,比如圖像。
??然而,相對于您試圖訓練的網絡的大小和深度而言構成“大量”樣本的因素是相對的。用幾十個樣本訓練一個convnet來解決一個復雜的問題是不可能的,但是如果模型很小并且很好地規范化,并且任務很簡單,那么幾百個樣本就可能足夠了。由于convnet學習了局部的、翻譯不變的特征,因此它們在感知問題上具有很高的數據效率。從零開始在一個非常小的圖像數據集上訓練convnet仍然會產生合理的結果,盡管相對缺乏數據,但不需要任何定制的特性工程。
??更重要的是,深度學習模型本質上是高度可重用的:例如,可以采用在大型數據集上訓練的圖像分類或語音到文本模型,在顯著不同的問題上重用它,只需進行微小的更改。具體來說,在計算機視覺的情況下,許多預先訓練的模型(通常在ImageNet數據集上訓練)現在可以公開下載,并且可以用于從非常少的數據中引導強大的視覺模型。這就是我們將在下一節中要做的。現在,從掌握數據開始。
2、 下載數據
??https://www.kaggle.com/c/dogs-vs-cats/data
??下載并解壓縮后,我們將創建一個包含三個子集的新數據集:訓練集每個類有1000個樣本,一個驗證集每個類有500個樣本,最后一個測試集每個類有500個樣本。原始數據集包含25000張狗和貓的圖像(每類12500張)。每個類的樣本數是相同的:這是一個平衡的二分分類問題,這意味著分類的準確性將是成功的適當度量。
3、 構建網絡
??我們的convnet將是一個交替的conv2d(帶有relu激活)和maxpooling2d層的堆棧。對于編譯步驟,我們將像往常一樣使用RMSprop優化器,loss的選擇:binary crossentropy
4、 數據預處理
??在將數據輸入我們的網絡之前,應該將數據格式化為適當的預處理浮點張量。目前,我們的數據以jpeg文件的形式存儲在驅動器上,因此將其導入網絡的步驟大致如下:
- 閱讀圖片文件。
- 將jpeg內容解碼為像素的RBG網格。
- 把它們轉換成浮點張量。
- 將像素值(介于0和255之間)重新調整為[0,1]間隔(神經網絡擅長處理較小的輸入值)。
??keras有一個帶有圖像處理助手工具的模塊,位于keras.preprocessing.image。特別的是,它包含了ImageDataGenerator類,它允許快速設置python生成器,該生成器可以自動將磁盤上的圖像文件轉換成批預處理張量。這是我們將在這里使用的。
??然后使用fit_generator的方法實現生成器將模型與數據相擬合。
??在訓練后始終保存我們的模型。
??用訓練和驗證數據來繪制模型在訓練期間的loss 和accuracy。
??由于訓練樣本相對較少,出現了過度擬合的現象,采用數據增強的方法來緩解過度擬合。
5、 使用數據增強
??數據增強采用從現有訓練樣本生成更多訓練數據的方法,通過一些隨機轉換“增強”樣本,生成可信的圖像。我們的目標是,在培訓時,我們的模型不會看到完全相同的圖片兩次。這有助于模型暴露于數據的更多方面,并更好地進行歸納。在Keras中,這可以通過配置要對ImageDataGenerator實例讀取的圖像執行的多個隨機轉換來完成。一個例子:
- rotation_range是一個以度(0-180)為單位的值,在這個范圍內可以隨機旋轉圖片。
- width_shift和height_shift 是一個范圍(作為總寬度或總高度的一部分),在這個范圍內可以隨機地垂直或水平地翻譯圖片。
- shear_range 是指隨機應用剪切變換。
- zoom_range 用于在圖片內隨機縮放。
- horizontal_flip是指將一半圖像隨機水平翻轉,這與沒有水平不對稱假設(如真實圖像)相關。
- fill_mode 是用于填充新創建的像素的策略,這些像素可以在旋轉或寬度/高度移動后出現。
三、使用預先訓練的convnet
??對小圖像數據集進行深入學習的一種常見且高效的方法是利用預先培訓過的網絡。預先訓練的網絡只是一個保存的網絡,以前是在一個大型數據集上訓練的,通常是在一個大型圖像分類任務上。
??在我們的例子中,我們將考慮在ImageNet數據集上訓練的大型convnet(140萬個標記圖像和1000個不同的類)。Imagenet包含許多動物類別,包括不同種類的貓和狗,因此我們可以期望在貓和狗的分類問題上表現出色。
??我們將使用由Karen Simonyan和Andrew Zisserman于2014年開發的VGG16架構,這是一種簡單且廣泛使用的用于Imagenet的convnet架構。
??利用預先培訓的網絡有兩種方法:特征提取和微調。我們將涵蓋這兩個方面。讓我們從特征提取開始。
1、 特征提取
??特征提取包括使用以前網絡學習的表示從新樣本中提取有趣的特征。然后,這些特性通過一個新的分類器運行,這個分類器是從零開始訓練的。
??正如我們前面做的,用于圖像分類的convnets由兩部分組成:它們從一系列池和卷積層開始,最后是一個緊密連接的分類器。第一部分是模型的“卷積基”。在convnets里,“特征提取”將簡單地包括獲取先前訓練的網絡的卷積基,通過它運行新的數據,并在輸出的頂部訓練一個新的分類器。
??為什么只重用卷積基?我們也可以重用密接分類器嗎?一般來說,最好不要這樣做。另外,如果我們新數據集與訓練原始模型的數據集有很大不同,那么最好只使用模型的前幾層進行特征提取,而不是使用整個卷積基。
??在我們的例子中,由于imagenet類集確實包含多個dog和cat類,因此重用原始模型的緊密連接層中包含的信息可能會有所幫助。然而,我們將選擇不這樣做,以涵蓋更一般的情況,即新問題的類集不與原始模型的類集重疊。我們通過使用在ImageNet上訓練的VGG16網絡的卷積基,從貓和狗的圖像中提取有趣的特征,然后在這些特征的基礎上訓練貓和狗的分類器,來實踐這一點。VGG16型號,以及其他型號,都預裝了Keras。可以從keras.applications模塊導入它。以下是作為keras.applications的一部分提供的圖像分類模型列表(所有對ImageNet數據集進行過預培訓)。
- Xception
- InceptionV3
- ResNet50
- VGG16
- VGG19
- MobileNet
??我們通過使用在ImageNet上訓練的VGG16網絡的卷積基,從貓和狗的圖像中提取特征,然后在這些特征的基礎上訓練貓和狗的分類器,來實踐這一點。步驟:
??1) 實例化vg16模型
??2) 特征提取的兩種方法:
??方法一:在數據集上運行卷積基,將其輸出記錄到磁盤上的一個numpy數組中,然后使用這個日期作為一個獨立的、緊密連接的分類器的輸入,類似于本書第一章中所看到的。這個解決方案運行起來非常快速和便宜,因為它只需要對每個輸入圖像運行一次卷積基,而卷積基是迄今為止管道中最昂貴的部分。然而這種技術根本不允許我們利用數據擴充。
??方法二:擴展我們的模型(conv-),在頂部添加密集層,并在輸入數據上端到端地運行整個模型。這允許我們使用數據增強,因為每次模型看到每個輸入圖像都要經過卷積基。然而這種技術要比第一種技術代價更大。只能在GPU上運行。
??這里因為模型的行為與層類似,所以可以向順序模型添加模型(如conv_庫),就像添加層一樣。在我們編譯和訓練模型之前,要做的一件非常重要的事情是凍結卷積基。”“凍結”一層或一組層意味著在訓練過程中防止權重得到更新。如果我們不這樣做,那么之前由卷積基學習的表示將在訓練期間被修改。由于頂部的密集層是隨機初始化的,因此會通過網絡傳播非常大的權重更新,從而有效地破壞先前學習的表示。在keras中,通過將網絡的可訓練屬性設置為false來凍結網絡:conv_base.trainable = False。使用此設置,將只訓練我們添加的兩個密集層的權重。總共有四個權重張量:每層兩個(主權重矩陣和偏移向量)。注意,為了使這些更改生效,我們必須首先編譯模型。如果在編譯之后修改了權重可訓練性,那么應該重新編譯模型,否則這些更改將被忽略。現在,我們可以開始培訓我們的模型,使用前面示例中使用的相同的數據擴充配置。
2、 微調
??另一種廣泛使用的模型重用技術(與特征提取互補)是微調。微調包括解凍用于特征提取的凍結模型庫的一些頂層,并聯合訓練模型的新添加部分(在我們的例子中,是完全連接的分類器)和這些頂層。這被稱為“微調”,因為它稍微調整了被重用模型的更抽象的表示,以便使它們與手頭的問題更相關。
??我們之前已經說過,為了能夠在頂部訓練一個隨機初始化的分類器,有必要凍結VGG16的卷積基。出于同樣的原因,只有在對頂部分類器進行了訓練之后,才能對卷積基的頂層進行微調。如果分類沒有經過訓練,那么在訓練過程中通過網絡傳播的錯誤信號將太大,并且先前由被微調的層所學習的表示將被破壞。因此,對網絡進行微調的步驟如下:
??1)將我們自定義網絡添加到已訓練的基礎網絡之上。
??2)凍結基礎網絡。
??3)訓練我們添加的部件。
??4)解凍基礎網絡中的某些層。
??5)共同訓練這些層和添加的零件。
??在進行特征提取時,我們已經完成了前3個步驟。讓我們繼續第四步:我們將解凍conv_基地,然后凍結里面的各個層。
??卷積基中的早期層編碼更通用、可重用的特性,而更高層編碼更專業的特性。對更專業的特性進行微調更有用,因為這些特性是需要針對新問題重新調整用途的特性。在微調較低層時,會有快速降低的回報。
??我們訓練的參數越多,就越有過度擬合的風險。卷積基有1500萬個參數,因此嘗試在我們的小數據集上訓練它是有風險的。
??因此,在我們的情況下,只對卷積基中的前2到3層進行微調是一個很好的策略。我們將對最后3個卷積層進行微調,這意味著在Block4_池之前的所有層都應凍結,并且可以訓練Block5_Conv1、Block5_Conv2和Block5_Conv3層。
微調過程如下:
??1)讓我們來設置它,從上一個例子中我們停止的地方開始
??2)微調我們的網絡。我們將使用rmsprop優化器,使用非常低的學習率來實現這一點。使用低學習率的原因是,我們希望將所做的修改的大小限制為我們正在微調的3個層的表示。太大的更新可能會損害這些表示。
??3)根據測試數據最終評估此模型
??這里我們得到了97%的測試精度。在最初圍繞這個數據集的競爭中,這將是最重要的結果之一。然而,利用現代的深度學習技術,我們僅使用了一小部分可用的培訓數據(約10%)就取得了這一結果。與2000個樣本相比,能夠訓練20000個樣本有很大的區別!
??使曲線更易讀的方法,我們可以用這些量的指數移動平均值來替換每一個損失和精度,從而使它們更平滑。下面是一個簡單的實用程序函數:
3、 總結
- convnets是計算機視覺任務的最佳機器學習模型。甚至可以在一個非常小的數據集上從頭開始訓練一個數據集,結果也不錯。
- 在小數據集上,過度擬合將是主要問題。在處理圖像數據時,數據增強是一種有效的克服過度擬合的方法。
- 通過特征提取,很容易在新數據集上重用現有的convnet。這對于處理小圖像數據集是一種非常有價值的技術。
- 作為對特征提取的補充,我們可以使用微調,它可以適應一個新的問題,一些現有模型以前學習的表示。這會進一步提高性能。
- 現在,我們有了一套處理圖像分類問題的可靠工具,特別是處理小數據集的工具。
四、可視化convnets學習的內容
??人們常說,深度學習模型是“黑匣子”,學習表示很難以人類可讀的形式提取和呈現。雖然對于某些類型的深度學習模型,這是部分正確的,但對于convnets,這絕對不是正確的。convnets學習的表示非常容易可視化,這在很大程度上是因為它們是可視化概念的表示。我們將涵蓋以下三方面:
??1)可視化中間convnet輸出(“中間激活”)。這有助于理解連續的convnet層如何轉換其輸入,并首先了解各個convnet過濾器的含義。
??2)可視化convnets篩選器。這有助于準確理解convnet中每個過濾器所能接受的視覺模式或概念。
??3)在圖像中可視化類激活的熱圖。這有助于理解標識為屬于給定類的圖像的哪個部分,從而允許在圖像中定位對象。
??對于第一種方法——激活可視化——我們將使用兩節前從零開始訓練的小convnet來解決貓和狗的分類問題。對于接下來的兩種方法,我們將使用上一節中介紹的vg16模型。
1、Visualizing intermediate activations
??可視化中間激活包括顯示由網絡中各種卷積和池層輸出的特征圖,給定一個特定的輸入(一個層的輸出通常稱為其“激活”,即激活函數的輸出)。這就為輸入如何分解為網絡學習的不同過濾器提供了一個視圖。我們要可視化的這些功能圖有三個維度:寬度、高度和深度(通道)。每個通道編碼相對獨立的特征,因此可視化這些特征圖的正確方法是將每個通道的內容作為二維圖像單獨標繪。
??這里需要注意的幾個重要事項:
- 第一層是各種邊緣檢測器的集合。在那個階段,激活仍然保留了最初圖片中的幾乎所有信息。
- 隨著我們向上走,激活變得越來越抽象,視覺解釋能力也越來越差。他們開始編碼更高級的概念,如“貓耳”或“貓眼”。更高級別的演示文稿包含的關于圖像視覺內容的信息越來越少,與圖像類別相關的信息也越來越多。
- 激活的稀疏性隨著層的深度而增加:在第一層中,所有的過濾器都由輸入圖像激活,但在下面的層中,越來越多的過濾器是空白的。這意味著在輸入圖像中找不到由過濾器編碼的模式。
??深層神經網絡所學習的表示的一個非常重要的普遍特征:一個層所提取的特征隨著層的深度越來越抽象。更高層的激活會帶來越來越少的關于所看到的特定輸入的信息,以及越來越多的關于目標的信息(在我們的例子中,是圖像的類別:貓或狗)。深度神經網絡有效地充當信息蒸餾管道,原始數據進入(在我們的例子中,是RBG圖片),并反復轉換,以便過濾出不相關的信息(例如圖像的特定視覺外觀),而有用的信息被放大和細化(例如圖像的類別)。
??這類似于人類和動物感知世界的方式:觀察一個場景幾秒鐘后,人類可以記住其中存在的抽象對象(如自行車、樹),但無法記住這些對象的具體外觀。事實上,如果你現在試圖從腦海中畫出一輛普通的自行車,很有可能你根本就不能把它畫對,即使你一生中見過成千上萬輛自行車。你的大腦已經學會了完全抽象它的視覺輸入,把它轉換成高層次的視覺概念,同時完全過濾掉不相關的視覺細節,這使得我們很難記住周圍事物的實際外觀。
2、Visualizing convnet filters
??檢查convnets學習的過濾器的另一個簡單方法是顯示每個過濾器要響應的可視模式。這可以通過輸入空間中的梯度上升來實現:將梯度下降應用于convnet輸入圖像的值,以便從空白輸入圖像開始最大化特定過濾器的響應。所產生的輸入圖像將是所選濾波器最大響應的圖像。這個過程很簡單:我們將建立一個損失函數,使給定卷積層中給定濾波器的值最大化,然后我們將使用隨機梯度下降來調整輸入圖像的值,從而使這個激活值最大化。例如,在VGG16網絡的“block3_conv1”層中激活過濾器0時會丟失,在ImageNet上進行了預訓練。
??這些過濾器可視化告訴我們很多關于convnet層如何看待世界的信息:convnet中的每一層都只是學習一組過濾器,這樣它們的輸入就可以表示為過濾器的組合。這類似于傅立葉變換如何將信號分解成一組余弦函數。隨著我們在模型中的提升,這些convnet過濾器組中的過濾器變得越來越復雜和精細:
??1)模型中第一層的過濾器(block1_conv1)編碼簡單的方向性邊和顏色(在某些情況下為彩色邊)。
??2)Block2_Conv1的過濾器對由邊和顏色組合而成的簡單紋理進行編碼。
??3)更高層的過濾器開始類似于自然圖像中的紋理:羽毛、眼睛、樹葉等。
3、Visualizing heatmaps of class activation
??我們將介紹另一種可視化技術,這種技術有助于理解給定圖像的哪些部分引導其進行最終的分類決策。這有助于“調試”回轉網的決策過程,特別是在分類錯誤的情況下。它還允許我們在圖像中查找特定對象。
??這種一般類別的技術稱為“類激活圖”(CAM)可視化,并且包括在輸入圖像上產生“類激活”的熱圖。 “類激活”熱圖是與特定輸出類相關聯的分數的2D網格,針對任何輸入圖像中的每個位置計算,指示每個位置相對于所考慮的類的重要程度。例如,如果將圖像輸入我們的“貓與狗”之一,則類激活圖可視化允許我們為類“貓”生成熱圖,指示圖像中貓的不同部分是如何的,同樣如此對于“狗”類,表示圖像的狗狀不同部分。
??我們將使用的具體實現是Grad-CAM中描述的實現:你為什么這么說? 深度網絡中基于梯度的本地化的可視化解釋。 它非常簡單:它包括在給定輸入圖像的情況下獲取卷積層的輸出特征圖,并通過類相對于通道的梯度對該特征圖中的每個通道進行加權。 直覺上,理解這一技巧的一種方法是,我們通過“每個通道對于類別的重要程度”來加權“輸入圖像激活不同通道的強度”的空間圖,從而輸入圖像激活類的強烈程度”的空間圖。
??此可視化技術回答了兩個重要問題:
??1)為什么網絡認為這個圖像包含非洲象?
??2)非洲大象在哪里?
??特別值得注意的是,大象幼崽的耳朵被強烈激活:這可能是網絡如何區分非洲和印度大象的區別。
本章總結
- convnets是解決視覺分類問題的最佳工具。
- convnets通過學習模塊化模式和概念的層次結構來表示視覺世界。
- 他們學習的表示很容易檢查-convnets與黑盒相反!
- 現在能夠從頭開始培訓自己的convnet,以解決圖像分類問題。
- 了解如何使用可視化數據增強來克服過度擬合。
- 知道如何使用預訓練的convnet進行特征提取和微調。
- 可以生成convnets學習的過濾器的可視化,以及類活動的heatmap。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
