人臉識別是如何實現的?揭sir幫你解答!
近日
維識科技智能工程教育中心
開展了一場別開生面的
人臉識別技術知識公開課


本次公開課主講人為
維識教育科技金牌講師
揭李迪

揭sir本科畢業于谷歌首席科學家Geoffrey Hinton(圖靈獎獲得者,被稱為“神經網絡之父”、“深度學習鼻祖”)的母校愛丁堡大學(Edinburgh University)。研究生師從香港浸會大學(HKBU)國際電子電氣工程協會(IEEE)院士劉繼明(jiming LIU)。曾經擔任融鏈科技項目總監、金力軟件項目經理。參與了公安部旗下與商湯競標的閉路攝像頭人臉檢測項目。精通物體檢測語義分割NLP自然語言處理與AI項目全棧落地WANN無權重機器人等國內外領先技術。
揭sir簡介
人臉識別
其實是對人臉特征進行分析計算
并進行身份識別的一種生物識別技術
即用攝像機或攝像頭采集
含有人臉的照片或視頻
對其中的人臉進行檢測和跟蹤
進而達到識別、辨認人臉的目的

人臉識別技術發展到今天
主要有兩種用途
①
人臉驗證
人臉驗證做的是1:1的比對。也就是說我們先告訴人臉識別系統,我是張三,然后用來驗證站在機器面前的“我”到底是不是張三。
②
人臉識別
人臉識別做的是1:N的比對。也就是說系統采集了我的一張照片之后,從數萬人或者數百萬人的庫里自動找出“我是誰”。
而“刷臉”
只是人臉識別中
比較具體可感的一部分
事實上人臉識別
能夠給大家帶來的
遠遠不僅是“刷臉”付款這么簡單
目前
人臉識別在
金融、安防、交通
電子商務、娛樂、醫療等領域
均有著廣泛應用

了解了什么是人臉識別之后
那么問題來了
它是怎么實現的呢?
關于人臉識別
目前有很多經典的算法
基于幾何特征法、局部特征分析法
基于彈性模型法、特征臉法
及神經網絡法等
神經網絡方法在人臉識別上的應用比起前述幾類方法來有一定的優勢,因為對人臉識別的許多規律或規則進行顯性的描述是相當困難的,而神經網絡方法則可以通過學習的過程獲得對這些規律和規則的隱性表達,它的適應性更強,一般也比較容易實現。
卷積神經網絡(CNN)的前級包含了卷積和池化操作,可以實現圖片的特征提取和降維,最近幾年由于計算機算力的提升,很多人都開始轉向這個方向。
所以
本次公開課
揭sir以CNN為技術背景
介紹了人臉識別的基本思路


先用人臉檢測方法檢測出人臉位置,然后根據返回的坐標、尺寸把臉用數組切片的方法截取下來,然后把截取的小圖片送進訓練好的卷積神經網絡模型,得出人臉的分類結果,最后在原圖片上打上包圍框并且把結果寫在包圍框的上端。
當然
實現以上步驟的前提是
有一個訓練好的可以做人臉識別的模型
因為訓練的好壞直接影響識別的準確度
所以
本次課程的重點放在了訓練上
揭sir通過簡述
從LeNet到VGG-Net的網絡架構演進

①
LeNet

亮點
定義了CNN的基本架構
卷積層、池化層、全連接層
是CNN的鼻祖

②
AlexNet

亮點
更深的網絡
數據增廣
ReLU
dropout
LRN

③
ZF-Net

亮點
網絡結構沒什么改進
只是調了調參
性能較AlexNet提升了不少
④
VGG-16

亮點
卷積層使用更小的filter尺寸和間隔。與AlexNet相比,可以看出VGG-Nets的卷積核尺寸還是很小的,比如AlexNet第一層的卷積層用到的卷積核尺寸就是11*11,這是一個很大卷積核了。而反觀VGG-Nets,用到的卷積核的尺寸無非都是1×1和3×3的小卷積核,可以替代大的filter尺寸。
他指出:CNN從90年代的LeNet開始,21世紀初沉寂了10年,直到12年AlexNet開始又再煥發第二春,從ZF-Net到VGG-Nets,網絡越來越深,架構越來越復雜,解決反向傳播時梯度消失的方法也越來越巧妙。但萬變不離其宗的是CNN基本架構為:卷積層、池化層與全連接層。層數發生變化,但CNN的流程并沒有變化。因此,充分理解了卷積層、池化層與全連接層,就可以找到入門CNN的訣竅了。
卷積層
(Convolution)
關于卷積層我們先來看什么叫
卷積操作

上圖較大網格表示一幅圖片,有顏色填充的網格表示一個卷積核,卷積核的大小為3*3。假設我們做步長為1的卷積操作,表示卷積核每次向右移動一個像素(當移動到邊界時回到最左端并向下移動一個單位)。卷積核每個單元內有權重,上圖的卷積核內有9個權重。在卷積核移動的過程中將圖片上的像素和卷積核的對應權重相乘,最后將所有乘積相加得到一個輸出。上圖經過卷積后形成一個6*4的圖。
在了解了卷積操作后
我們來看下卷積層的特點
局部感知
在傳統神經網絡中每個神經元都要與圖片上每個像素相連接,這樣的話就會造成權重的數量巨大造成網絡難以訓練。而在含有卷積層的的神經網絡中每個神經元的權重個數都是卷積核的大小,這樣就相當于沒有神經元只與對應圖片部分的像素相連接。這樣就極大的減少了權重的數量。同時我們可以設置卷積操作的步長,假設將上圖卷積操作的步長設置為3時每次卷積都不會有重疊區域(在超出邊界的部分補自定義的值)。
局部感知的直觀感受如下圖


ps:使用局部感知的原因是一般人們認為圖片中距離相近的部分相關性較大,而距離比較遠的部分相關性較小。在卷積操作中步長的設置就對應著距離的遠近。但是步長的設置并無定值需要使用者嘗試。
參數共享
在介紹參數共享前我們應該知道卷積核的權重是經過學習得到的,并且在卷積過程中卷積核的權重是不會改變的,這就是參數共享的思想。這說明我們通過一個卷積核的操作提取了原圖的不同位置的同樣特征。簡單來說就是在一幅圖片中的不同位置的相同目標,它們的特征是基本相同的。
其過程如下圖


多核卷積
如權值共享的部分所說我們用一個卷積核操作只能得到一部分特征可能獲取不到全部特征,這么一來我們就引入了多核卷積。用每個卷積核來學習不同的特征(每個卷積核學習到不同的權重)來提取原圖特征。


上圖的圖片經過三個卷積核的卷積操作得到三個特征圖。需要注意的是,在多核卷積的過程中每個卷積核的大小應該是相同的。
池化層
(Pooling)
池化層降低了各個特征圖的維度,但可以保持大部分重要的信息。
池化層夾在連續的卷積層中間,壓縮數據和參數的量,減小過擬合,池化層并沒有參數,它只不過是把上層給它的結果做了一個降采樣(數據壓縮)。
降采樣有兩種常用的方式
①
Max pooling
選取最大的
我們定義一個空間鄰域
并從窗口內的修正特征圖中取出最大的元素
最大池化被證明效果更好一些
②
Average pooling
平均的
我們定義一個空間鄰域
并從窗口內的修正特征圖算出平均值

無論是max pool
還是average pool
都有分信息被舍棄
那么部分信息被舍棄后
會損壞識別結果嗎?
因為卷積后的Feature Map中
有對于識別物體不必要的冗余信息
我們降采樣就是
為了去掉這些冗余信息
所以并不會損壞識別結果
全連接層
(Fully connected)
在全連接層中所有神經元都有權重連接,通常全連接層在卷積神經網絡尾部。當前面卷積層抓取到足以用來識別圖片的特征后,接下來的就是如何進行分類。通常卷積網絡的最后會將末端得到的長方體平攤成一個長長的向量,并送入全連接層配合輸出層進行分類。比如,在下面圖中我們進行的圖像分類為四分類問題,所以卷積神經網絡的輸出層就會有四個神經元。


四分類問題
我們從卷積神經網絡的卷積層、池化層以及全連接層來講解卷積神經網絡,我們可以認為全連接層之間的在做特征提取,而全連接層在做分類,這就是卷積神經網絡的核心。
而三者與卷積神經網絡的關系
可以這么理解

