深度學習之遷移學習介紹與使用
點擊上方“小白學視覺”,選擇加"星標"或“置頂”
重磅干貨,第一時間送達
轉(zhuǎn)載自:OpenCV學堂
遷移學習概述
在深度學習領(lǐng)域,通過預訓練模型作為檢查點開始訓練生成神經(jīng)網(wǎng)絡模型實現(xiàn)對新任務的支持,這種方法通常被稱為遷移學習,它的好處是不用再重頭開始設計與訓練一個全新的網(wǎng)絡,而是基于已經(jīng)訓練好的網(wǎng)絡模型,在其基礎(chǔ)上進行參數(shù)與知識遷移,只需要很少量的計算資源開銷與訓練時間就可以實現(xiàn)對新任務的支持。

要理解遷移學習的整個過程就是要搞清楚下面三件事:
遷移學習遷移什么
遷移學習是怎么遷移的
遷移學習什么時候使用
遷移什么
在預訓練模型中存在各種特征數(shù)據(jù)與權(quán)重信息、有些是與分類識別的對象本身關(guān)聯(lián)比較緊密的特征數(shù)據(jù)與權(quán)重信息,有些是一些比較共性的特征數(shù)據(jù)與信息,是可以被不同的任務或者對象之間共享的,遷移學習就是要遷移那些共性特征數(shù)據(jù)與信息,從而避免再次學習這些知識,實現(xiàn)快速學習。簡單點說遷移學習主要是實現(xiàn)卷積層共性特征遷移,
怎么遷移
遷移學習早期也被稱為感應遷移(inductive transfer),為了搞清楚,遷移學習到底是怎么遷移的,大神Yoshua Bengio等人嘗試定義了一個八層的神經(jīng)網(wǎng)絡,將ImageNet的數(shù)據(jù)集1000個種類分為A與B兩個分類子集,數(shù)量均為500,然后繼續(xù)分別訓練生成forzen推斷圖、然后分別將網(wǎng)絡模型A與B的前三層分別copy給沒有訓練之前網(wǎng)絡B,并對B的余下5層隨機初始化之后開始訓練這兩個全新的網(wǎng)絡(B3B與A3B),他們想通過這個實驗證明、如果B3B與A3B跟之前訓練好的網(wǎng)絡B有同樣的識別準確率就說明自遷移網(wǎng)絡B3B與遷移網(wǎng)絡A3B的前三層網(wǎng)絡特征是共性特征信息,可以用來遷移,如果網(wǎng)絡性能下降則說明它們含有目標對象相關(guān)的個性特征無法用來遷移。

最終的實驗結(jié)果表明,前面7層都是共性特征,只有網(wǎng)絡的最后一層才是任務相關(guān)的個性特征數(shù)據(jù),無法進行遷移,整個實驗結(jié)果如下:


從上面可以看出單純的遷移學習AnB的方式,隨著層數(shù)的增加網(wǎng)絡性能不斷下降,但是通過遷移學習加fine-tuning的方式AnB+對前N層進行重新訓練調(diào)整優(yōu)化,遷移學習的效果居然比原來的還要好。充分說明遷移學習+fine-tuning是個訓練卷積神經(jīng)網(wǎng)絡的好方法。
什么時候使用遷移
當我們有相似的任務需要完成的時候,我們可以使用預訓練的相關(guān)模型,在此基礎(chǔ)上進行遷移學習即可,這個方面caffe與tensorflow都提供大量的可以用于遷移學習的預訓練模型庫,在github上地址分別如下:
#?Caffe模型
https://github.com/BVLC/caffe/wiki/Model-Zoo
#?tensorflow模型
https://github.com/tensorflow/models
在實際使用中我們把預訓練的網(wǎng)絡稱為base-network,把要遷移的前n層復制到一個到目標網(wǎng)絡(target network),然后隨機初始化目標網(wǎng)絡的余下各層、開始訓練進行反向傳播、反向傳播時候有兩種方法可以使用:
把前面n層凍結(jié)forzen、只對后面的層進行訓練,這種方法適合少的樣本數(shù)據(jù),而且隨著層凍結(jié)n數(shù)值增大、網(wǎng)絡性能會下降,這種是單純的遷移學習。
不凍結(jié)前n層、全程參與訓練不斷調(diào)整它們的參數(shù),實現(xiàn)更好的網(wǎng)絡性能這種方法稱為遷移學習+fine-tuning
遷移學習使用
在tensorflow中通過tensorflow object detection API框架使用遷移學習是對象檢測與識別,只需要幾步即可:下面是我自己實現(xiàn)的基于tensorflow object detection API使用SSD模型遷移學習實現(xiàn)了簡單的手勢識別看視頻即可:
下載1:OpenCV-Contrib擴展模塊中文版教程 在「小白學視覺」公眾號后臺回復:擴展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴展模塊教程中文版,涵蓋擴展模塊安裝、SFM算法、立體視覺、目標跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。 下載2:Python視覺實戰(zhàn)項目52講 在「小白學視覺」公眾號后臺回復:Python視覺實戰(zhàn)項目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個視覺實戰(zhàn)項目,助力快速學校計算機視覺。 下載3:OpenCV實戰(zhàn)項目20講 在「小白學視覺」公眾號后臺回復:OpenCV實戰(zhàn)項目20講,即可下載含有20個基于OpenCV實現(xiàn)20個實戰(zhàn)項目,實現(xiàn)OpenCV學習進階。 交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學影像、GAN、算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~

