AI人工智能技術是通過怎樣的方式實現人臉識別和圖片識別的?

aliangcn


用通俗的話總的來說,就是利用大數據抽取規律,再利用規律去預測(迴歸)、分類、聚類未知的輸入,得到輸出(結果)。

單說圖片識別:

這裡面的大數據就是已知的輸入(圖片)和已知的結果(圖片的標籤),抽取規律也就是相應的算法(卷及神經網絡),預測、分類、聚類就是得到圖片的結果(圖片識別)。

可以分為以下幾步:

第一步:數據的預處理。

圖片是由一個一個的像素組成的,就拿入門的案例說吧,MNIST數據集,是一個手寫數字的數據集,每一張圖片都是由28×28個像素點形成的。

就像這樣:

總共有60000張這樣的圖片,而圖片的標籤(也就是結果)也是已知的(0~9),那麼設輸入為x輸出為y,

計算機是無法讀懂圖片的,所以我們要將圖片轉換成計算機所能認識的東東。

矩陣:

x就是一個28×28的矩陣每一個點表示圖片中相應位置的灰度。有的神經網絡為了更簡化的計算,將28×28 的矩陣,轉換為一個1×784的向量(一維矩陣)。這裡的x是28×28×1,這個1表示的是單通道,也就是隻有一種顏色。如果是彩色圖片的話,那麼就應該是28×28×3,這個3表示的是RGB三個顏色通道。

y就是一個數字,0~9。

有些算法還會降x,y進行歸一化,也就是轉換為0~1之間的矩陣、數字。

第二步:抽取特徵。

卷積(特徵提取)的具體計算方法:

其中input為輸入,filter叫做卷積核(暫且理解為濾波器),output叫做特徵圖,特徵圖的個數和filter的個數是相同的(filter W0、filter W1)。既然是矩陣,那麼可以設中間的參數是W,於是就有Wx+b = output。這裡的W是我們最終要訓練出來的。

計算方法:

w0與x藍色區域做內積(對應位置相乘後相加):

f1第1層 = 0×1+ 0×1+ 0×1 + 0×-1+ 1×-1+ 1×0 + 0×-1+1×1+1×0 = 0

f1第2層 = 0×-1+0×-1+0×1 +0×-1+0×1+1×0 +0×-1+2×1+2×0 = 2

f1第3層 = 0×1+0×0+0×-1+ 0×0+2×0+2×0+ 0×1+0×-1+0×-1+ = 0

那麼根據神經網絡得分函數:f(x,w) = wx+b

這裡的b =1

那麼輸出的得分值就為f1+f2+f3+b = 0+2+0+1 =3

最右邊綠色的矩陣第1行,第1列,就是3

將卷積核在輸入矩陣滑動,

同理可以計算

這裡的輸出叫做特徵圖。

這裡就可以看出,經過卷積核Filter(濾波器),將圖片濃縮了,濃縮之後,再進行一次非線性的處理,用一些非線性的函數將線性結果非線性化(叫做激活函數),這層叫作卷積層。

這裡只是一層,大型數據集(輸入很多的情況)一層是不夠的,需要很多層,輸入-卷積-輸出-卷積-輸出........。

比如VGG-16,就有16個卷積層。

進一步濃縮叫做池化層。

同樣有一個filter,將特徵圖進行MAX(取最大值)或者MEAN(取均值),進一步濃縮特徵。

濃縮完特徵之後,接著後面的層叫做全連接層。

就是將權重參數W(矩陣),分別乘以池化完成的結果,得到最終的分類結果比如前邊所說的0~9的手寫字體,要分10個類別,如果池化完成的結果是1×64,那麼全連接層就應該是64×10,最終得到1×10的矩陣,就是分類0~9的結果。

以上最重要的就是要求W,也就是最前邊說的,根據大數據找規律。

第三步:參數更新

那麼還有問題,W是多少誰知道?

沒人知道,這裡是根據計算機一步一步的試出來的,

先隨機的給出一組W,算出結果Y1,利用已知的x當做輸入,用已知的y與y1坐差值,那麼Y1-y就會有一個差值,就是預測值和真實值的差值。稱作損失函數,有些叫做代價函數。當代價函數最小的時候,預測值Y1和真實值y的差距越來越小,當差距在我們可以接受的範圍內,那麼就可以認為,由權重參數W生成的Y1可以對輸入x進行預測和分類。

那麼如何讓損失函數最小呢?這裡並不是求導後求極值點,而是對損失函數求導數,調整W,使得差值沿著導數的方向前進,最終達到極小值點。

這時候得到的W就是我們最終要的結果了。

第四步:利用參數

既然得到了W,我們就可以利用這個W,將一個未知結果的x輸入,從而得到通過W計算出的y,這個y就是圖片識別的結果。

