當前位置:
首頁 > 最新 > 孫啟超:卷積神經網路在人臉識別技術中的應用

孫啟超:卷積神經網路在人臉識別技術中的應用

隨著 iPhone X 的發布,Face ID 人臉識別技術開始進入人們的日常生活中,當我們拿起手機並看著它的時候就可以實現手機解鎖的功能。而人臉識別中的關鍵技術就是卷積神經網路。

近日,在雷鋒網 AI 研習社公開課上,法國蒙彼利埃大學孫啟超就講述了卷積神經網路的基本原理以及人臉識別技術是如何運行的。公開課回放視頻網址:http://www.mooc.ai/open/course/524

孫啟超:法國蒙彼利埃大學 MBA 在讀,CSDN 百萬博客專家。

分享主題:卷積神經網路在人臉識別技術中的應用

分享提綱:

1. 介紹卷積神經網路的基本原理和工作流程

2. 講述卷積神經網路的四大基本組件:池化操作,激活函數,全連接層,目標函數

3. 解析通用的人臉識別技術

雷鋒網 AI 研習社將其分享內容整理如下:

我今天跟大家分享一下卷積神經網路在人臉識別技術中的應用。首先介紹一下深度學習和機器學習的關係。人工智慧包含了機器學習這一個子領域,機器學習又包含了表示學習(一種能自動抽取特徵的學習方式),而深度學習則是表示學習中最具代表性的一種學習。我們今天要講的 CNN 即卷積神經網路,就是深度學習中的一種。

機器學習的核心思想其實就是利用特徵來學習到我們所需要的知識,因而一種新的工作出現了,那就是專門做特徵工程的一類工程師。而特徵工程的好壞,會影響機器學習最終效果。科學家們就想到,能不能讓機器自動學習特徵,而不需要讓人去做特徵工程呢?結論是:可以。表示學習就是利用特徵去學習。

深度學習的使用,其實非常簡單,就是端到端的學習,只需要三步:第一,把數據給它(機器);第二,等深度學習處理完;第三,拿到結果。

下面,我們來看一下我們今天要講的卷積神經網路的發展歷程:

?1980 年,科學家提出了「神經認知」,現在認為「神經認知」是卷積神經網路的前身;

?1998 年,兩位科學家提出了基於梯度學習的卷積神經網,叫LeNet。它是第一個大規模應用的圖像識別。美國當時大量的郵寄工作,需要專人進行報郵編、寄送地址等工作。人工去做的話,效率很低,一個人一秒能識別幾個?就算識別速度很快,然而人的速度越快,錯誤率可能就越高,所以這個 LeNet 就被應用於手寫數字的字元識別,並且錯誤率只有 1%,可大規模進行運用;

?2012 年,Hinton 團隊提出卷積神經網路Alex-net,該團隊參加了李菲菲教授的 Image Net 的比賽,拿到了冠軍。當時它以比第二名提高 12% 的準確率遙遙領先。以前,第一名比第二名一般只會提前一、二個百分點,三、四個百分點就很多了,而這一次,這個團隊一項就領先了十二個百分點。這是因為 Alex-net 第一次用到了 ReLU 激活函數、最大池化、DROP Out 以及 GPU 加速這些新技術;

?2014 年,Google 提出Inception-net,裡面的核心思想就是可反覆堆疊的高效卷積神經網路結構,將錯誤率降到了 Alex-net 的一半;

?2015 年,微軟的ResNet成功訓練了152 層的深層次網路。以前的一些神經網路,這邊輸入,中間是很多神經元,但是只有一層。而增加層次的技術,在當時難以取得突破。微軟這個 ResNet 一下增加到 152 層,則算是一個突破。同時,它將錯誤率降低到 3.46%,再次刷新記錄。

?此後,基本上每年甚至每幾個月都會出現新一代的技術,例如新的網路結構,更深的網路的訓練方法等。可以說,是 CNN 引領了這次深度學習的浪潮。

那捲積神經網路到底是什麼?它的核心是卷積操作。

大家可以參考下圖,左上角是一個 5*5 的綠色矩陣,矩陣中的黃色區域是一個 3*3 的卷積核。黃色區域的作用,是把覆蓋在矩陣上的數進行加權求和,計算出來的數(見紫色區域)將會被放入一個新的矩陣。

然後看右上角的第二張圖片,黃色的區域向右移動一位,就是一步,這個「步」指的是步長——CNN 裡面的另一個參數(一個參數是卷積核),這裡的步長被設置為 1 步。移動 1 步後,同樣對黃色區域進行加權求和,又得出一個新的數(與第一個數一起被放入紫色區域)。

