目前,深度學(xué)習(xí)幾乎成了計算機視覺領(lǐng)域的標(biāo)配,也是當(dāng)下人工智能領(lǐng)域最熱門的研究方向。計算機視覺的應(yīng)用場景和深度學(xué)習(xí)背后的技術(shù)原理是什么呢?下面讓我們來一探究竟。
計算機視覺的應(yīng)用
什么是計算機視覺呢?形象地說,計算機視覺就是給計算機裝上眼睛(照相機)和大腦(算法),讓計算機可以感知周圍的環(huán)境。目前計算機視覺研究主要集中在基礎(chǔ)應(yīng)用場景,像圖片分類、物體識別、人臉的3D建模等。
識別物體是圖片分類的一個比較常見的應(yīng)用,例如一個簡單的貓咪識別模型,我們首先要給計算機定義模型,然后準(zhǔn)備大量貓咪的照片去訓(xùn)練這個模型,讓計算機能識別出來,輸一張圖片的時候能識別出圖片是不是貓咪。正常情況下計算機模型能識別得比較準(zhǔn)確,但是當(dāng)我們輸入了一些有遮擋、形態(tài)多變或者角度、光照不一的圖片時,之前我們建立的模型就識別不出來。這就是計算機視覺在應(yīng)用中存在的難點問題。
深度學(xué)習(xí)背后的技術(shù)原理
在計算機視覺領(lǐng)域中是怎么運用深度學(xué)習(xí)來解決問題的呢?深度學(xué)習(xí)作為機器學(xué)習(xí)的一種,這里先簡單介紹下機器學(xué)習(xí)。
機器學(xué)習(xí)的本質(zhì)其實是為了找到一個函數(shù),讓這個函數(shù)在不同的領(lǐng)域會發(fā)揮不同的作用。像語音識別領(lǐng)域,這個函數(shù)會把一段語音識別成一段文字;圖像識別的領(lǐng)域,這個函數(shù)會把一個圖像映射到一個分類;下圍棋的時候根據(jù)棋局和規(guī)則進行博弈;對話,是根據(jù)當(dāng)前的對話生成下一段對話。
機器學(xué)習(xí)離不開學(xué)習(xí)兩個字,根據(jù)不同的學(xué)習(xí)方式,可以分為監(jiān)督學(xué)習(xí)和非監(jiān)督學(xué)習(xí)兩種方式。
監(jiān)督學(xué)習(xí)中,算法和數(shù)據(jù)是模型的核心所在。在監(jiān)督學(xué)習(xí)中最關(guān)鍵的一點是,我們對訓(xùn)練的每個數(shù)據(jù)都要打上標(biāo)簽,然后通過把這些訓(xùn)練數(shù)據(jù)輸入到算法模型經(jīng)過反復(fù)訓(xùn)練以后,每經(jīng)過一次訓(xùn)練都會減少算法模型的預(yù)計輸出和標(biāo)簽數(shù)據(jù)的差距。通過大量的訓(xùn)練,算法模型基本上穩(wěn)定下來以后,我們就可以把這個模型在測試數(shù)據(jù)集上驗證模型的準(zhǔn)確性。這就是整個監(jiān)督學(xué)習(xí)的過程,監(jiān)督學(xué)習(xí)目前在圖片分類上應(yīng)用得比較多。
再來看非監(jiān)督學(xué)習(xí)。跟監(jiān)督學(xué)習(xí)不同的地方是,非監(jiān)督學(xué)習(xí)不需要為所有的訓(xùn)練數(shù)據(jù)都打上標(biāo)簽。非監(jiān)督學(xué)習(xí)主要應(yīng)用在兩個大類,第一類是做聚類分析,聚類分析是把一組看似無序的數(shù)據(jù)進行分類分組,以達到能夠更加更好理解的目的;另外是做自動編碼器,在數(shù)據(jù)分析的時候,原始數(shù)據(jù)量往往比較大,除了包含一些冗余的數(shù)據(jù),還會包含一些對分析結(jié)果不重要的數(shù)據(jù)。自動編碼器主要是對原始數(shù)據(jù)做降維操作,把冗余的數(shù)據(jù)去掉,提高后面數(shù)據(jù)分析的效率。通過不同的學(xué)習(xí)方式獲取到數(shù)據(jù)后,算法是接下來非常重要的一環(huán)。算法之于計算機就像大腦對于我們?nèi)祟?,選擇一個好的算法也是特別重要的。
上面是ImaegNet競賽的結(jié)果,2012年以前圖片分類采用的機器學(xué)習(xí)的模型是特征+支持向量機的模型,2012年以后是卷積神經(jīng)網(wǎng)絡(luò)的模型,卷積神經(jīng)網(wǎng)絡(luò)在計算機視覺領(lǐng)域發(fā)揮著至關(guān)重要的作用。為什么2014年以后卷積神經(jīng)網(wǎng)絡(luò)才發(fā)揮它的作用呢?我們先來看看神經(jīng)網(wǎng)絡(luò)。
神經(jīng)網(wǎng)絡(luò)
神經(jīng)網(wǎng)絡(luò)是受人腦神經(jīng)元結(jié)構(gòu)的啟發(fā),研究者認為人腦所有的神經(jīng)元都是分層的,可以通過不同的層次學(xué)習(xí)不一樣的特征,由簡單到復(fù)雜地模擬出各種特征。
上圖是計算機應(yīng)用數(shù)學(xué)的方式來模擬人腦中神經(jīng)元的示意圖。a1到ak是信號的輸入,神經(jīng)元會對輸入信號進行兩次變換。第一部分是線性變換,因為神經(jīng)元會對自己感興趣的信號加一個權(quán)重;第二部分是非線性變換。
神經(jīng)網(wǎng)絡(luò)就是由許多的神經(jīng)元級聯(lián)而形成的,每一個神經(jīng)元都經(jīng)過線性變換和非線性變換,為什么會有非線性變換?從數(shù)學(xué)上看,沒有非線性變換,不管你神經(jīng)網(wǎng)絡(luò)層次有多深都等價于一個神經(jīng)元。如果沒有非線性變換,神經(jīng)網(wǎng)絡(luò)深度的概念就沒有什么意義了。
這是大家知道的神經(jīng)元網(wǎng)絡(luò)整體的模型,我們具體怎么來訓(xùn)練神經(jīng)網(wǎng)絡(luò)呢?
第一步,定義一個網(wǎng)絡(luò)模型,初始化所有神經(jīng)網(wǎng)絡(luò)的權(quán)重和偏置。定義好網(wǎng)絡(luò)模型以后再定義好這個模型的代價函數(shù),代價函數(shù)就是我們的預(yù)測數(shù)據(jù)和標(biāo)簽數(shù)據(jù)的差距,這個差距越小,說明模型訓(xùn)練得越成功。第一次訓(xùn)練的時候會初始化所有神經(jīng)元的參數(shù)。輸入所有訓(xùn)練數(shù)據(jù)以后,通過當(dāng)前的模型計算出所有的預(yù)測值,計算預(yù)測值以后和標(biāo)簽數(shù)據(jù)比較,看一下預(yù)測值和實際值有多大的差距。
第二步,不斷優(yōu)化差距,使差距越來越小。神經(jīng)網(wǎng)絡(luò)根據(jù)導(dǎo)數(shù)的原理發(fā)明了反向傳播和梯度下降算法,通過N次訓(xùn)練后,標(biāo)簽數(shù)據(jù)與預(yù)測值之間的差距就會越來越小,直到趨于一個極致。這樣的話,所有神經(jīng)元的權(quán)重、偏置這些參數(shù)都訓(xùn)練完成了,我們的模型就確定下來了。接下來就可以在測試集上用測試數(shù)據(jù)來驗證模型的準(zhǔn)確率。
卷積神經(jīng)網(wǎng)絡(luò)
以上所講的都是一般的全連接神經(jīng)網(wǎng)絡(luò),接下來進入卷積神經(jīng)網(wǎng)絡(luò)。卷積神經(jīng)網(wǎng)絡(luò)是專門針對圖片處理方面的神經(jīng)網(wǎng)絡(luò)。卷積神經(jīng)網(wǎng)絡(luò)首先會輸入一張圖片,這張圖片是30×30,有三個顏色通道的數(shù)據(jù),這是輸入層。下面是卷積層,有一個卷積核的概念,每一個卷積核提取圖片的不同特征。
提取出來以后到池化層,就是把卷積層的數(shù)據(jù)規(guī)??s小,減少數(shù)據(jù)的復(fù)雜度。卷積和池化連起來我們叫做一個隱層,一個卷積神經(jīng)網(wǎng)絡(luò)會包含很多個隱層,隱層之后是全連接層,全連接層的目的是把前面經(jīng)過多個卷積池化層的特征把數(shù)據(jù)平鋪開,形成特征向量,我們把特征向量輸入到分類器,對圖片進行分類。
簡單來說,卷積神經(jīng)網(wǎng)絡(luò)更適合計算機視覺主要有兩個原因,一是參數(shù)共享,另外一個是稀疏連接。
基于深度學(xué)習(xí)的人臉識別算法模型
以上是深度學(xué)習(xí)在計算機視覺領(lǐng)域的相關(guān)應(yīng)用以及它背后的技術(shù)原理,接下來看看基于深度學(xué)習(xí)的人臉識別算法模型。先看一下人臉識別的應(yīng)用場景,主要分三個方面:一是1:1的場景,如過安檢的時身份證和人臉比對、證券開戶;二是1:N的場景,比如說公安部要在大量的視頻中檢索犯罪嫌疑人;三是大數(shù)據(jù)分析場景,主要是表情分類,還有醫(yī)學(xué)的分析等。
上圖主要是人臉識別簡單的流程,右邊的是訓(xùn)練模型,有人臉的大數(shù)據(jù)庫,經(jīng)過Gabor、LBP等經(jīng)驗描述子,或深度學(xué)習(xí)算法提取特征模型,這個模型部署在應(yīng)用上,應(yīng)用通過攝像頭、視頻獲取到人臉以后做預(yù)處理,進行特征提取,特征比對,最后輸出結(jié)果,這是比較通用的人臉識別的流程。
DeepID算法
DeepID算法的目的是識別兩張圖片,最后的輸出是兩張圖片的相似度。輸入圖片A和圖片B,經(jīng)過DeepID卷積神經(jīng)網(wǎng)絡(luò)模型會計算出向量A和向量B,合并成向量AB。然后將向量AB輸入分類器,算出向量AB的相似度,最后以這個相似度區(qū)分這兩個圖片是不是同一類。
這里要提到的兩個模型,一是DeepID的模型,二是分類器的模型。DeepID模型是用卷積神經(jīng)網(wǎng)絡(luò)算法訓(xùn)練的,最后的應(yīng)用是把卷積神經(jīng)網(wǎng)絡(luò)后面的softmax分類層去掉,得到softmax前面的特征向量;分類器模型是比較經(jīng)典的如支持向量機/聯(lián)合貝葉斯分類。訓(xùn)練過程中,把訓(xùn)練樣本分成五份,四份用來訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò),一份用來訓(xùn)練分類器,可以相互印證。
DeepID除了在網(wǎng)絡(luò)模型上做的工作,還會對圖片做預(yù)處理。像Patch的處理,按照圖片以人臉的某一個部位為中心生成固定大小的圖片,然后對每一個特定的Patch訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)。一張圖片輸入后,切分成多個patch,分別輸入到對應(yīng)的卷積神經(jīng)網(wǎng)絡(luò)。每一個卷積神經(jīng)網(wǎng)絡(luò)輸出一個向量,通過降維的算法,把所有patch對應(yīng)的輸出向量進行處理,去除冗余信息,得到人臉的向量表示。
最后在比較兩張人臉時,就是分別將兩張人臉的這個向量輸入分類器得到相似度結(jié)果的。這里多patch切分有一個優(yōu)勢,比如在現(xiàn)實應(yīng)用中有一些人的臉部是被遮擋的,由于它是分為不同的patch,這樣的場景下魯棒性會比較好。
DeepFace算法
再來看DeepFace算法。這是人臉對齊的流程,這張圖是史泰龍的側(cè)臉圖片,第一步是把人臉截取出來,對人臉上面68個基本點,描述出基本點以后,用三角剖分的算法把68個基本點連起來,然后將標(biāo)準(zhǔn)的人臉模型運用到三角剖分上,這樣標(biāo)準(zhǔn)的人臉模型就具備了這樣的深度。
經(jīng)過仿射變形后,將側(cè)臉模型轉(zhuǎn)成正臉模型,最后把這個模型應(yīng)用到具體的圖片上,就得到了人的正臉圖片。這個算法的主要作用是通過一些模型將人物的側(cè)臉轉(zhuǎn)成正臉,以便做進一步的人臉識別/人臉分類 。
DeepFace神經(jīng)網(wǎng)絡(luò)如圖所示,前面三個卷積層比較普通,是用來提取臉部的一些基本特征;后面三個卷積層有一些改進,用的是參數(shù)不共享的卷積核,我們提到卷積核的基本特征有一個是參數(shù)是共享的,因為研究認為圖片中不同的部位一些基本特征是相似的。
但在這個算法中,經(jīng)過人臉對齊之后,它的不同的區(qū)域會有不同的基本特征,所以這里運用了參數(shù)不共享的卷積核。參數(shù)不共享,就不會發(fā)揮出卷積核參數(shù)少的優(yōu)勢,這樣可能增加訓(xùn)練的復(fù)雜度。
FaceNet算法
FaceNet算法是谷歌人臉識別的一種算法,F(xiàn)aceNet算法提出三元組的概念:三張圖片放在一起,兩張圖片是同一個人的,一張圖片不是同一個人的。如果一個三元組中,同一個人的圖片的距離要大于不同人之間的距離,那么經(jīng)過學(xué)習(xí)以后,這個三元組中同一個人的圖片之間的距離,會小于不同人的圖片之間的距離。它不用做分類,直接計算出兩張圖片之間的距離。
其他算法
其他算法如FR+FCN,通過神經(jīng)網(wǎng)絡(luò)去訓(xùn)練,當(dāng)你得到一個人側(cè)臉照的時候,可以通過神經(jīng)網(wǎng)絡(luò)生成正面照;Face+baidu是傳統(tǒng)的卷積網(wǎng)絡(luò),建立在大數(shù)據(jù)的基礎(chǔ)上,訓(xùn)練了數(shù)百萬張人臉。
Pose+Shape+expression augmentation,這篇論文是通過三個變量擴充數(shù)據(jù)集,讓數(shù)據(jù)搜集工作變得容易;CNN-3DMM,它在標(biāo)準(zhǔn)的3D人臉模型基礎(chǔ)上,訓(xùn)練一個神經(jīng)網(wǎng)絡(luò),來給標(biāo)準(zhǔn)3D模型生成不同的參數(shù),這個神經(jīng)網(wǎng)絡(luò)會根據(jù)不同的圖片生成不同的參數(shù),給個體建立不一樣的3D模型。
基于DeepID算法的人臉?biāo)阉黜椖?/p>
最后介紹一下我們曾做過的一個人臉識別模型的項目?;顒訑z影承接商需要把一些會場活動、體育賽事等活動照片拍攝下來以后上傳到他們的網(wǎng)站上,因為圖片有幾百上千張,活動參與者很難找到自己的圖片。如果用人臉識別的模型,就可以把自己的臉部拍下來上傳,在圖片集中快速找到自己的照片。
我們看一下它整體的架構(gòu)。右邊是人臉庫的導(dǎo)入,活動攝影承接商獎會場拍攝的一千張照片導(dǎo)入搜索目標(biāo)庫。導(dǎo)入以后做多patch預(yù)處理,運用DeepID的算法,計算每張圖片各patch的特征向量,放到特征向量庫里,建立一個從特征向量到原始圖片的索引。
左邊的部分是用戶搜索,拍攝了自己的頭像后,把它上傳上來進行搜索,后臺同樣先對用戶頭像做多patch切分,通過DeepID模型計算出用戶頭像的特征向量,然后在特征向量庫中逐步比對目標(biāo)特征向量,將相似度最高的N個特征向量檢索出來,最后通過索引查到原始圖片,返回給用戶。
以上是深度學(xué)習(xí)背后的技術(shù)原理以及它在計算機視覺領(lǐng)域常見的應(yīng)用,希望通過對這些原理的解析及應(yīng)用的分享,讓大家更加直觀快速地了解人工智能技術(shù)層面的基礎(chǔ)概念,并且對人工智能技術(shù)的學(xué)習(xí)和運用有所啟發(fā)。
-
計算機視覺
+關(guān)注
關(guān)注
8文章
1698瀏覽量
45974 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5500瀏覽量
121111
原文標(biāo)題:淺談深度學(xué)習(xí)的技術(shù)原理及其在計算機視覺的應(yīng)用
文章出處:【微信號:WW_CGQJS,微信公眾號:傳感器技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論