現在有很多的開源深度學習框架,是各大著名公司封裝好的函數(已經造好的輪子),

以下是一個卷積神經網絡識別MNIST的小例子(基於google深度學習框架TensorFlow):

只是經過了21次的參數更新,最終的識別準確率在99%以上。

輸出結果:

Extracting MNIST_data/train-images-idx3-ubyte.gz

Extracting MNIST_data/train-labels-idx1-ubyte.gz

Extracting MNIST_data/t10k-images-idx3-ubyte.gz

Extracting MNIST_data/t10k-labels-idx1-ubyte.gz

第0次迭代,測試集準確率是0.7688

第1次迭代,測試集準確率是0.7831

第2次迭代,測試集準確率是0.8829

第3次迭代,測試集準確率是0.8883

第4次迭代,測試集準確率是0.889

第5次迭代,測試集準確率是0.8919

第6次迭代,測試集準確率是0.8908

第7次迭代,測試集準確率是0.893

第8次迭代,測試集準確率是0.894

第9次迭代,測試集準確率是0.8949

第10次迭代,測試集準確率是0.8927

第11次迭代,測試集準確率是0.8935

第12次迭代,測試集準確率是0.8948

第13次迭代,測試集準確率是0.9873

第14次迭代,測試集準確率是0.9881

第15次迭代,測試集準確率是0.9864

第16次迭代,測試集準確率是0.9885

第17次迭代,測試集準確率是0.9906

第18次迭代,測試集準確率是0.9876

第19次迭代,測試集準確率是0.9884

第20次迭代,測試集準確率是0.9902


醫療兵皮特兒


圖像識別是人工智能的一個重要的研究課題,同時也是其他比如自動駕駛,圖片檢索,信用貸款,安防安檢等諸多應用的基礎。

首先我們來看圖像識別中的主要任務有哪些。面對一張圖片,我們可能發出的幾個基本問題:

  • 圖片中是否包含某種物體
  • 圖片中某種物體在什麼位置
  • 圖片中都有哪些物體
  • 圖片屬於什麼場景,或者描述了怎樣的場景

以上種種都是在圖像識別中可能的研究問題和方向,當然隨著科技的發展,更多複雜的、精細的圖像識別方面的問題在誕生。


接下來我們以圖像識別的發展進程引入,探究AI技術是怎樣處理圖像識別的問題,並逐步大放異彩的。

在視覺領域做圖像識別,物體識別的研究已經有幾十年歷史,但是直到幾年以前,有影響的圖像識別產品並不多,一個是OCR,一個是指紋,一個是人臉檢測。

圖像識別剛開始的時候是從單一的物體識別做起,並且識別的主要是簡單規則的幾何形狀物體。

對於這一類的圖像識別,早期曾經採用過幾何的方法、結構的方法、規則的方法,也用了一些比較簡單的模式識別的方法。

在80年代後期、90年代期間,機器學習有了一個飛速的發展,出現了一些了不起的研究成果,包括:支持向量機方法,AdaBoosting方法,計算學習理論等一些成果出現。這些成果使得機器學習和識別大大的往前走。人臉檢測是2001年的事,OCR和指紋是九十年代的事。從2001年、2002年開始有了更廣泛的圖像識別研究,研究人員開始思考是否存在統一的方法框架進行圖像識別,能否將機器學習領域的出色成果應用到圖像識別上。

著名華人女科學家李飛飛等提出使用“詞袋”(bag of words)方法用於圖像識別。

在識別圖像的時候,我們可以把圖像中的“高頻詞”放在一起來識別圖像。這裡的“詞”是什麼?直觀地說就是小的圖像塊。比如我們要識別一張人臉,這樣的圖像上就會有像皮膚一樣,或者像眼睛一樣的圖像塊。而相對來說,如果識別自行車,就會出現和車有關的圖像塊,如:車座、車梁。這些圖像塊就是“詞”。這樣就可以採用“詞袋”方法。實際上,圖像中的詞不是我們說的這麼直觀,而是下方這樣的圖像小塊。它是很底層的圖像塊,非常小,3*3,5*5或者7*7大小的圖像塊。這樣小的圖像塊不表達很抽象的語義。

這種方法提出後,有很多有意思的相關的論文發表。但是這種方法還有缺陷。在圖像識別領域有一個ImageNet物體識別比賽,給你一些圖像,讓你去設計和訓練你的算法。比賽的時候就是提供一些新的圖像,要求算法告訴哪張圖片是什麼類別。如果預測前5個類別中有標準答案,就算預測正確。否則預測錯誤。這個比賽在2010年的第一名的成績是72%,到2011年第一名的成績是74%。我們知道,全世界那麼多優秀的團隊,有那麼好的資源去做這個事,每年的進步大概就是1%-2%的樣子。

