1. 程式人生 > >人臉識別如何做到one-shot learning?(轉)

人臉識別如何做到one-shot learning?(轉)

兩個 演示 照片 我們 round detail ack 命名 技術

來源:http://blog.csdn.net/ice_actor/article/details/78603042

1.什麽是人臉識別

??這部分演示了百度總部大樓的人臉識別系統,員工刷臉進出辦公區,在這個演示中主要應用到了人臉識別技術和活體檢測。 人臉識別的術語: 1)face verification:輸入圖像、名字ID判斷輸入圖像是不是名字ID指定的用戶 2)face recognition:有一個包含K個用戶的數據庫,拿到一幅圖片,然後判斷圖片中的人是不是在數據庫中,在輸出指定用戶name,不在就輸出未識別。 ??人臉識別要比人臉驗證要困難的多,在人臉驗證中準確率99%也許可以接受,但是放到包含100個用戶的人臉識別數據集下,這個誤差就會被放大,意味著1%的概率會出錯。在後續我們首先構建人臉驗證系統作為基本模塊,如果準確率夠高就可以把它用在識別系統上。人臉驗證系統的難點在於解決one-shot learning(一次學習)問題。

2. one-shot learning

??one-shot的意思是你需要通過單單一張圖片,就能去識別這個人,但是在深度學習中只有一個訓練樣本時,它的表現並不好,那麽如何去解決這個問題呢? ??假如員工數據庫有四個員工,當某個員工來的時候,你想通過人臉識別系統判斷他是不是四個員工之一,系統需要做的是僅僅通過一張照片,來識別前面這個人。所以在one-shot學習問題中只能通過一個樣本來進行學習以能夠認出同一個人,大多數人臉識別系統都要解決這個問題,因為在你的數據庫中每個雇員可能都只有一張照片。有一種辦法是將人的照片輸入卷積神經網絡,使用softmax單元輸出5個標簽,分別對應四個員工和四個都不是,但是這樣的效果並不好,假如有新的員工加入你的團隊,你就需要重新訓練你的神經網絡,這個確實有些糟糕。

要讓人臉識別做到一次學習,為了能有更好的效果,你需要做的是學習similarity函數,詳細的說就是下圖中d表示的函數,d以兩張圖片作為輸入,然後輸出這兩張圖片的差異值,如果是同一個人的兩張照片,希望輸出一個很小的值,如果是兩個差異很大的人的照片d輸出一個很大的值。這樣新加入一個員工只許將其的照片加入到數據庫中即可,不需要重新訓練模型。

技術分享圖片

3.Siamese網絡

??Siamese網絡就是實現上節函數d的訓練,你經常會看到如下的網絡結構,輸入一個圖像經過一系列的卷積、池化和全連接層最終得到一個特征向量,有時候會將其輸入softmax單元來做分類,但是在這裏我們不需要將其輸入softmax單元。加入輸出的特征向量大小是128維,將其命名為f(x),你可以將其看成輸入圖像的編碼。

技術分享圖片

?

從上面的描述可知,計算兩個圖片的網絡結構有著同樣的參數,所以實際只需要訓練一個網絡,它計算得到的編碼可以用於計算函數d,換句話說其實就是神經網絡的參數定義了一個編碼函數f(x)可以將圖片轉換成向量編碼。所以我們需要做的就是訓練這個網絡,使其在兩張圖片是同一個人的時候距離函數盡可能的小,不是同一個人的時候距離函數盡可能的大。

詳細內容請參考上述原文!

人臉識別如何做到one-shot learning?(轉)