0
本文為 AI 研習社編譯的技術博客,原標題 :
Learning computer vision
作者 | Romain Beaumont
翻譯 | 黃偉聰、chesc
校對 | 醬番梨 整理 | 菠蘿妹
原文鏈接:
https://towardsdatascience.com/learning-computer-vision-41398ad9941f
最近,我已經(jīng)閱讀了很多與計算機視覺相關的資料并做了大量實驗,這里介紹了在該領域學習和使用過程中有意思的內容。
自動駕駛的圖像分割
近年來,計算機視覺取得了很大進展。這些是我將在這里提到的主題:
技術:
人臉檢測:Haar,HOG,MTCNN,Mobilenet
人臉識別:CNN,F(xiàn)acenet
目標識別:alexnet,inceptionnet,resnet
遷移學習:在一個新場景上用很少的資源重新訓練大型神經(jīng)網(wǎng)絡
圖像分割:rcnn
生成式對抗網(wǎng)絡
計算機視覺所需硬件:選擇什么,關鍵是GPU
集成視覺的UI應用程序:ownphotos
應用:
個人圖片整理
自動駕駛汽車
自動無人機
驗證碼識別/OCR
過濾網(wǎng)站/應用程序上的圖片
自動標記應用程序的圖片
從視頻(電視節(jié)目,電影)中提取信息
視覺問答
藝術
關注的人:
重要的深度學習創(chuàng)始人:andrew ng,yann lecun,bengio yoshua,hinton joffrey
adam geitgey 主頁 有很多計算機視覺方面的有趣文章,比如 鏈接 有完整的人臉檢測/對齊/識別流程
課程:
coursera 網(wǎng)站里的 deep learning 課程
coursera 網(wǎng)站里的 machine learning 課程
相關領域:
深度強化學習:把包含CNN的PPO和DPN看作輸入層
與自然語言處理的交互:lstm 2 cnn
人臉檢測是在臉部周圍標記方框
人臉檢測是檢測臉部的任務。有好幾種算法可以做到這一點。
https://github.com/nodefluxio/face-detector-benchmark 提供了這些方法在速度上的基準,并且易于重用實現(xiàn)代碼。
Haar分類器
這些是自2000年以來在opencv中出現(xiàn)的舊的計算機視覺方法。在這篇論文:http://wearables.cc.gatech.edu/paper_of_week/viola01rapid.pdf 中做了介紹。
這是一種機器學習模型,專門用于目標檢測的特征提取。Haar分類器速度快但準確度低。
請參閱:https://docs.opencv.org/3.4.3/d7/d8b/tutorial_py_face_detection.html 中有關于如何使用它的更詳細解釋和示例。
HOG:方向梯度直方圖
HOG是一種用于目標檢測的提取特征的新方法:它自2005年開始使用。該方法基于計算圖像像素的梯度。然后將這些特征饋送到機器學習算法,例如SVM。這種方法具有比Haar分類器更好的精度。
這種方法的實現(xiàn)在dlib中,就是在face_recognition ( https://github.com/ageitgey/face_recognition ) lib中。
MTCNN
一種使用CNNs的變量來檢測圖像的新方法。精度更高但速度稍慢。請參閱:https://kpzhang93.github.io/MTCNN_face_detection_alignment/index.html
MobileNet
目前用于人臉檢測的最好和最快的方法,基于通用的mobile net架構。請參閱:https://arxiv.org/abs/1704.04861
目標檢測可以使用與人臉檢測類似的方法來實現(xiàn)
這里有2篇文章介紹了實現(xiàn)它的最新方法。這些方法有時甚至也提供了目標的類別(實現(xiàn)目標識別):
https://towardsdatascience.com/review-r-fcn-positive-sensitive-score-maps-object-detection-91cd2389345c r-fcn
https://towardsdatascience.com/r-cnn-fast-r-cnn-faster-r-cnn-yolo-object-detection-algorithms-36d53571365e a comparison of r-cnn, fast r-cnn, faster r-cnn and yolo
最近深度學習的迅速發(fā)展,可以看到許多新架構取得了很大成功。
使用許多卷積層的神經(jīng)網(wǎng)絡就是其中之一。一個卷積層利用圖像的2D結構在神經(jīng)網(wǎng)絡的下一層中生成有用信息。
有關什么是卷積的詳細說明,請參閱: https://towardsdatascience.com/intuitively-understanding-convolutions-for-deep-learning-1f6f42faee1
目標識別是將物體分類為特定類別(如貓,狗,......)的一般性問題。
基于卷積的深度神經(jīng)網(wǎng)絡在目標識別任務上取得了很好的效果。
ILSVR會議一直在ImageNet(http://www.image-net.org/ 一個有許多圖片的數(shù)據(jù)集,包括貓,狗等物品標簽)上舉辦競賽。
越成功的神經(jīng)網(wǎng)絡使用的層數(shù)會越來越多。
ResNet架構是迄今為止對目標進行分類的最好網(wǎng)絡架構。
要正確地訓練ResNet,需要使用數(shù)百萬張圖像,并且即使使用數(shù)十個昂貴的GPU,也需要花費大量時間。
為了避免每次都要在這些大數(shù)據(jù)集上進行重新訓練,找到一些其他代替方法是十分重要的,而遷移學習和嵌入embeddings就是這樣的方法。
有關resnet的預訓練模型,請訪問: https://github.com/tensorflow/tensor2tensor#image-classification
人臉識別就是要弄清楚誰是一張臉。
歷史方法
解決該任務的歷史方法是將特征工程應用于標準機器學習(例如svm),或把深度學習方法應用于目標識別。
這些方法的問題是它們需要每個人的大量數(shù)據(jù)。實際上,數(shù)據(jù)并不總是可以得到的。
Facenet
谷歌研究人員在2015年推出了Facenet https://arxiv.org/abs/1503.03832.它提出了一種識別人臉的方法,而不需要為每個人提供大量的人臉樣本。
這種方法是通過拍攝大量臉部的圖片數(shù)據(jù)集(例如 http://vis-www.cs.umass.edu/lfw/ )來有效工作的。
然后采用現(xiàn)有的計算機視覺架構,例如inception(或resnet),再用計算臉部的嵌入層替換目標識別神經(jīng)網(wǎng)絡的最后一層。
對于數(shù)據(jù)集中的每個人,(使用啟發(fā)式方法)選擇三張臉(負樣本,正樣本,第二正樣本)并將其饋送到神經(jīng)網(wǎng)絡。這產(chǎn)生了3個嵌入embeddings。利用這3個嵌入,計算triplet loss,這使得正樣本與任何其他正樣本之間的距離最小化,并且最大化位置樣本與任何其他負樣本之間的距離。
最終結果是每張臉(即使在原始訓練集中不存在的臉)現(xiàn)在也可以表示為一個嵌入embedding(128維的向量),該嵌入與其他人的臉部嵌入有很大距離。
然后,這些嵌入可以與任何機器學習模型(甚至簡單的諸如knn)一起使用來識別人。
關于facenet和face embeddings非常有趣的事情就是使用它你可以識別只有幾張照片或者只有一張照片的人。
請參閱實現(xiàn)它的lib: https://github.com/ageitgey/face_recognition
這是它的一個tensorflow實現(xiàn): https://github.com/davidsandberg/facenet
這是人臉識別流程背后的思想的一個很酷的應用,就是識別熊臉:https://hypraptive.github.io/2017/01/21/facenet-for-bears.html
在自定義數(shù)據(jù)集上快速重新訓練準確的神經(jīng)網(wǎng)絡
訓練非常深的神經(jīng)網(wǎng)絡(如resnet)是非常耗費資源的,并且還需要大量的數(shù)據(jù)。
計算機視覺是高度計算密集型的(在多個gpu上進行數(shù)周的訓練)并且需要大量數(shù)據(jù)。為了解決這個問題,我們已經(jīng)討論過為人臉計算出通用的嵌入embeddings。另一種方法是采用現(xiàn)有網(wǎng)絡并在其他數(shù)據(jù)集上重新訓練,訓練時僅僅訓練其中的幾層。
這是一個教程: codelab tutorial 。它建議你重新訓練一個初始模型,從而去訓練未知的花類。
在進行遷移學習時,該選擇哪一層來重新訓練,以下地址提供了很好的指導:https://medium.com/@14prakash/transfer-learning-using-keras-d804b2e04ef8
用于自動駕駛的圖像分割
近年來,圖像分割可能是一項令人印象深刻的新任務。它包括識別圖像的每個像素。
該任務與目標檢測有關。實現(xiàn)它的其中一種算法是mask r-cnn,有關詳細信息,請參閱此文章: https://medium.com/@jonathan_hui/image-segmentation-with-mask-r-cnn-ebe6d793272
生成式對抗網(wǎng)絡,是由ian goodfellow提出,這個網(wǎng)絡架構分為2部分:判別器和生成器。
判別器檢測一張圖片是否屬于某個類別,它通常是在目標分類數(shù)據(jù)集上進行預訓練。
生成器為給定的類別生成一張圖像。
在學習期間調整生成器的權重,目標是使生成的圖像與該類的真實圖像盡可能相似,以至于判別器無法區(qū)分出來。
以下是最大的GAN(https://arxiv.org/abs/1809.11096)生成的圖像示例。
關于GAN在keras上的實現(xiàn),請參閱: https://github.com/eriklindernoren/Keras-GAN
要訓練大型模型,需要用到大量資源。實現(xiàn)這一目標有兩種方法。首先是使用云服務,比如google cloud或者aws。第二種方法是自己組裝一臺帶有GPU的計算機。
只需1000美元,就可以組裝一臺相當好的機器來訓練深度學習模型。
更多細節(jié)請參閱: https://hypraptive.github.io/2017/02/13/dl-computer-build.html
ownphotos的face儀表盤
Ownphotos 是一個令人驚嘆的用戶界面,允許您導入照片并自動計算臉部嵌入,進行目標識別和人臉識別。
它用到的算法:
人臉識別:face_recognition
目標檢測:densecap, places365
計算機視覺有很多應用:
個人圖片整理
自動駕駛汽車
自動無人機
驗證碼識別/OCR
過濾網(wǎng)站/應用程序上的圖片
自動標記應用程序的圖片
從視頻(電視節(jié)目,電影)中提取信息
視覺問答:結合自然語言處理和計算機視覺
藝術:生成式對抗網(wǎng)絡
正如我們這里所見,上述視覺領域各方面的實現(xiàn)中誕生了許多新的有趣的方法和應用。
我認為人工智能最有趣的,在各領域尤其在視覺領域中,是學習可再使用的算法。讓這些方法適用于處理越來越多的任務而不需要更多算力資源和數(shù)據(jù) :
遷移學習 : 使快速重新訓練預處理了的大型神經(jīng)網(wǎng)絡成為可能
嵌入 (例如facenet) : 使識別許多類而無需對這些類進行訓練成為可能
想要繼續(xù)查看該篇文章相關鏈接和參考文獻?
長按鏈接點擊打開或點擊底部【一文帶你讀懂計算機視覺】:
https://ai.yanxishe.com/page/TextTranslation/1286
AI研習社每日更新精彩內容,觀看更多精彩內容:雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)
深度網(wǎng)絡揭秘之深度網(wǎng)絡背后的數(shù)學
等你來譯:
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權禁止轉載。詳情見轉載須知。