4個計算機視覺領(lǐng)域用作遷移學(xué)習(xí)的模型
導(dǎo)讀
使用SOTA的預(yù)訓(xùn)練模型來通過遷移學(xué)習(xí)解決現(xiàn)實的計算機視覺問題。

如果你試過構(gòu)建高精度的機器學(xué)習(xí)模型,但還沒有試過遷移學(xué)習(xí),這篇文章將改變你的生活。至少,對我來說是的。
我們大多數(shù)人已經(jīng)嘗試過,通過幾個機器學(xué)習(xí)教程來掌握神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)知識。這些教程非常有助于了解人工神經(jīng)網(wǎng)絡(luò)的基本知識,如循環(huán)神經(jīng)網(wǎng)絡(luò),卷積神經(jīng)網(wǎng)絡(luò),GANs和自編碼器。但是這些教程的主要功能是為你在現(xiàn)實場景中實現(xiàn)做準(zhǔn)備。
現(xiàn)在,如果你計劃建立一個利用深度學(xué)習(xí)的人工智能系統(tǒng),你要么(i)有一個非常大的預(yù)算用于培訓(xùn)優(yōu)秀的人工智能研究人員,或者(ii)可以從遷移學(xué)習(xí)中受益。
什么是遷移學(xué)習(xí)?
遷移學(xué)習(xí)是機器學(xué)習(xí)和人工智能的一個分支,其目的是將從一個任務(wù)(源任務(wù))中獲得的知識應(yīng)用到一個不同但相似的任務(wù)(目標(biāo)任務(wù))中。
例如,在學(xué)習(xí)對維基百科文本進行分類時獲得的知識可以用于解決法律文本分類問題。另一個例子是利用在學(xué)習(xí)對汽車進行分類時獲得的知識來識別天空中的鳥類。這些樣本之間存在關(guān)聯(lián)。我們沒有在鳥類檢測上使用文本分類模型。
遷移學(xué)習(xí)是指從相關(guān)的已經(jīng)學(xué)習(xí)過的任務(wù)中遷移知識,從而對新的任務(wù)中的學(xué)習(xí)進行改進
總而言之,遷移學(xué)習(xí)是一個讓你不必重復(fù)發(fā)明輪子的領(lǐng)域,并幫助你在很短的時間內(nèi)構(gòu)建AI應(yīng)用。
遷移學(xué)習(xí)的歷史
為了展示遷移學(xué)習(xí)的力量,我們可以引用Andrew Ng的話:
遷移學(xué)習(xí)將是繼監(jiān)督學(xué)習(xí)之后機器學(xué)習(xí)商業(yè)成功的下一個驅(qū)動因素
遷移學(xué)習(xí)的歷史可以追溯到1993年。Lorien Pratt的論文“Discriminability-Based Transfer between Neural Networks”打開了潘多拉的盒子,向世界介紹了遷移學(xué)習(xí)的潛力。1997年7月,“Machine Learning”雜志發(fā)表了一篇遷移學(xué)習(xí)論文???。隨著該領(lǐng)域的深入,諸如多任務(wù)學(xué)習(xí)等相鄰主題也被納入遷移學(xué)習(xí)領(lǐng)域。“Learning to Learn”是這一領(lǐng)域的先驅(qū)書籍之一。如今,遷移學(xué)習(xí)是科技企業(yè)家構(gòu)建新的人工智能解決方案、研究人員推動機器學(xué)習(xí)前沿的強大源泉。

遷移學(xué)習(xí)是如何工作的?
實現(xiàn)遷移學(xué)習(xí)有三個要求:
- 由第三方開發(fā)開源預(yù)訓(xùn)練模型
- 重用模型
- 對問題進行微調(diào)
開發(fā)開源預(yù)訓(xùn)練模型
預(yù)訓(xùn)練的模型是由其他人創(chuàng)建和訓(xùn)練來解決與我們類似的問題的模型。在實踐中,幾乎總是有人是科技巨頭或一群明星研究人員。他們通常選擇一個非常大的數(shù)據(jù)集作為他們的基礎(chǔ)數(shù)據(jù)集,比如ImageNet或Wikipedia Corpus。然后,他們創(chuàng)建一個大型神經(jīng)網(wǎng)絡(luò)(例如,VGG19有143,667,240個參數(shù))來解決一個特定的問題(例如,這個問題用VGG19做圖像分類。)當(dāng)然,這個預(yù)先訓(xùn)練過的模型必須公開,這樣我們就可以利用這些模型并重新使用它們。
重用模型
在我們掌握了這些預(yù)先訓(xùn)練好的模型之后,我們重新定位學(xué)習(xí)到的知識,包括層、特征、權(quán)重和偏差。有幾種方法可以將預(yù)先訓(xùn)練好的模型加載到我們的環(huán)境中。最后,它只是一個包含相關(guān)信息的文件/文件夾。然而,深度學(xué)習(xí)庫已經(jīng)托管了許多這些預(yù)先訓(xùn)練過的模型,這使得它們更容易訪問:
- TensorFlow Hub
- Keras Applications
- PyTorch Hub
你可以使用上面的一個源來加載經(jīng)過訓(xùn)練的模型。它通常會有所有的層和權(quán)重,你可以根據(jù)你的意愿調(diào)整網(wǎng)絡(luò)。
對問題進行微調(diào)
現(xiàn)在的模型也許能解決我們的問題。對預(yù)先訓(xùn)練好的模型進行微調(diào)通常更好,原因有兩個:
- 這樣我們可以達(dá)到更高的精度。
- 我們的微調(diào)模型可以產(chǎn)生正確的格式的輸出。
一般來說,在神經(jīng)網(wǎng)絡(luò)中,底層和中層通常代表一般的特征,而頂層則代表特定問題的特征。由于我們的新問題與原來的問題不同,我們傾向于刪除頂層。通過為我們的問題添加特定的層,我們可以達(dá)到更高的精度。
在刪除頂層之后,我們需要放置自己的層,這樣我們就可以得到我們想要的輸出。例如,使用ImageNet訓(xùn)練的模型可以分類多達(dá)1000個對象。如果我們試圖對手寫數(shù)字進行分類(例如,MNIST classification),那么最后得到一個只有10個神經(jīng)元的層可能會更好。
在我們將自定義層添加到預(yù)先訓(xùn)練好的模型之后,我們可以用特殊的損失函數(shù)和優(yōu)化器來配置它,并通過額外的訓(xùn)練進行微調(diào)。
計算機視覺中的4個預(yù)訓(xùn)練模型
這里有四個預(yù)先訓(xùn)練好的網(wǎng)絡(luò),可以用于計算機視覺任務(wù),如圖像生成、神經(jīng)風(fēng)格轉(zhuǎn)換、圖像分類、圖像描述、異常檢測等:
- VGG19
- Inceptionv3 (GoogLeNet)
- ResNet50
- EfficientNet
讓我們一個一個地深入研究。
VGG-19
VGG是一種卷積神經(jīng)網(wǎng)絡(luò),深度為19層。它是由牛津大學(xué)的Karen Simonyan和Andrew Zisserman在2014年構(gòu)建和訓(xùn)練的,論文為:Very Deep Convolutional Networks for large Image Recognition。VGG-19網(wǎng)絡(luò)還使用ImageNet數(shù)據(jù)庫中的100多萬張圖像進行訓(xùn)練。當(dāng)然,你可以使用ImageNet訓(xùn)練過的權(quán)重導(dǎo)入模型。這個預(yù)先訓(xùn)練過的網(wǎng)絡(luò)可以分類多達(dá)1000個物體。對224x224像素的彩色圖像進行網(wǎng)絡(luò)訓(xùn)練。以下是關(guān)于其大小和性能的簡要信息:
- 大小:549 MB
- Top-1 準(zhǔn)確率:71.3%
- Top-5 準(zhǔn)確率:90.0%
- 參數(shù)個數(shù):143,667,240
- 深度:26