真正的突破是在2012年深度學習的引入。Hilton的團隊使用了深度學習進行ImageNet比賽,以大幅領先第二名的成績奪冠,其Top5錯誤率只要15.3%,使這一競賽有了質的飛躍,同時也促進了圖像識別和深度學習的發展。


從上面的發展進程中可以看到,AI或機器學習或深度學習技術主要是在進入21世紀之後在圖像識別上取得了巨大進步。各類理論和算法層出不窮,我們挑選部分里程碑式的工作進行說明。

詞袋模型

詞袋模型(Bag-of-Words)最初產生於自然語言處理領域,通過建模文檔中單詞出現的頻率來對文檔進行描述與表達。後來被引入計算機視覺領域, 由此開始大量的研究工作集中於詞包模型的研究,並逐漸形成了由下面四部分組成的標準目標分類框架:

  • 底層特徵提取

底層特徵是物體分類與檢測框架中的第一步,底層特徵提取方式有兩種:一種是基於興趣點檢測,另一種是採用密集提取的方式。

興趣點檢測算法通過某種準則選擇具有明確定義的、局部紋理特徵比較明顯的像素點、邊緣、角點、區塊等,並且通常能夠獲得一定的幾何不變性,從而可以在較小的開銷下得到更有意義的表達,最常用的興趣點檢測算子有 Harris 角點檢測子、FAST(Features from Accelerated Segment Test) 算子、LoG (Laplacian of Gaussian)、DoG (Difference ofGaussian)等。密集提取從圖像中按固定的步長、尺度提取出大量的局部特徵描述,大量的局部描述儘管具有更高的冗餘度,但信息更加豐富,後面再使用詞袋模型進行有效表達後通常可以得到比興趣點檢測 更 好 的 性 能 。 常 用 的 局 部 特 徵 包 括 SIFT(Scale-invariant feature transform,尺度不變特徵轉換)、HOG(Histogram of Oriented Gradient, 方向梯度直方圖) 、LBP(Local Binary Pattern, 局部二值模式) 等。

這裡要說明一點是,近年來得到廣泛關注的深度學習理論中一個重要的觀點是手工設計的底層特徵描述子作為視覺信息處理的第一步,往往會過早的丟失有用的信息,直接從圖像像素學習到任務相關的特徵描述是比手工特徵更為有效的手段。

  • 特徵編碼

底層特徵中可能包含了大量的冗餘與噪聲,為提高特徵表達的魯棒性,需要使用一種特徵變換算法對底層特徵進行編碼,從而獲得更具區分性、更加魯棒的特徵表達,這一步對物體識別的性能具有至關重要的作用

重要的特徵編碼算法包括向量量化編碼、核詞典編碼、稀疏編碼、局部線性約束編碼、顯著性編碼、Fisher 向量編碼、超向量編碼等。

  • 特徵匯聚

空間特徵匯聚是特徵編碼後進行的特徵集整合操作,通過對編碼後的特徵,每一維都取其最大值或者平均值,得到一個緊緻的特徵向量作為圖像的特徵表達。這一步得到的圖像表達可以獲得一定的特徵不變性,同時也避免了使用特徵集進行圖像表達的高額代價。最大值匯聚在絕大部分情況下的性能要優於平均值匯聚,也在物體分類中使用最為廣泛。由

  • 使用支持向量機等分類器進行分類

從圖像提取到特徵表達之後,一張圖像可以使用一個固定維度的向量進行描述,接下來就是學習一個分類器對圖像進行分類。這也是機器學習算法用武之地。各類機器學習的分類器應用到其中,常用的分類器有支持向量機K 近鄰

神經網絡隨機森林等。基於最大化邊界的支持向量機是使用最為廣泛的分類器之一,在圖像分類任務上性能很好,特別是使用了核方法的支持向量機。隨著物體分類研究的發展,使用的視覺單詞大小不斷增大,得到的圖像表達維度也不斷增加,達到了幾十萬的量級。這樣高的數據維度,相比幾萬量級的數據樣本,都與傳統的模式分類問題有了很大的不同。隨著處理的數據規模不斷增大,基於在線學習的線性分類器成為首選,得到了廣泛的關注與應用。

深度學習模型

深度學習模型近年來在圖像識別上也取得了良好效果,其基本思想是通過有監督或者無監督的方式學習層次化的特徵表達,來對物體進行從底層到高層的描述 。 主 流 的 深 度 學 習 模 型 包 括 自 動 編 碼 器(Auto-encoder)受限波爾茲曼機(Restricted Boltzmann Machine, RBM)深度信念網絡(Deep Belief Nets, DBN)卷積神經網絡(Convolutional Neural Netowrks, CNN)生物啟發式模型

