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