十大預訓練模型助你學習深度學習
本文為 AI 研習社編譯的技術博客,原標題 Top 10 Pretrained Models to get you Started with Deep Learning (Part 1 – Computer Vision),作者為 PRANAV DAR。
翻譯 | 楊東旭 白開水 機智的工人 Lamaric
校對 |Lamaric
介紹
對於那些想學習演算法或者嘗試現有框架的人來說,使用預訓練模型能夠提供很好的幫助。因為時間與計算量方面的諸多限制,不可能隨時從頭開始訓練一個模型,這也正是預訓練模型存在的原因。你可以運用預訓練作為基準來改進現有模型,或者根據它測試自己的模型。因此,預訓練模型的潛能是巨大的。
來源:Facebook AI
本文旨在研究具有Keras中具有計算機視覺應用的各種預訓練模型。 為什麼是 Keras?首先對於神經網路的初學者來說,是一個很容易上手的框架。其次,希望大家在文中只選擇一個框架。這樣可以使得大家不用在意框架方面的問題,而專註於模型。
然後,鼓勵大家在自己的機器上嘗試每個模型,試著理解模型的工作原理,以及熟悉如何改進或調整內部參數。
對於這一課題,我們將其分成一系列文章分別講解。第二部分把關注主要放在NLP上,而第三部分我們主要考慮音頻語音模型。這樣,讀者就可以通過這些領域中現有的解決方案迅速跟蹤你們的學習過程。
內容列表
目標檢測
Mask R-CNN
YOLOv2
MobileNet
生/熟 西紅柿分類
汽車分類
面部識別與重建
VGG-Face 模型
3D 單圖人臉重建
分割
圖像語義分割 – Deeplabv3
機器手術分割
其他
圖像描述
目標檢測
目標檢測是計算機視覺領域最常見的應用之一。它適用於各行各業,從自動駕駛汽車到計算人群中的人數。本節介紹可用於檢測目標的預訓練模型。您還可以查看以下文章以熟悉此主題:
使用 Python 來理解和從頭建立目標檢測模型(https://www.analyticsvidhya.com/blog/2018/06/understanding-building-object-detection-model-python/)
Mask R-CNN
https://github.com/matterport/Mask_RCNN
Mask R-CNN 是為目標實例分割而開發的靈活框架。這個預訓練模型是使用 Python 和 Keras 對 Mask R-CNN 技術的實現。它為給定圖像中的目標的每個實例生成邊界框和分割掩模(如上所示)。
這個 GitHub 存儲庫提供了大量的資源來幫助新手入門。它包括 Mask R-CNN 的源代碼,用於MS COCO 數據集的訓練代碼和預訓練權重,Jupyter notebook 用於可視化檢測流程的每個步驟。
YOLOv2
https://github.com/experiencor/keras-yolo2
說到 YOLO,這是一個廣泛運用於深度學習的目標檢測框架,這個庫包含Keras 中的YOLOv2 實現。儘管開發者已經在各種目標圖像上測試了這一框架,比如袋鼠檢測、自動駕駛汽車,紅細胞檢測等等,他們依然發布了浣熊檢測的預訓練模型。
這裡你可以下載浣熊的數據集(https://github.com/experiencor/raccoon_dataset),並且開始訓練這個預訓練模型。這一數據集包含200個圖片(160個訓練集,40個測試集)。同樣,你可以下載整個模型的預訓練權重(https://1drv.ms/f/s!ApLdDEW3ut5feoZAEUwmSMYdPlY)。而根據模型開發者所說,這些權重可以用於一類物體的目標檢測。
MobileNet
https://keras.io/applications/#mobilenet
顧名思義,MobileNet是為移動設備設計的架構。而搭建它的正是移動設備行業龍頭谷歌。而我們之前附上鏈接的模型,帶有對流行的 ImageNet(包含兩萬個類的數百萬張圖片的巨型資料庫) 數據集的預訓練權重。
正如上文所提,MobileNet不止可以用於目標檢測,同樣它也適用於類似面部識別、地標識別、細緻紋理分類等多種計算機視覺任務。
生熟番茄分類
https://github.com/fyrestorm-sdb/tomatoes
假定我們有幾百個數據集的番茄圖片,現在考慮如何如何區分它們,比方說按是否瑕疵,或者按成熟與否區分。這裡我們考慮使用深度學習模型,而解決這個問題的關鍵技術就是圖像處理。應對於這一分類問題,我們可以利用在Keras上預訓練好的 VGG16模型來區分給定圖片的番茄是生是熟。
通過在ImageNet數據集上抓取的390張或生或熟的番茄圖像進行訓練,並在18張不同的驗證集上進行測試。這些驗證集圖像上的總體結果如下所示:
汽車分類
https://github.com/michalgdak/car-recognition
眾所周知,對一輛車分門別類有很多方法:譬如車體設計風格、車門數量、是否敞篷、車座數量等等。對於這一問題,我們需要將車輛圖片分門別類,比如考慮品牌、設計模式、年限等等的分類。2012年,Tesla Model S 使用了斯坦福大學的車輛數據集(其中包含196類汽車的16185張圖片)正是為了開發這一模型(http://ai.stanford.edu/~jkrause/cars/car_dataset.html)。
Tesla Model S使用預訓練過的VGG16、VGG19、InceptionV3模型進行訓練。由於僅僅使用 3*3的卷積層增加深度,VGG這一簡單特點為人所知,這裡16和19分別代表兩種VGG網路的層數。
由於數據量較少,最簡單的模型——VGG16是最精確的。這一神經網路的訓練,使得在交叉驗證集上達到了66.11%的準確度。而由於偏差方差的問題,反而使得比較複雜的模型譬如InceptionV3得到的準確率較低。
人臉識別與重建
人臉識別在深度學習社區是非常流行的。越來越多的技術與模型以令人驚訝的速度發展著而被應用於人臉識別技術。它的應用範圍同樣也是很廣泛的,包括但不限於手機解鎖,人群檢測,基於人臉的情感分析等等。
人臉重建從另一方面講,是指由人臉特寫圖像到人臉三維建模圖像的生成過程。從二維信息中創建三維結構化對象是工業界又一個十分關心的問題。人臉重建在電影及遊戲產業的應用是十分廣泛的。多種 CGI 模型已經能夠實現自動化,因而在人臉生成過程中節省了大量的金錢與時間。
本文的這一部分將討論用於這兩個領域的預訓練模型。
VGG-Face 模型
https://gist.github.com/EncodeTS/6bbe8cb8bebad7a672f0d872561782d9
從頭開始創建一個人臉識別模型其實是一個令人害怕的任務。為了最終構建出令人滿意的模型,你需要去尋找搜集並且標註大量的圖像。因此,在這個領域使用預訓練模型是非常有道理的。
VGG-Face(http://www.robots.ox.ac.uk/~vgg/data/vgg_face/)是一個有超過2百萬張人臉圖像,包含2622個獨立身份的數據集。預訓練模型已經通過以下方法構建完成:
vgg-face-keras: 將vgg-face模型直接轉化成keras模型
vgg-face-keras-fc:首先將vgg-face Caffe模型轉化成mxnet模型,再將其轉化成keras模型
基於單圖像的三維人臉重建
https://github.com/dezmoanded/vrn-torch-to-keras
這是深度學習的一個非常炫酷的成就。從以上圖像你可以推斷出為了將臉部特徵重建成三維空間模型是怎樣工作的。這個預訓練模型最初是用 Torch 實現的(https://github.com/AaronJackson/vrn),之後被轉化成keras模型。
圖像分割
語義圖像分割 – Deeplabv3+
https://github.com/bonlime/keras-deeplab-v3-plus
語義圖像分割是指將語義標籤分配給圖像的每個像素的任務。這些語義標籤可以是『天空』,『汽車』,『道路』,『長頸鹿』等等。這項技術所要做的就是找到對象的邊界因而需要對精度要求做出約束(這也就是與圖像層面的分類任務的區別所在,分類任務對精度的要求更加寬鬆)。
Deeplabv3 是Google最新的語義圖像分割模型。 它最初是使用TensorFlow實現並且現在也已經通過keras實現了。這個GitHub倉庫包含如何獲取標籤,如何使用自定義類別數的預訓練模型的代碼,當然也包含如何去追蹤自己模型的代碼。
機器手術分割
https://github.com/ternaus/robot-surgery-segmentation
這一模型嘗試定位確定在機器人輔助手術方案中的醫療器械圖像分割的問題。該問題又被分成兩個部分,如下文所說:
二值分割:圖像中的每一個像素都會被標記成儀器或背景。
多類別分割:不同儀器以及同一儀器的不同部分將會與背景區分開來。
該預訓練模型是以U-Net網路架構為基礎,並且通過應用如LinkNet 和TernausNet等先進的神經網路又得到了性能的提升。模型是在高解析度立體相機圖像的8 × 225幀序列上訓練得到的。
其他圖像描述
還記得那些給你照片並且讓你對它做出描述的遊戲嗎?這基本上就是圖像描述。它使用自然語言處理和計算機視覺的組合來生成描述結果。這項任務長期以來一直是一項具有挑戰性的任務,因為它需要具有無偏見圖像和場景的大型數據集。鑒於這些約束,該演算法必須可以針對任何給定的圖像都可行。
現在很多企業正在利用這種技術,但你怎麼能去使用它呢?解決方案在於將給定的輸入圖像轉換為簡短且有意義的描述。編碼器 - 解碼器框架廣泛用於此任務。圖像編碼器是卷積神經網路(CNN)。
這是基於 MS COCO 數據集(http://cocodataset.org/#download)上的 VGG 16 預訓練模型,其中解碼器是預測給定圖像的描述的長短期記憶(LSTM)網路。有關的詳細說明及介紹,建議您跟進我們關於自動圖像描述的文章(https://www.analyticsvidhya.com/blog/2018/04/solving-an-image-captioning-task-using-deep-learning/)。
結尾小提示
深度學習是一個難以攻破的棘手領域,這就是為什麼我們看到研究人員發布了如此多的預訓練模型。親自使用它們來理解和擴展我說的關於對象檢測任務的知識,我強烈建議從上面選擇一個領域並使用給定的模型來開始你們自己的旅程。
在下一篇文章中,我們將深入研究自然語言處理。如果您對本文和整個系列有任何的反饋或建議,請在下面的評論區告訴我們。
https://www.analyticsvidhya.com/blog/2018/07/top-10-pretrained-models-get-started-deep-learning-part-1-computer-vision/
※為什麼你需要改進訓練數據,如何改進?
※基於深度學習的目標檢測演算法綜述(一)
TAG:AI研習社 |