iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 14
2
AI & Data

30 天學會深度學習和 Tensorflow系列 第 14

13. 深度學習甜點系列:人臉辨識

Landmark detection 和物體辨識(object detection)最大的不同,在於物體辨識要從一堆被歸於同一類,但變化極多的物體影像中,學習辨認該類影像。如,上篇文章所介紹的行人辨識,只要輸入影像中有疑似行人的 image patch 出現,就是作為物體辨識的目標。而 landmark detection 則是要從一堆被歸類於同一類的影像中,找出該物件的特徵來。如,人臉辨識所用的 facial landmark detection。

如人臉辨識中,必定會包含五官。那麼我們就可以用10個點來標示人的五官的 landmarks ,一旦這 10 個點吻合人臉的 landmarks,我們就可以宣稱這是一個人臉。和用於物體辨識和定位中的 bounding box 不同的是,landmark detection 允許捕捉偵測物件的形狀,而無需輸出 bounding box 的四個參數。所以,除了作人臉辨識外, Landmark detection 的另外作用則是做 posture modeling,如下圖所示:

landmark detection slide

在人臉辨識中,又可以分為兩種系統,較為簡易的 Face verification 系統,主要有兩個輸入:一是擷取的人臉影像,另一則是欲確認的身份。而該系統會訓練一個二元分類器,判定擷取的人臉影像是否為欲確認的身份,主要應用是在於出入保全,以人臉來辨識身份,屬於一對一的匹配問題。

另一個系統,則是需要使用擷取的人臉影像對資料庫做搜尋匹配,如在員工資料庫搜尋(如,課程中的影片所示),或如電影《關鍵報告》中用以偵測逃犯的通緝犯資料庫(見老大哥的現實應用)。該系統的輸入只有擷取的人臉影像,而輸出則為任一在資料庫中匹配的人員身份,或不存在資料庫中,若無法完成匹配。該系統屬於 1 對 K 的匹配問題,而 K 為資料庫的大小。這類的問題難度通常會隨著資料庫的大小升高。

Face verification 的難題在於通常在現有的資料庫中,訓練資料非常稀少。如,員工資料庫中,通常只存有一張員工報到時製作的 ID 時所用的相片。此時, face verification 演算法便需要從一個人一張照片的訓練資料,來訓練 face verification 的分類系統。這種透過稀少的訓練資料來做機械學習方式,又可被稱為 One-shot learning

一個解決 one-shot learning 訓練資料稀少的方式,就是與其學習構成辨識訓練例子的相似特徵,不如學習不同例子的不相似度。前者若以類神經網路訓練,則每一個人需要許多不同角度和情境的訓練影像,但在 one-shot learning 我們假設這樣的訓練資料擷取是不容易達成的。而為何要學習例子間的不相似度,因為如果你有 N 個人臉辨識目標,若以傳統的 CNN 物體辨識方法,欲學習該物體的獨特特徵,只有 1 個訓練例子,但學習不相似程度的話,便有 N - 1 的訓練例子可供學習。學習定義訓練例子間的量化差異函式,這就是 one-shot learning 的精髓。

one shot learning slide
由於 one-shot learning 依賴的是不相似度的量測,所以一個符合應用的門檻值來定義兩個輸入間的最小不相似度是很重要的。

一個運用上述 one-shot learning 的原則建立起的 face verification 應用則是 Siamese Network。該 Network 架構則是將每個訓練例子的輸入影像,都重新用 CNN encoding 成固定維度的向量。再用該向量來與其他訓練例子做相似比較,一個在 Euclidean space 可應用的量度單位則為Euclidean distance,如課程投影片所示。

Siamese slide

然而,如前所述,one-shot learning 不僅僅需要學習能夠 encode 單一訓練例子的特徵向量,更要能確保所有的訓練人臉,在新的 encoding 特徵向量,或又稱為 embedding feature space,兩兩訓練例子間的相異量化量度能夠符合一個好的 distance function 該有的行為:相似影像的距離須小於相異影像的距離。

Triplet loss 便是依照上述的限制來作為訓練人臉的 encoding 特徵向量的目標損失函數。

要定義 triplet loss,我們需要三個影像,anchor image (欲辨認的輸入影像, 簡寫為 A),positive image (和輸入影像稍有變異的同人影像作為正面例子,簡寫為 P),negative image (和輸入影像完全不同人的影像作為負面例子,簡寫為 N)。Triplet loss 的限制,除了須保證相似兩點的距離須小於相異兩點的距離,為了符合三角不等式,而引入了一個正數。三角不等式也是一個良好的距離量測函式(distance function)須具備的。

關於三角不等式如何影響 Triplet loss 可見下圖圖解:

triangular inequality

三角不等式亦可以從 SVM 的角度來思考,亦是使用 margin penalty term 於 triplet loss 中。增加 margin 的功用包括了避免符合限制中最簡單的解:也就是 anchor image 和 positive image 的距離與 anchor image 和 negative image 的距離都為零。另外的一個功用,則是讓相似的影像距離, d(A, P) 盡量小於相異的影像距離, d(A, N),這樣在新的 feature embedding space,相似的影像就會形成一個緊密的群聚。

完整的 triplet loss 可見下圖:

triplet loss equation

然而,要建構一個高質量的 face embedding encoding 方式,還需一個選擇代表性 negative image 的方法,倘若 negative image 選擇和 anchor image 相異太遠,則訓練出的 distance function 則會相當容易符合不等式的限制。因此完全 random 的 negative image 選取方式則不適用學習 distance function,其原因在於完全 uniform 的選取方式可能造成訓練時間都花費在訓練相異甚遠的影像配對上,以至於根本不需要學習,就可以符合不等式限制。而較佳的選取方式,則為相似影像距離, d(A, P) 約相等於相異影像距離, d(A, N),如此一來 encoder 就可以藉由 margin 來拉大兩者的距離。

choosing triplets

最後,一個完整的人臉辨識系統的架構如下圖,利用 keras 來建構 Siamese Network 則可見此文,英

face verification system

明天,我們要讓梵谷從墳墓裡復活!


上一篇
12. 深度學習甜點系列:物體辨識演算法小結
下一篇
14. 深度學習甜點系列:讓梵谷從墳墓裡復活
系列文
30 天學會深度學習和 Tensorflow30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言