我們可以將整個黃色區域看成一個相框,大小、長寬都是固定的,順序為從左往右、從上往下,移動三次,依次會出現三個新的數,再依次放到下一個矩陣中進行計算。這是一種局部操作,原始數據(5*5 的輸入)經過 9 次卷積,就能得到卷積後的結果。這個結果叫做卷積特徵,它是一個新的 3*3 矩陣——這個矩陣又作為下一層操作的輸入,並進行一些池化操作。

接下來我們看一下 CNN 的工作流程。先看一下幾個核心的概念:第一個就是我們剛才講的卷積操作;第二個就是池化操作,這個也是非常重要的;第三個就是它的激活函數、全連接層和目標函數。

然後再看下方這張長圖。第一步,我們先把原始數據輸入給它(機器),然後以例如卷積層+池化層+激活函數的組合形式進行卷積操作。之後,再同樣採用這種組合形式進行下一組卷積操作……就這樣不停循環,直到把所有特徵都抽取出來。接著,抽取出來的所有特徵與全連接層進行對接,得出預測的值,並與目標值進行對比。最後,機器會對二者的差值進行修復,並重新訓練。這是一個完整的工作流程。

接下來我們再看一下卷積操作,它沒有參數,我們只需要給它設置最大池化和平均池化。最大池化是指將覆蓋區域的最大值取出來——它的目的就是把最顯著的特徵取出來,將一些不太明顯的特徵忽略掉。

卷積操作有三大特點:

第一個是特徵不變性。我們可以想像一張圖片卷積以後,圖片的右下角為一條直線,如果它在圖像的左上角識別的(圖形)卷積特徵與直線的卷積特徵一致,那左上角的這個圖形一定也是一條直線,因為特徵一樣。這也是卷積神經網路裡面的一個特性,即兩個特徵的相對位置要比它們在圖片中的絕對位置要重要。

第二個特點就是特徵降維。我們上面用的是 5*5 的矩陣,但實際上 10024*798 的圖片像素需要消耗很大的性能,而其中大部分都是沒必要的計算,最大池化就是將最顯著的特徵取出來,捨棄那些不太明顯的特徵,以節省一些計算資源。

第三個特點就是防止過擬合。因為抽取的都是最明顯的特徵,能夠防止過度擬合。

下面我們再看激活函數。以前從事過機器學習的同學,可能會接觸到另一個激活函數——sigmoid 函數,它是取值範圍為 0-1 的一條曲線。

而我們要講的這個 ReLU 函數,可表示為下圖的藍線。它實際上是一個分段函數,當你給這個函數的值小於 0 的時候,不管負多少,都會返回一個 0。當你給它大於等於 0 的值的時候,也不管給出的是什麼值,它都能返回本身(X),這其實是一個很簡單的函數。

那激活函數到底有什麼用?

打個比方,我手上拿著一根針,要去扎另一隻手,剛開始隔得很遠,我不會感到疼,然後針慢慢接近我的另一隻手,直到最後扎到了,我手上的這塊神經就會告訴我的大腦,我的手扎到了——我就會感到疼,這就相當於「激活」了。

針與我的另一隻手的距離有一個閾值,當這個距離小於了這個閾值,並最終完全貼近了,我的神經就會馬上告訴我的大腦(疼),從而激活我的「疼感」——激活函數就是這個原理。機器平時訓練出來的一些東西,如果沒有達到閾值,特徵就不會被激活;而如果超過閾值,特徵就會被激活並被輸出。

再往下,我們就以一個整體的視角來看一下卷積神經網路的運作。先看下面的這張圖,這是一個字母 A,首先要進行卷積操作,之後再根據設置的卷積核和步長找到卷積核的特徵,最後把所有激活的神經元和最後的全連接層一一對應,通過矩陣乘法,看它們是否真正被激活。

全連接層在整個 CNN 中起到「分類器」的作用,該作用一般在最後實現。

然後是目標函數。卷積神經網路中最多的回歸問題,用的都是歐式(Euclidean)距離,演算法為:。我們一般採用最右邊的公式,該公式為求和公式,從 1 開始取到 n,對兩個數之間的差值進行計算。

這個歐式距離有什麼用呢?比如兩個目標,如果距離近,相似度就比較高。因此通過求歐式距離,我們可以判斷它們是否近似。

