您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關如何使用Mobilenet和Keras進行遷移學習,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
我將向您展示使用Mobilenet對狗的圖像進行分類的示例。然后,我將向您展示一個例子,它會把藍山雀的圖像錯誤分類。然后,我將重新訓練Mobilenet并使用遷移學習,以便它可以正確地對相同的輸入圖像進行分類。在這個過程中,僅使用了兩個分類器,但是這可以擴展到您想要的數量,僅限于您可用的硬件數量和時間。
Mobilenet的源文件位于:https://arxiv.org/pdf/1704.04861.pdf
MobileNets:用于移動視覺應用的高效卷積神經網絡。
我們使用Mobilenet,是因為它的架構很輕巧。它使用深度可分離的卷積,這基本上意味著它在每個顏色通道上都執行單個卷積,而不是將所有三個卷積相合并展平它。這具有過濾輸入通道的效果。或者正如本文作者清楚地解釋的那樣:“對于MobileNets,深度卷積對每個輸入通道應用單個濾波器。然后,逐點卷積應用1×1卷積來組合輸出深度卷積。標準卷積既可以在一個步驟中過濾并將輸入組合成一組新的輸出。深度可分離卷積將其分成兩層,一個用于過濾的單獨層一個用于組合的單獨層。這種因式分解具有顯著減少計算和模型大小的效果。”
逐點和深度卷積之間的差異
所以Mobilenet的整體架構如下,有30層
步長為2的卷積層
depthwise layer
pointwise layer,使通道數加倍
步長為2的depthwise layer
pointwise layer,使通道數加倍
等等
Mobilenet完整架構
它的維護成本非常低,在高速下表現也非常好。還有許多類型的預訓練模型,其存儲器中的網絡大小和磁盤上使用的參數數量成比例。網絡的速度和功耗與MACs (Multiply-Accumulates)的數量成正比,后者是融合乘法和加法運算數量的度量。
現在讓我們來看看代碼!
我的全部代碼:https://github.com/ferhat00/Deep-Learning/tree/master/Transfer%20Learning%20CNN
讓我們加載必要的包和庫。
我們從Keras輸入預先訓練的模型。
讓我們嘗試下對不同品種的狗的圖像進行一些測試。
輸出:
輸出:
輸出:
到現在為止還挺好。它很好地分類了每一種狗,那么接下來讓我們試一種鳥類藍色的山雀來看看。
藍雀
輸出:
你可以看到它無法識別藍山雀。它錯誤地將圖像歸類為小雞。這是一種原產于北美的本土鳥類,并且有微妙的不同:
山雀
現在讓我們操縱Mobilenet架構,重新訓練前幾個層并使用遷移學習。要做到這一點,我們需要用一些圖像訓練它。在這里,我將用藍山雀和烏鴉的圖像進行訓練。但是,不是手動下載它們的圖像,而是使用谷歌圖像搜索并拉動圖像。要做到這一點,我們可以導入一個很好的包。
查看https://github.com/hardikvasa/google-images-download
讓我們現在重新使用MobileNet,因為它非常輕巧(17Mb),讓我們添加和訓練前幾個層。注意我只會訓練兩個分類器,藍山雀和烏鴉。
讓我們檢查一下模型架構
我們將使用預先訓練的權重,因為已經在Imagenet數據集上訓練了模型。我們確保所有權重都是不可訓練的,只訓練最后幾層密集層。
現在讓我們將訓練數據加載到ImageDataGenerator中。指定路徑,它會自動發送批量訓練數據,簡化代碼。
編譯模型。現在讓我們訓練吧。在GTX1070 GPU上花費不到兩分鐘。
該模型現已接受訓練。 現在讓我們測試一些獨立的輸入圖像來檢查預測。
輸出:
正如你所看到的,它正確地預測了烏鴉的圖像,因為藍山雀的圖像被注釋掉了。
烏鴉
這可以進一步擴展到更多的圖像,更多數量的分類器可以更好地推廣,但它是實現CNN遷移學習的最輕量級的方法和最快捷的方式。這當然取決于您想要實現模型的速度、準確程度和硬件,以及您有多少時間可用。
關于如何使用Mobilenet和Keras進行遷移學習就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。