等。

自動編碼器(Auto-encoder)是上世紀 80 年代提出的一種特殊的神經網絡結構,並且在數據降維、特徵提取等方面得到廣泛應用。自動編碼器由編碼器和解碼器組成,編碼器將數據輸入變換到隱藏層表達,解碼器則負責從隱藏層恢復原始輸入。隱藏層單元數目通常少於數據輸入維度,起著類似“瓶頸”的作用,保持數據中最重要的信息,從而實現數據降維與特徵編碼。自動編碼器是基於特徵重構的無監督特徵學習單元,加入不同的約束,可以 得 到 不 同 的 變 化 , 包 括 去 噪 自 動 編 碼 器(Denoising Autoencoders)稀疏自動編 碼器(Sparse Autoencoders)等,在數字手寫識別、圖像分類等任務上取得了非常好的結果。

受限玻爾茲曼機是一種無向二分圖模型,是一種典型的基於能量的模型(Enery-based Models,EBM)。之所以稱為“受限”,是指在可視層和隱藏層之間有連接,而在可視層內部和隱藏層內部不存在連接。受限玻爾茲曼機的這種特殊結構,使得它具有很好的條件獨立性,即給定隱藏層單元,可視層單元之間是獨立的,反之亦然。這個特性使得它可以實現同時對一層內的單元進行並行 Gibbs 採樣。受限玻爾茲曼機通常採用

對比散度(Contrastive Divergence,CD)算法進行模型學習。受限玻爾茲曼機作為一種無監督的單層特徵學習單元,類似於前面提到的特徵編碼算法,事實上加了稀疏約束的受限玻爾茲曼機可以學到類似稀疏編碼那樣的Gabor 濾波器模式。

深度信念網絡(DBN)是一種層次化的無向圖模型。DBN 的基本單元是 RBM(Restricted Boltzmann Machine),首先先以原始輸入為可視層,訓練一個單層的RBM,然後固定第一層 RBM 權重,以 RBM 隱藏層單元的響應作為新的可視層,訓練下一層的 RBM,以此類推。通過這種貪婪式的無監督訓練,可以使整個 DBN 模型得到一個比較好的初始值,然後可以加入標籤信息,通過產生式或者判別式方式,對整個網絡進行有監督的精調,進一步改善網絡性能。DBN 的多層結構,使得它能夠學習得到層次化的特徵表達,實現自動特徵抽象,而無監督預訓練過程則極大改善了深度神經網絡在數據量不夠時嚴重的局部極值問題。Hinton 等人通過這種方式,成功將其應用於手寫數字識別、語音識別、基於內容檢索等領域。

卷積神經網絡(CNN)最早出現在上世紀80 年代,最初應用於數字手寫識別,取得了一定的成功。然而,由於受硬件的約束,卷積神經網絡的高強度計算消耗使得它很難應用到實際尺寸的目標識別任務上。卷積神經網絡具有更為強大的特徵表達能力。

大數據時代的來臨,更激發了數據驅動的深度學習模型的發展,實現了更高效的特徵提取與圖像分類,將圖像分類的發展推向一個新的高度。


百草莊


通過CNN網絡。

目前進行人臉識別的主要方式還是卷積網絡,雖然Hinton後來提出了膠囊網絡,但是新的網絡依然處於發展早期,還有很多需要完善的地方,相關的軟件配置以及工具包也並不成熟,距離普及會用還有一段時間。

首先強調下人臉識別和圖片識別沒有本質上的區別,如果一定要說區別的話,人臉識別會通過捕捉面部特徵點來進行三角構建,特徵點是屬於基本不隨年齡發生變化的區域,這樣而已基本排除由化妝、裝扮以及年齡變化所帶來的面部識別失效影響,但是整容的話另說。

至於CNN網絡進行圖片識別,首先是通過數次卷積以後,提取到圖片的高維特徵,這些特徵在同類圖片中會必然性的出現,並且具有組合特性,之後利用全連接網絡可以對高維特徵進行組合判別,不同的特徵會指向不同的類別,不同的特徵組合最終會給出不同的結論。


榻榻米的榻榻


通過專用的算法。

簡單來說,人臉或者是圖像,在計算機看來都是一樣的像素的組合而已。通過一套算法,識別出某個像素周圍的像素種類,進行分類,判斷等等操作,最終輸出一個結果,這就是識別的大概流程。

而具體每個算法如何詳細操作,如何優化,這就是各家廠商的商業秘密了。

感興趣的可以蒐集更多詳細資料和論文,這裡就不贅述了。

歡迎討論


原來一分鐘


其實說白了就是通過大數據分析,圖像識別。不過目前國內大部分圖像識別技術是開源的。


分享到:


相關文章: