深扒人臉識別技術的原理、算法(下)
發布時間:2018-02-06 來源:Imagination Tech 責任編輯:lina
【導讀】前(qian)文(wen)說(shuo)過(guo),根(gen)據(ju)有(you)限(xian)的(de)訓(xun)練(lian)集(ji),去(qu)適(shi)應(ying)無(wu)限(xian)的(de)測(ce)試(shi)集(ji),當(dang)然(ran)訓(xun)練(lian)集(ji)容(rong)量(liang)越(yue)大(da)效(xiao)果(guo)就(jiu)越(yue)好(hao)。但(dan)是(shi),訓(xun)練(lian)集(ji)如(ru)果(guo)很(hen)大(da),那(na)麼(me)每(mei)次(ci)都(dou)根(gen)據(ju)全(quan)部(bu)數(shu)據(ju)執(zhi)行(xing)梯(ti)度(du)下(xia)降(jiang)計(ji)算(suan)量(liang)就(jiu)太(tai)大(da)了(le)。此(ci)時(shi),我(wo)們(men)選(xuan)擇(ze)每(mei)次(ci)隻(zhi)取(qu)全(quan)部(bu)訓(xun)練(lian)集(ji)中(zhong)的(de)一(yi)小(xiao)部(bu)分(fen)(究竟多少,一般根據內存和計算量而定),執行梯度下降,不斷的迭代,根據經驗一樣可以快速地把梯度降下來。這就是隨機梯度下降。
三、梯度的下降(下)
前文的梯度下降法隻能對f函數的w權重進行調整,而上文中我們說過實際是多層函數套在一起,例如f1(f2(x;w2);w1),那麼怎麼求對每一層函數輸入的導數呢?這也是所謂的反向傳播怎樣繼續反向傳遞下去呢?這就要提到鏈式法則。其實質為,本來y對x的求導,可以通過引入中間變量z來實現,如下圖所示:
這樣,y對x的導數等價於y對z的導數乘以z對x的偏導。當輸入為多維時則有下麵的公式:
如此,我們可以得到每一層函數的導數,這樣可以得到每層函數的w權重應當調整的步長,優化權重參數。
由於函數的導數很多,例如resnet等網絡已經達到100多層函數,所以為區別傳統的機器學習,我們稱其為深度學習。
shenduxuexizhishishoudaoshenjingkexuedeqifa,suoyichengweishenjingwangluo,danshizhishangjiushishangmiantidaodeduocenghanshuqianxiangyunsuandedaofenleizhi,xunlianshigenjushijibiaoqianfenleiqusunshihanshuzuixiaohuahou,genjusuijitiduxiajiangfalaiyouhuagecenghanshudequanzhongcanshu。renlianshibieyeshizhemeyigeliucheng。yishangwomenchubuguowanduocenghanshudecanshutiaozheng,danhanshubenshenyingdangruheshejine?
四、基於CNN卷積神經網絡進行人臉識別
我們先從全連接網絡談起。Google的TensorFlow遊樂場裏可以直觀的體驗全連接神經網絡的威力,這是遊樂場的網址:http://playground.tensorflow.org/,瀏覽器裏就可以做神經網絡訓練,且過程與結果可視化。如下圖所示:

這個神經網絡遊樂場共有1000個訓練點和1000個測試點,用於對4種不同圖案劃分出藍色點與黃色點。DATA處可選擇4種不同圖案。
整個網絡的輸入層是FEATURES(待解決問題的特征),例如x1和x2表示垂直或者水平切分來劃分藍色與黃色點,這是最容易理解的2種劃分點的方法。其餘5種其實不太容易想到,這也是傳統的專家係統才需要的,實際上,這個遊樂場就是為了演示,1、好的神經網絡隻用最基本的x1,x2這樣的輸入層FEATURES就可以完美的實現;2、即使有很多種輸入特征,我們其實並不清楚誰的權重最高,但好的神經網絡會解決掉這個問題。
隱層(HIDDEN LAYERS)keyisuiyishezhicengshu,meigeyincengkeyishezhishenjingyuanshu。shijishangshenjingwangluobingbushizaijisuanlizugoudeqingkuangxia,cengshuyueduoyuehaohuozhemeicengshenjingyuanyueduoyuehao。haodeshenjingwangluojiagoumoxingshihennanzhaodaode。benwenhoumianwomenhuizhongdianjiangjigeCNN經典網絡模型。然而,在這個例子中,多一些隱層和神經元可以更好地劃分。
epoch是訓練的輪數。紅色框出的loss值是衡量訓練結果的最重要指標,如果loss值一直是在下降,比如可以低到0.01這樣,就說明這個網絡訓練的結果好。loss也可能下降一會又突然上升,這就是不好的網絡,大家可以嚐試下。learning rate初始都會設得高些,訓練到後麵都會調低些。Activation是激勵函數,目前CNN都在使用Relu函數。
了解了神經網絡後,現在我們回到人臉識別中來。每一層神經元就是一個f函數,上麵的四層網絡就是f1(f2(f3(f4(x))))。然ran而er,就jiu像xiang上shang文wen所suo說shuo,照zhao片pian的de像xiang素su太tai多duo了le,全quan連lian接jie網wang絡luo中zhong任ren意yi兩liang層ceng之zhi間jian每mei兩liang個ge神shen經jing元yuan都dou需xu要yao有you一yi次ci計ji算suan。特te別bie之zhi前qian提ti到dao的de,複fu雜za的de分fen類lei依yi賴lai於yu許xu多duo層ceng函han數shu共gong同tong運yun算suan才cai能neng達da到dao目mu的de。當dang前qian的de許xu多duo網wang絡luo都dou是shi多duo達da100層以上,如果每層都有3*100*100個神經元,可想而知計算量有多大!於是CNN卷積神經網絡應運而生,它可以在大幅降低運算量的同時保留全連接網絡的威力。
CNN認為可以隻對整張圖片的一個矩形窗口做全連接運算(可稱為卷積核),滑動這個窗口以相同的權重參數w遍曆整張圖片後,可以得到下一層的輸入,如下圖所示:

CNN中zhong認ren為wei同tong一yi層ceng中zhong的de權quan重zhong參can數shu可ke以yi共gong享xiang,因yin為wei同tong一yi張zhang圖tu片pian的de各ge個ge不bu同tong區qu域yu具ju有you一yi定ding的de相xiang似si性xing。這zhe樣yang原yuan本ben的de全quan連lian接jie計ji算suan量liang過guo大da問wen題ti就jiu解jie決jue了le,如ru下xia圖tu所suo示shi:

結合著之前的函數前向運算與矩陣,我們以一個動態圖片直觀的看一下前向運算過程:

這裏卷積核大小與移動的步長stride、輸出深度決定了下一層網絡的大小。同時,核大小與stride步長在導致上一層矩陣不夠大時,需要用padding來補0(如上圖灰色的0)。以上就叫做卷積運算,這樣的一層神經元稱為卷積層。上圖中W0和W1表示深度為2。
CNNjuanjiwangluotongchangzaimeiyicengjuanjicenghoujiayigejiliceng,jilicengjiushiyigehanshu,tabajuanjicengshuchudeshuzhiyifeixianxingdefangshizhuanhuanweilingyigezhi,zaibaochidaxiaoguanxidetongshiyueshuzhuzhifanwei,shidezhenggewangluonenggouxunlianxiaqu。zairenlianshibiezhong,tongchangdoushiyongRelu函數作為激勵層,Relu函數就是max(0,x),如下所示:

可見 Relu的計算量其實非常小!
CNN中還有一個池化層,當某一層輸出的數據量過大時,通過池化層可以對數據降維,在保持住特征的情況下減少數據量,例如下麵的4*4矩陣通過取最大值降維到2*2矩陣:

