十大預訓練模型,助力入門深度學習(第1部分 - 計算機視覺)
來自專欄 TensorFlowNews
20 人贊了文章
作者 | Joey
出品 | 磐創AI技術團隊
【磐創AI導讀】:本文主要為深度學習入門者介紹了十大預訓練模型。想要學習更多的機器學習、深度學習知識,歡迎大家關注我們的公眾號:磐創AI。
介紹
對於希望運用某個現有框架來解決自己的任務的人來說,預訓練模型可以幫你快速實現這一點。通常來說,由於時間限制或硬體水平限制大家往往並不會從頭開始構建並訓練模型,這也就是預訓練模型存在的意義。大家可以使用預訓練模型作為基準來改進現有模型,或者針對它測試自己的模型:

在本文中,將向大家介紹Keras中多種可應用在計算機視覺領域的預訓練模型。這裡選擇Keras的原因,一是因為它易上手,對於剛開始使用神經網路的人來說是一個很好的選擇;二是希望在本系列文章中統一使用一個框架,也幫大家省去很多麻煩,只需關注模型的具體使用即可。大家可以通過多次調整模型參數的形式對本文介紹的模型進行實踐,這樣將更有助於理解。
本主題將包含一系列文章,本文為本系列的第一部分,第二部分將側重於自然語言處理(NLP),第三部分將關注語音處理模型。希望通過這些可以幫助到大家,讓大家迅速上手那些現有的模型。
目錄
- 目標檢測
- Mask R-CNN
- YOLOv2
- MobileNet
- 成熟/未成熟的番茄分類
- 汽車分類
- 面部識別和再生
- VGG-Face模型
- 單幅圖像的三維人臉重建
- 分割
- 語義圖像分割 - Deeplabv3
- 機器手術分割(Robot Surgery Segmentation)
- 其他
- 圖像描述(Image Captioning)
目標檢測
目標檢測是計算機視覺領域中最常見的應用之一。它適用於各行各業,從自動駕駛汽車到計算人群中的人數。本節介紹可用於目標檢測的預訓練模型。
MaskR-CNN
(https://github.com/matterport/Mask_RCNN)

MaskR-CNN是為目標實例分割而開發的靈活框架。這個github提供的預訓練模型是Mask R-CNN適配的Keras版本。它為給定圖像中的對象的每個實例生成邊界框和分割掩模(如上所示)。
這個GitHub存儲庫提供了大量的資源來幫助入門。它包括Mask R-CNN的源代碼,用於MS COCO的訓練代碼和預訓練權重,用於可視化檢測pipline的每個步驟的Jupyter notebook等。
YOLOv2
(https://github.com/experiencor/keras-yolo2)

YOLO是一種應用深度學習技術的超流行目標檢測框架。此存儲庫包含YOLOv2在Keras上的實現。同時開發人員已經在多種目標圖像(如袋鼠檢測,自動駕駛汽車,紅細胞檢測等)上應用了這個框架,而且他們已經發布了用於浣熊檢測的預訓練模型。
大家可以在此處(https://github.com/experiencor/raccoon_dataset)下載浣熊數據集,立即開始使用此預訓練模型!該數據集由200個圖像組成(160個訓練,40個驗證)。整個模型預訓練的權重在這裡下載(https://1drv.ms/f/s!ApLdDEW3ut5feoZAEUwmSMYdPlY)。根據開發人員的說法,這些權重可以適用於所有單類別的目標檢測器。
MobileNet
(https://keras.io/applications/#mobilenet)

顧名思義,MobileNet是一種專為移動設備設計的架構,它是由谷歌建立的。我們在上面鏈接的這個特殊模型在流行的ImageNet資料庫上提供了預訓練權重(它是一個包含數百萬張屬於20,000多類的圖像資料庫)。
正如你所見,MobileNet的應用不僅限於目標檢測,還涵蓋各種計算機視覺任務,如面部屬性、地標(landmark)識別、細粒度分類等。
成熟/未成熟的番茄分類
(https://github.com/fyrestorm-sdb/tomatoes)

如果給你幾百張西紅柿的圖片,你會如何對它們進行分類?是有缺陷/無缺陷,或成熟/未成熟?從深度學習的角度考慮,這個問題的首選技術是基於深度學習的圖像處理。在這個分類問題中,我們可以使用預訓練的Keras VGG16模型來識別給定圖像中的番茄是成熟的還是未成熟。
該模型在來自ImageNet數據集的390張成熟和未成熟的番茄圖像進行了訓練,並在18種不同的番茄驗證圖像上進行了測試。 這些驗證圖像的總體結果如下:
查全率
0.8888889
查准率
0.9411765
F1得分
0.9142857
汽車分類
(https://github.com/michalgdak/car-recognition)

有許多方法可以對車輛進行分類,如通過它的車身風格,車門數量,開放式或封閉式車頂,座椅數量等等。在這個特殊問題中,我們必須將車輛圖像分類為不同的類別。這些類包括品牌,型號,年份,例如2012款特斯拉Model S等等。為了開發這個模型,使用了斯坦福的汽車數據集(http://ai.stanford.edu/~jkrause/cars/car_dataset.html),其中包含19618類汽車的16185張圖像。
使用預訓練的VGG16,VGG19和InceptionV3模型訓練模型。VGG網路的特點在於其結構簡單,僅使用3×3卷積層堆疊起來以增加深度。16和19代表網路中的weight layers。
由於數據集很小,最簡單的模型,即VGG16,是最準確的。使用交叉驗證法訓練VGG16網路的準確率達到66.11%。由於偏差/方差問題,像InceptionV3這樣的更複雜的模型可能並不會太準確。
面部識別和再生
面部識別和再生(Facial Recognition and Regeneration)在深度學習社區中風靡一時。越來越多的技術和模型在以驚人的速度發展,以實現面部識別。它的應用涵蓋了多個方面,如手機解鎖,人群檢測,面部表情分析等。
另一方面,面部再生是從面部的特寫圖像生成3D面部建模。僅僅從二維信息創建3D結構化對象是業界另一個需要思考的問題。面部再生的應用在電影和遊戲行業中是巨大的。各種CGI模型的自動化,可以節省大量的時間和金錢。
本文的這一部分涉及這兩個領域的預訓練模型。
VGG-Face模型(https://gist.github.com/EncodeTS/6bbe8cb8bebad7a672f0d872561782d9)

從頭開始創建面部識別模型是一項艱巨的任務。你需要尋找、收集,然後注釋大量的圖像才有希望建立一個像樣的模型。因此,在該領域中使用預訓練模型非常有意義。
VGG-Face(http://www.robots.ox.ac.uk/~vgg/data/vgg_face/)是一個包含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是谷歌最新的語義圖像分割模型。它最初是使用TensorFlow創建的,現在已經可以使用Keras實現。這個GitHub存儲庫還包含如何獲取標籤的代碼,以及如何使用這個帶有自定義類的預訓練模型。當然也有如何訓練自己的模型的指引。
機器人手術分割(Robot Surgery Segmentation)
(https://github.com/ternaus/robot-surgery-segmentation)

該模型試圖解決機器人輔助手術場景中手術器械的圖像分割問題。問題進一步分為兩部分,如下:
- 二進位分割:圖像中的每個像素都標記出是工具還是背景
- 多級分割:不同的工具或工具的不同部分與背景區分開來
這種預訓練模型基於U-Net網路架構設計,並通過使用被稱為LinkNet和TernausNet的最新語義分割神經網路進一步改進。該模型在8×225幀高解析度立體相機圖像序列上進行了訓練。
其它
圖像描述
(https://github.com/boluoyu/ImageCaption)

還記得那些曾經玩過的根據圖片生成文字的遊戲么?那些就是基本的圖像描述。它結合了NLP技術和Computer Vision技術來生成字幕。 這項任務長期以來一直是一項具有挑戰性的任務,因為它需要具有無偏圖像與場景的大型數據集。而且在滿足上述所有約束後,還需要針對性的圖像推理演算法。
現在很多企業已經在使用這種技術了,那麼我們怎樣才能更方便的去研究這項技術呢?其實他的核心在於將給定的輸入圖像轉換為簡短且有意義的描述,而且編碼器-解碼器框架廣泛用於解決這項核心任務。圖像編碼器正是卷積神經網路(CNN)。
這是在MS COCO數據集(http://cocodataset.org/#download)上訓練的VGG 16預訓練模型,其中解碼器是預測給定圖像的字幕的長短期記憶(LSTM)網路。
總結
深度學習是一個難以適應的棘手領域,它對硬體的算力有很高的要求,這也是會有這麼多的預訓練模型的原因。希望上面列出來的一些預訓練模型可以幫到大家。
最後,對深度學習感興趣,熱愛Tensorflow的小夥伴,歡迎關注我們的網站!http://www.tensorflownews.com。我們的公眾號:磐創AI。
推薦閱讀:
※Yolo-v3
※CVPR 2018 Best Paper Taskonomy 作者解讀
※【論文筆記】SID
※CVaaS計算機視覺即服務 ——從演算法,應用到服務的技術演變
※熱血一夏,圖森、AWS和將門聯合主辦的「首屆AI極客訓練營」開始報名啦!
TAG:計算機視覺 | 機器學習 | 深度學習DeepLearning |