Inceptionv3 (GoogLeNet)
Inceptionv3是一個深度為50層的卷積神經(jīng)網(wǎng)絡(luò)。它是由谷歌構(gòu)建和訓(xùn)練的,你可以查看這篇論文:“Going deep with convolutions”。預(yù)訓(xùn)練好的帶有ImageNet權(quán)重的Inceptionv3可以分類多達(dá)1000個對象。該網(wǎng)絡(luò)的圖像輸入大小為299x299像素,大于VGG19網(wǎng)絡(luò)。VGG19是2014年ImageNet競賽的亞軍,而Inception是冠軍。以下是對Inceptionv3特性的簡要總結(jié):
- 尺寸:92 MB
- Top-1 準(zhǔn)確率:77.9%
- Top-5 準(zhǔn)確率:93.7%
- 參數(shù)數(shù)量:23,851,784
- 深度:159

ResNet50 (Residual Network)
ResNet50是一個卷積神經(jīng)網(wǎng)絡(luò),深度為50層。它是由微軟于2015年建立和訓(xùn)練的,論文:[Deep Residual Learning for Image Recognition](http://deep Residual Learning for Image Recognition /)。該模型對ImageNet數(shù)據(jù)庫中的100多萬張圖像進行了訓(xùn)練。與VGG-19一樣,它可以分類多達(dá)1000個對象,網(wǎng)絡(luò)訓(xùn)練的是224x224像素的彩色圖像。以下是關(guān)于其大小和性能的簡要信息:
- 尺寸:98 MB
- Top-1 準(zhǔn)確率:74.9%
- Top-5 準(zhǔn)確率:92.1%
- 參數(shù)數(shù)量:25,636,712
如果你比較ResNet50和VGG19,你會發(fā)現(xiàn)ResNet50實際上比VGG19性能更好,盡管它的復(fù)雜性更低。你也可以使用更新的版本,如ResNet101,ResNet152,ResNet50V2,ResNet101V2,ResNet152V2。

EfficientNet
EfficientNet是一種最先進的卷積神經(jīng)網(wǎng)絡(luò),由谷歌在2019年的論文“efficient entnet: Rethinking Model Scaling for convolutional neural Networks”中訓(xùn)練并發(fā)布。EfficientNet有8種可選實現(xiàn)(B0到B7),甚至最簡單的EfficientNet B0也是非常出色的。通過530萬個參數(shù),實現(xiàn)了77.1%的最高精度性能。

EfficientNetB0的特性簡要介紹如下:
- 尺寸:29 MB
- Top-1 準(zhǔn)確率:77.1%
- Top-5 準(zhǔn)確率:93.3%
- 參數(shù)數(shù)量:~5,300,000
- 深度:159
其他的計算機視覺問題的預(yù)訓(xùn)練模型
我們列出了四種最先進的獲獎卷積神經(jīng)網(wǎng)絡(luò)模型。然而,還有幾十種其他模型可供遷移學(xué)習(xí)使用。下面是對這些模型的基準(zhǔn)分析,這些模型都可以在Keras Applications中獲得。

總結(jié)
在一個我們可以很容易地獲得最先進的神經(jīng)網(wǎng)絡(luò)模型的世界里,試圖用有限的資源建立你自己的模型就像是在重復(fù)發(fā)明輪子,是毫無意義的。
相反,嘗試使用這些訓(xùn)練模型,在上面添加一些新的層,考慮你的特殊計算機視覺任務(wù),然后訓(xùn)練。其結(jié)果將比你從頭構(gòu)建的模型更成功。