上圖中通過對每個顏色塊篩選出最大數字進行池化,以減小計算數據量。
通常網絡的最後一層為全連接層,這樣一般的CNN網絡結構如下所示:

CONV就是卷積層,每個CONV後會攜帶RELU層。這隻是一個示意圖,實際的網絡要複雜許多。目前開源的Google FaceNet是采用resnet v1網絡進行人臉識別的,關於resnet網絡請參考論文https://arxiv.org/abs/1602.07261,其完整的網絡較為複雜,這裏不再列出,也可以查看基於TensorFlow實現的Python代碼https://github.com/davidsandberg/facenet/blob/master/src/models/inception_resnet_v1.py,注意slim.conv2d含有Relu激勵層。
以上隻是通用的CNN網絡,由於人臉識別應用中不是直接分類,而是有一個注冊階段,需要把照片的特征值取出來。如果直接拿softmaxfenleiqiandeshujuzuoweitezhengzhixiaoguohenbuhao,liruxiatushizhijiejiangquanlianjiecengdeshuchuzhuanhuaweierweixiangliang,zaierweipingmianshangtongguoyansebiaoshifenleidekeshihuabiaoshi:

可見效果並不好,中間的樣本距離太近了。通過centor loss方法處理後,可以把特征值間的距離擴大,如下圖所示:

這樣取出的特征值效果就會好很多。
實際訓練resnet v1網絡時,首先需要關注訓練集照片的質量,且要把不同尺寸的人臉照片resize到resnet1網絡首層接收的尺寸大小。另外除了上麵提到的學習率和隨機梯度下降中每一批batchsize圖片的數量外,還需要正確的設置epochsize,因為每一輪epoch應當完整的遍曆完訓練集,而batchsize受限於硬件條件一般不變,但訓練集可能一直在變大,這樣應保持epochsize*batchsize接近全部訓練集。訓練過程中需要密切關注loss值是否在收斂,可適當調節學習率。
最後說一句,目前人臉識別效果的評價唯一通行的標準是LFW(即Labeled Faces in the Wild),它包含大約6000個不同的人的12000zhangzhaopian,xuduosuanfadouyijutalaipingjiazhunquelv。dantayoulianggewenti,yishishujujibugouda,ershishujujichangjingwangwangyuzhenshiyingyongchangjingbingbupipei。suoyiruguomougesuanfachengqizaiLFW上的準確率達到多麼的高,並不能反應其真實可用性。
特別推薦
- 噪聲中提取真值!瑞盟科技推出MSA2240電流檢測芯片賦能多元高端測量場景
- 10MHz高頻運行!氮矽科技發布集成驅動GaN芯片,助力電源能效再攀新高
- 失真度僅0.002%!力芯微推出超低內阻、超低失真4PST模擬開關
- 一“芯”雙電!聖邦微電子發布雙輸出電源芯片,簡化AFE與音頻設計
- 一機適配萬端:金升陽推出1200W可編程電源,賦能高端裝備製造
技術文章更多>>
- 邊緣AI的發展為更智能、更可持續的技術鋪平道路
- 每台智能體PC,都是AI時代的新入口
- IAR作為Qt Group獨立BU攜兩項重磅汽車電子應用開發方案首秀北京車展
- 構建具有網絡彈性的嵌入式係統:來自行業領袖的洞見
- 數字化的線性穩壓器
技術白皮書下載更多>>
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
SATA連接器
SD連接器
SII
SIM卡連接器
SMT設備
SMU
SOC
SPANSION
SRAM
SSD
ST
ST-ERICSSON
Sunlord
SynQor
s端子線
Taiyo Yuden
TDK-EPC
TD-SCDMA功放
TD-SCDMA基帶
TE
Tektronix
Thunderbolt
TI
TOREX
TTI
TVS
UPS電源
USB3.0
USB 3.0主控芯片
USB傳輸速度