卷積神經網絡在形式上有一點點像
咱們的“人民代表大會制度”
卷積核的個數相當于候選人
圖像中不同的特征
會激活不同的“候選人”(卷積核)
池化層
(僅指最大池化)
起著類似于“合票”的作用
不同特征在對不同的
“候選人”有著各自的喜好
全連接相當于是“代表普選”
所有被各個區域選出的代表
對最終結果進行“投票”
全連接保證了receiptive field是整個圖像
既圖像中各個部分(所謂所有代表)
都有對最終結果影響的權利
舉個栗子

以VGG-16為例
對224x224x3的輸入
最后一層卷積可得輸出為7x7x512
如后層是一層含4096個神經元的FC
則可用卷積核為
7x7x512x4096的全局卷積
來實現這一全連接運算過程
它把特征representation整合到一起
輸出為一個值
這樣做
有一個什么好處就是
大大減少特征位置對分類帶來的影響
再舉個簡單的栗子

從上圖我們可以看出
貓在不同的位置
輸出的feature值相同
但是位置不同
對于電腦來說
特征值相同
但是特征值位置不同
那分類結果也可能不一樣
這時
全連接層filter的作用就相當于
貓在哪我不管
我只要貓
于是我讓filter去把這個貓找到
實際就是把feature map
整合成一個值
這個值大,有貓
這個值小,那就可能沒貓
和這個貓在哪關系不大了
魯棒性有大大增強
因為空間結構特性被忽略了
所以全連接層不適合用于
在方位上找Pattern的任務
比如segmentation
全連接層中一層的一個神經元
就可以看成一個多項式
我們用許多神經元去擬合數據分布
但是只用一層fully connected layer
有時候沒法解決非線性問題
而如果有兩層
或以上fully connected layer
就可以很好地解決非線性問題了
我們都知道
全連接層之前的作用是提取特征
全理解層的作用是分類
我們現在的任務是去區別一圖片是不是貓


假設這個神經網絡模型已經訓練完了
全連接層已經知道

當我們得到以上特征
我就可以判斷這個東東是貓了
因為全連接層的作用主要就是實現分類
從下圖
我們可以看出


紅色的神經元表示這個特征被找到了
(激活了)
同一層的其他神經元
要么貓的特征不明顯
要么沒找到
當我們把這些找到的特征組合在一起
發現最符合要求的是貓
OK
我認為這是貓了


貓頭有這么些個特征
于是我們下一步的任務
就是把貓頭的這么些子特征找到
比如眼睛、耳朵


道理和區別貓一樣
當我們找到這些特征
神經元就被激活了
(上圖紅色圓圈)
這細節特征又是怎么來的
就是從前面的卷積層,池化層來的
全連接層參數特多
(可占整個網絡參數80%左右)
ps:至于VGG-Nets之后GoogLeNet引入Inception結構代替單純卷積+激活的傳統操作,中間層的輔助LOSS單元,后面的全連接層全部替換為簡單的全局平均pooling;ResNet在網絡結構上做了較大創新等發展,本次公開課并未做過多闡述,有興趣的童鞋可自行查閱相關資料了解。
最后,揭sir
以Facenet與Face Recognition為訓練模型
讓童鞋們實操了一把人臉識別的全流程


請輸入評論內容...
請輸入評論/評論長度6~500個字
最新活動更多
- 1 AI狂歡遇上油價破百,全球股市還能漲多久? | 產聯看全球
- 2 OpenAI深夜王炸!ChatGPT Images 2.0實測:中文穩、細節炸,設計師慌了
- 3 6000億美元估值錨定:字節跳動的“去單一化”突圍與估值重構
- 4 Tesla AI5芯片最新進展總結
- 5 連夜測了一波DeepSeek-V4,我發現它可能只剩“審美”這個短板了
- 6 熱點丨AI“瑜亮之爭”:既生OpenClaw,何生Hermes?
- 7 AI界的殺豬盤:9秒刪庫跑路,全員被封號,還繼續扣錢!
- 8 2026,人形機器人只贏了面子
- 9 DeepSeek降價90%:價格屠夫不是身份,是戰略
- 10 AI Infra產業鏈卡在哪里了?


分享













