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