卷積神經網路的基本原理以及幾個核心概念都介紹完了。接下來我們進入人臉識別的環節,總體分為四步:第一步就是人臉邊框檢測,第二步就是圖像校準,第三步是圖像轉向量,第四步是向量對比。

第一步人臉邊框檢測。一張圖片上,有可能不止一張臉,而是有多張臉。不管有多少張臉,我們先把符合人臉特徵的邊框找到,並且把邊框給截取出來。

怎麼截取?定位。就是根據人臉特徵來進行定位,就像剛剛所說的,如果某個位置有一隻眼睛,其對稱的地方也有一隻眼睛,那(機器)就能找到眼部位置,進而也能找到眼角部分。在人臉識別中,邊框特徵範圍非常重要,因為機器依靠這些,就可以划出完整的臉部位置。機器可以參照的主要特徵之一是下巴,因為嘴角可以張開或者合閉,但是下巴一般不會有太大變動。第二個是眉毛——找到眼睛了,眉毛就好找了。第三個是鼻樑、鼻尖,上、下嘴唇。

將這些特徵都找到後,就要找到臉的邊框——可能為方臉、瓜子臉以及圓臉,機器會在臉部邊框上生成一些點,之後使用圖形邊框(如圓邊框)去進行對比,發現差了一點,它就會不停調整係數,直到完全符合。

但截取時,臉附近需要留出一定距離,不能完全按照邊框去截取,例如,上圖中的頭髮部分,(人)可能戴了帽子,因此機器就不能進行完全截取,而是在周圍留出一定空間,再把圖片截取出來。如果一張臉有多個點,那就截出多個人臉的邊框。

第二步就是校準圖像。這個概念其實跟計算機處理數據的思路一致。不管你給機器圖片、語音、數字、字元串,或者是別的一些數據,它都會將其轉化為計算機可以識別的數據。

人臉校準也是,給機器的頭不管是歪頭、低頭還是仰著頭——位置都不正,那就先將臉邊框截出來,為每個點進行定位(如下圖中的綠點),再根據點定位出一個坐標,跟真正擺正的臉的坐標進行對比,二者相差的角度,就是頭歪的角度,將圖像反向旋轉一下,圖像就變正了。

這個效果也是非常有用的,因為它可以減少不必要的誤差。機器學習也是這樣,當你給它一堆沒有處理過的數據進行訓練的時候,它最終訓練出來的結果不僅有可能是不好的,還有可能是相反的,為你做出的決定都是錯誤的。比如做商品智能推薦,如果輸入的數據沒有經過處理,甚至所設置的維度都是沒有用的,機器可能會往錯誤的方向去做推薦。

因此對數據的處理非常重要,要去掉不必要的誤差,並將所有的演算法都放在真正有用的計算上面——這個思想很重要。

第三個是圖像轉向量。該圖像轉向量是怎麼生成的?就是卷積、池化操作過後生成的圖像向量。向量既有大小又有方向,如果兩個向量間的夾角非常小,那這兩個向量就非常接近。

通過比較向量間的夾角,可以判斷兩個目標是否相似。例如,我們需要判斷計算機視覺相關的兩篇文章是否相似,首先我們要找到兩篇文章,將其中一篇文章的關鍵詞提取出來——一個關鍵詞就是一個向量,所有關鍵詞都找出來以後,計算一下向量的方向和大小。另外一篇也進行同樣的操作,最後機器再對兩組向量進行對比,如果幾乎重合,則說明兩篇文章的內容非常相似。向量的作用,在機器學習中是非常重要的。

圖像轉向量之後,就需要把這個向量計算出來,然後和目標函數的向量做對比,再用余項定理求出它們之間的夾角——前面兩篇相似文章的對比,就使用了這一定理。這一向量與目標向量不一定要完全重合,夾角在很小的情況下,只要在閾值之內,就可以判斷二者相似,而閾值都是人為設置好的。

最後一步就是向量對比。相同的人臉,對應的向量距離小;不同的人臉,向量距離自然就大。

向量計算中的有一個名詞——內積,它是對應元素乘積的求和,可以計算出剛才上面所提到的夾角。公式為:。夾角越小,說明兩張人臉越相似。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雷鋒網 的精彩文章:

Google Cloud新增洛杉磯雲區 開設LA1數據中心互聯 Equinix和CoreSite
紐約排名前五的西奈山醫院與醫療AI公司合作,檢測和管理腎臟疾病

TAG:雷鋒網 |