教程:使用遷移學習來解決影像問題!
本文將教你如何使用遷移學習來解決影像分類問題。使用Keras及其預訓練模型的實際示例用於演示目的。
深度學習(LeCun等,2015)正在迅速成為人工智慧應用的關鍵工具。例如,在計算機視覺、自然語言處理和語音識別等領域,深度學習已經產生了顯著的成果。因此,人們對深度學習的興趣越來越大。
深度學習擅長的問題之一是影像分類(Rawat&Wang 2017)。影像分類的目標是根據一組可能的類別對特定圖片進行分類。影像分類的一個典型例子是在一組圖片中識別貓和狗(例如Dogs vs. Cats Kaggle Competition)。
從深度學習的角度來看,影像分類問題可以透過遷移學習來解決。實際上,影像分類中的幾個最先進的結果基於遷移學習解決方案(Krizhevsky等2012,Simonyan和Zisserman 2014,He等 2016)。 Pan&Yang(2010)提供了關於遷移學習的綜合評論。
本文介紹如何實現影像分類問題的遷移學習解決方案。本文中提出的實現基於Keras(Chollet 2015),並使用Python程式語言。完成此實施後,你將能夠快速輕鬆地解決任何影像分類問題。
本篇文章將按以下方式進行組織:
-
遷移學習
-
卷積神經網路
-
重新利用預先訓練的模型
-
遷移學習過程
-
深度卷積神經網路之上的分類器
-
例項
-
總結
1. 遷移學習
遷移學習是計算機視覺中的一種流行方法,因為它允許我們以節省時間的方式建立精確的模型(Rawat&Wang 2017)。透過遷移學習,你可以從解決不同問題時學到的模式開始,而不是從頭開始學習。這樣你可以利用以前的學習,避免從頭開始。可以將它作為沙特爾在著作"站在巨人的肩膀上"的深度學習一個版本。
在計算機視覺中,通常是透過使用預先訓練的模型來表達遷移學習。預訓練模型是在大型基準資料集上訓練的模型,用於解決類似於我們想要解決的問題。因此,由於訓練這些模型的計算成本,通常的做法是從已發表的文獻(例如VGG,Inception,MobileNet)匯入和使用模型。Canziani et al. (2016)提出了使用ImageNet(Deng et al.2009)挑戰的資料全面回顧預訓練模型在計算機視覺問題上的表現。
2.卷積神經網路
在遷移學習中使用的幾種預訓練模型基於大型卷積神經網路(CNN)(Voulodimos et al. 2018)。總的來說,卷積神經網路(CNN)在各種計算機視覺任務中表現出色(Bengio 2009)。它的高效能和易於訓練是推動卷積神經網路(CNN)在過去幾年中普及的兩個主要因素。
典型的卷積神經網路(CNN)有兩部分:
(1)卷積基(convolutional base),由一堆卷積和彙集層組成。卷積基的主要目標是從影像生成特徵。有關卷積和池化層的直觀解釋,請參閱Chollet(2017)。
(2)分類器(Classifier),通常由完全連線的層組成。分類器的主要目標是基於檢測到的特徵對影像進行分類。完全連線的層是其神經元與前一層中的所有啟用具有完全連線的層。
圖1顯示了基於卷積神經網路(CNN)的模型的體系結構。請注意,這是一個簡化版本,符合本文的目的。事實上,這種模型的架構比我們在此建議的更復雜。
這些深度學習模型的一個重要方面是,它們可以自動學習分層特徵表示。這意味著第一層計算的特徵是通用的,可以在不同的問題域中重用,而最後一層計算的特徵是特定的,取決於所選的資料集和任務。根據Yosinski等人的說法,"如果第一層特徵是通用的,最後一層特徵是特定的,那麼在網路的某個地方必須有從通用特徵到特定特徵的過渡。因此,卷積神經網路(CNN)的卷積基數,尤其是其較低層(靠近輸入的那些)所指的是通用特徵,而分類器部分和卷積基礎的一些較高層指的是特定特徵。
3.重新利用預先訓練的模型
當你根據自己的需要重新利用預先訓練的模型時,首先要刪除原始分類器,然後新增適合自己目的的新分類器,最後必須根據三種策略之一對模型進行微調:
(1)訓練整個模型。在這種情況下,使用預先訓練的模型的體系結構,並根據你的資料集進行訓練。你要從頭開始學習模型,因此需要一個大型資料集(以及大量的計算能力)。
(2)訓練一些層,讓其他層凍結。你還記得,較低層是指通用特徵(與問題無關),而較高層是指特定特徵(依賴於問題)。在這裡,我們透過選擇想要調整網路權重的程度(凍結層在訓練期間不會改變)來實現這種二分法。通常,如果你有一個小型資料集和大量引數,你將保留更多層凍結以避免過度擬合。相比之下,如果資料集很大,並且引數數量很少,你可以透過訓練更多層來完成新任務來改進模型,因為過度擬合不是問題。
(3)凍結卷積基。這種情況對應於訓練/凍結權衡的極端情況。主要思想是將卷積基數保持其原始形式,然後使用其輸出來提供分類器。你正在使用預先訓練的模型作為固定特徵提取機制,如果你的計算能力不足,或者資料集很小,或者預先訓練的模型解決的問題類似於你想要解決的問題的話。
圖2以示意圖的方式介紹了這三種策略
圖2微調策略與策略3不同,策略1和策略2要求你在卷積部分中使用學習率。學習率是一個超引數,可以控制你調整網路權重的程度。當你使用基於卷積神經網路(CNN)的預訓練模型時,使用較小的學習率是明智的,因為高學習率會增加丟失先前知識的風險。假設預訓練模型訓練有素,這是一個公平的假設,保持較小的學習率將確保你不會過早和過多地扭曲卷積神經網路(CNN)權重。
4.遷移學習過程
從實際角度來看,整個遷移學習過程可歸納如下:
(1)選擇預先訓練的模型。從廣泛的預訓練模型中,你可以選擇一個適合自己的問題的模型。例如,如果你正在使用Keras,可以立即訪問一組模型,例如VGG(Simonyan和Zisserman 2014),InceptionV3(Szegedy等2015)和ResNet5(He等2015)。在這裡,你可以看到Keras上的所有型別。
(2)根據大小相似度矩陣對問題進行分類。在圖3中,你可以使用"The Matrix"來控制自己的選擇。考慮到資料集的大小及其與預訓練模型訓練的資料集的相似性,此矩陣對你的計算機視覺問題進行分類。根據經驗,如果每個類的影像少於1000個,請考慮你的資料集很小。關於資料集相似性,讓這種常識佔上風。例如,如果你的任務是識別貓和狗,ImageNet將是一個類似的資料集,因為它擁有貓和狗的影像。但是,如果你的任務是識別癌細胞,則不能將ImageNet視為類似的資料集。
(3)微調模型。在這裡,你可以使用尺寸相似度矩陣來指導自己的選擇,然後參考我們之前提到的關於重新利用預訓練模型的三個選項。圖4提供了隨後文字的視覺化摘要。
-
象限1.大型資料集,但與預先訓練的模型資料集不同。這種情況將引導你進入策略1,由於你擁有大型資料集,因此可以從頭開始訓練模型,並執行想要的任何操作。儘管資料集不相似,但在實踐中,使用其架構和權重從預訓練模型初始化模型仍然是有用的。
-
象限2。大型資料集,與預訓練模型的資料集類似。在這裡,任何選項都有效。可能最有效的選擇是策略2。由於我們有一個大型資料集,過度擬合不應成為問題,因此我們可以儘可能多地學習。但是,由於資料集相似,我們可以透過利用以前的知識來避免大量的訓練工作。因此,應該足以訓練分類器和卷積基的頂層。
-
象限3。小型資料集,與預訓練模型的資料集不同。這是計算機視覺問題。一切都是對你不利的。而抱怨並不是一種很好的選擇,那麼唯一的希望就是策略2在訓練和凍結的層數之間很難找到平衡點。深入你的模型可能會過度擬合,但如果留在模型的淺層,你將不會學到任何有用的東西。也許你需要比象限2更深入,你需要考慮資料增強技術(這裡提供了關於資料增強技術的一個很好的總結)。
-
象限4。小型資料集,但與預訓練模型的資料集類似。請選擇策略3。你只需要刪除最後一個完全連線的圖層(輸出圖層),將預先訓練的模型作為固定特徵提取器執行,然後使用生成的特徵來訓練新的分類器。
5.深度卷積神經網路之上的分類器
如前所述,基於預訓練卷積神經網路的傳遞學習方法產生的影像分類模型通常由兩部分組成:
(1)卷積基,執行特徵提取。
(2)分類器,它根據卷積基數提取的特徵對輸入影像進行分類。
因為在本節中我們關注分類器部分,所以必須首先說明可以遵循不同的方法來構建分類器。一些最受歡迎的做法是:
(1)完全連線的層。對於影像分類問題,標準方法是使用一堆完全連線的層,然後使用softmax啟用層。softmax層在每個可能的類標籤上輸出機率分佈,然後我們只需要根據最可能的類對影像進行分類。
(2)全域性平均池化(Global Average Pooling)。Lin et al. (2013)提出了一種基於全域性平均池化的不同方法。在這種方法中,我們不是在卷積基礎上新增完全連線的層,而是新增全域性平均池層並將其輸出直接饋送到softmax啟用層。Lin et al. (2013)詳細討論了這種方法的優缺點。
(3)線性支援向量機。線性支援向量機(SVM)是另一種可能的方法。根據Tang(2013),我們可以透過在卷積基數提取的特徵上訓練線性SVM分類器來提高分類準確性。有關SVM方法的優缺點的更多細節可以在本文中找到。
6.例項
在這個例子中,我們將看到如何在用於影像分類的傳輸學習解決方案中實現這些分類器中的每一個。根據Rawat和Wang(2017)的研究,"在深度卷積神經網路之上比較不同分類器的效能仍需要進一步研究,從而形成一個有趣的研究方向"。因此,看看每個分類器如何在標準影像分類問題中執行將會很有趣。
你可以在我的GitHub頁面上找到此示例的完整程式碼。
https://github.com/pmarcelino/blog/blob/master/dogs_cats/dogs_cats.ipynb
6.1準備資料
在這個例子中,我們將使用原始資料集的較小版本。這將允許我們更快地執行模型,這對於那些計算能力有限的人(如我)來說非常棒。
要構建較小版本的資料集,我們可以調整Chollet(2017)提供的程式碼,如程式碼1所示。
程式碼1.為Dogs vs. Cats建立一個較小的資料集。
6.2.從卷積基礎中提取特徵
卷積基數將用於提取特徵。這些功能將提供我們想要訓練的分類器,以便我們可以識別影像是否有狗或貓。
Chollet(2017)提供的程式碼再次進行了改編。程式碼2顯示了使用的程式碼。
程式碼2 從卷積基礎中提取特徵
6.3 分類
6.3.1完全連線的層
我們提出的第一個解決方案基於完全連線的層。該分類器新增了一堆完全連線的層,這些層由從卷積基礎中提取的特徵提供。
為了簡單和快速,我們將使用Chollet(2018)提出的解決方案稍作修改。特別是,我們將使用Adam最佳化器而不是RMSProp。
程式碼3顯示了使用的程式碼,而圖5和6顯示了學習曲線。
程式碼3 完全連線的層解決方案
圖5完全連線層解決方案的準確性
圖6完全連線的層解決方案的丟失 結果簡要說明:
(1)驗證準確度約為0.85,考慮到資料集的大小,這個結果令人鼓舞。
(2)這個模型過度擬合。訓練和驗證曲線之間存在很大差距。
(3)由於我們已經使用了dropout,應該增加資料集的大小以改善結果。
6.3.2。全域性平均池化
這種情況與前一種情況的區別在於,我們將新增一個全域性平均池化層,並將其輸出饋送到S形啟用層,而不是新增一堆完全連線的層。
請注意,我們討論的是sigmoid啟用層而不是softmax啟用層,這是Lin等人推薦的。我們正在改變為sigmoid啟用,因為在Keras中,要執行二進位制分類,你應該使用sigmoid啟用和binary_crossentropy作為損失。因此,有必要對Lin等人的原始提案進行小修改。
程式碼4顯示了構建分類器的程式碼。圖7和8顯示了生成的學習曲線。
程式碼4全域性平均池化解決方案
圖7 全域性平均池化解決方案的準確性
結果簡要說明:
(1)驗證準確性類似於完全連線的層解決方案產生的驗證精度。
(2)該模型沒有像前一種情況那樣過度擬合。
(3)當模型停止訓練時,損失函式仍在減少。可以透過增加時期數來改進模型。
6.3.3線性支援向量機
在這種情況下,我們將在卷積基礎提取的特徵上訓練線性支援向量機(SVM)分類器。
為了訓練這種分類器,傳統的機器學習方法更可取。因此,我們將使用k倍交叉驗證來估計分類器的誤差。由於將使用k摺疊交叉驗證,我們可以連線訓練和驗證集以擴大我們的訓練資料(我們保持測試集不變,就像我們在之前的情況中所做的那樣)。程式碼5顯示了資料的連線方式。
程式碼5.資料連線
最後,我們必須意識到SVM分類器有一個超引數。該超引數是誤差項的懲罰引數C。為了最佳化這個超引數的選擇,我們將使用詳盡的網格搜尋。程式碼6顯示了用於構建此分類器的程式碼,而圖9顯示了學習曲線。
程式碼6 線性SVM解決方案
圖9線性SVM解決方案的準確性結果簡要說明:(1)模型的精度約為0.86,這與之前解決方案的精度相似。(2)過度擬合圍繞中心。此外,訓練精度始終為1.0,這是不常見的,可以解釋為過度擬合的標誌。(3)模型的準確性應隨著訓練樣本的數量而增加。但是,這似乎沒有發生。這可能是由於過度擬合。當資料集增加時,看看模型如何反應將會很有趣。
7.總結
在本文中,我們:
•介紹了遷移學習、卷積神經網路和預訓練模型的概念。•定義了基本的微調策略,以重新利用預先訓練的模型。•描述了一種結構化方法,根據資料集的大小和相似性來決定應該使用哪種微調策略。•引入了三種不同的分類器,可以在從卷積基礎中提取的特徵之上使用。•為本文中介紹的三個分類器中的每一個提供了關於影像分類的端到端示例。 我希望人們有動力開始開發有關計算機視覺的深度學習專案。這是一個偉大的研究領域,每天都會有新的令人興奮的發現。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31545819/viewspace-2218847/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用bulkCollect解決資料遷移問題
- 遷移學習中的BN問題遷移學習
- 什麼是遷移學習?什麼時候使用遷移學習?遷移學習
- 兩款工具解決SQL Server遷移問題DJSQLServer
- [譯] TensorFlow 教程 #08 – 遷移學習遷移學習
- [譯] TensorFlow 教程 #08 - 遷移學習遷移學習
- 影像分類學習:X光胸片診斷識別----遷移學習遷移學習
- block學習(pctfree&pctused),行遷移問題(zt)BloC
- 解決問題oracle學習篇Oracle
- 騰訊QQ看點團隊:用遷移學習架構解決短影片冷啟推薦問題遷移學習架構
- 當前NLP遷移學習中的一些問題遷移學習
- WebSphere客戶端遷移的常見問題解決二Web客戶端
- 深度學習之遷移學習介紹與使用深度學習遷移學習
- 使用Keras和遷移學習從人臉影像中預測體重指數BMIKeras遷移學習
- Amigo學習(一)解決使用中遇到的問題Go
- 遷移學習系列---基於例項方法的遷移學習遷移學習
- 遷移學習的基礎研究問題及適用場景遷移學習
- 使用資料泵遷移遇到的問題
- 圖解BERT(NLP中的遷移學習)圖解遷移學習
- 機器學習:詳解遷移學習(Transfer learning)機器學習遷移學習
- 使用Nginx來解決跨域的問題Nginx跨域
- java學習中問題與解決方式Java
- OAF helloworld 學習異常問題解決
- munium學習過程中問題解決
- 強化學習-學習筆記11 | 解決高估問題強化學習筆記
- 讀“基於深度學習的影像風格遷移研究綜述”有感深度學習
- nginx簡易使用教程,使用nginx解決跨域問題Nginx跨域
- 使用Mobilenet和Keras進行遷移學習!Keras遷移學習
- 遷移後處理外來鍵約束的問題
- 解決mysql8.0.13dm7資料遷移相關問題undefinedMySqlUndefined
- 解決svn遷移過程中出現:SVN Error: is not the same repository as的問題Error
- 【火爐煉AI】深度學習009-用Keras遷移學習提升效能(多分類問題)AI深度學習Keras遷移學習
- 遷移學習(Transfer Learning)遷移學習
- 深度學習+深度強化學習+遷移學習【研修】深度學習強化學習遷移學習
- 【深度學習系列】遷移學習Transfer Learning深度學習遷移學習
- Laravel5的資料庫表建立問題 資料庫遷移操作報錯問題解決Laravel資料庫
- 利用sqlldr工具進行資料遷移時發現的問題解決方法SQL
- 解決移動端複製問題