本週是Special Application
Face Recognition
Face問題有兩種,一種是Face Verification,另一種是Face Recognition。
問題定義如下
Verification
- 輸入是Image+name/ID
- 輸出是這個Image和name/ID是否匹配
Recoginition
- 有K個人的數據庫
- 輸入一個Image
- 輸出一個ID,這個ID是和這個Image匹配的,但是也可能未找到。
Recognition比Verification難很多,因爲對於Verification來說,99%比方說,就是一個很好的正確率了。但是對於Recognition來說,K=100,99%的正確率就急劇下降,事實上,商用的正確率需要99.99…%很多個9纔行。
One Shot Learning
One-Shot Learning是Face Verification的重點和難點。有以下幾個原因:
- 因爲對於一般的神經網絡來說,都是一個圖片,塞進一個CNN,然後給一個softmax,比方說一共有5個員工,那麼輸出5維向量。
- 當來了一個組織人員之後,拍照,然後給出來結果。但是問題在於神經網絡沒法在數據很少的情況下work well。
- 而新組織人員來了,不可能提供一大堆的照片共訓練。而且組織內人員也是有變動的,不可能每次都重新訓練,所以一般性的CNN是不行的。
所以解決OneShot Learning的問題的方法是,學習一個similarity funciton,這個similarity function,可以告知兩個照片是否相似,這樣就可以解決OneShot Learning問題了。也就是:
反映Degree of difference between images
如何訓練?使用Siamese network
一般的神經網絡輸出都有一個softmax之類的,在這裏,我們直接把softmax去掉,然後用最後的FC層進行判斷和計算。
假如對於
那麼最後的learning goal就是,如果是same person,那麼d就小,如果是different person,d就大。
Triplet Loss
那麼如何定義損失函數呢?使用的是triplet loss。
首先有一個Anchor圖片,是某一個人的照片記爲A;
然後在用一個Positive樣本,也是這個人的照片,但是是另一張,記爲P;
然後有一個negative樣本,是別人的一張,記爲N。
然後我們希望
但是這樣網絡可能學習到的是
所以我們留有一定餘量:
這樣我們就有一定餘量了。
所以最後的loss function就是:
這是因爲如果max第一項如果是小於等於0,那麼目的就達到了,如果大於0,就進行優化。
所以就訓練而言,例如有10k個照片,裏邊有1k個人,平均每個人有10個照片。如果每個人只有一個照片,那這個就沒法訓練了。因爲必須有AP組合。
而對於AN組合,如果是隨機挑選負樣本的話,那麼神經網絡很快就能達到目標,這樣啥也沒學到,所以還是得挑選一些相似的照片纔行,稱爲Choose hard triplet。
商用系統一般都得用1 million數據庫進行訓練,有些是10 million,更有甚者是100 million,所以可以考慮開源的faceNet和DeepFace。
把face Verification做成一個Binary Classification
另外一些Loss function類型就是把需要對比的兩個照片懟到sigmoid裏邊,這樣就變成2分類問題。
或者還有一些其他形式,例如
這個稱爲
計算上的考慮
最後就是說因爲最後比的都是那個FC輸出的向量嘛,所以可以都預先計算好,不用每次都計算了。
Neural Style Transfer
什麼是Neural Style Transfer?
Neural Style Transfer就是學習大師級藝術畫作的風格,然後將一張普通的照片轉化成大師級藝術的風格。
CNN每一層究竟學習什麼?
[Zeiler and Fergus, 2013, Visualizing and understanding convolutional networks]
將Image丟進CNN,然後找到一些Image的部分小區域(Patches),然後找到使每一層的activation最大的patch,然後將其畫出來,就可以瞭解這一層中的這個neuron是在看/檢測什麼。
可以看到layer1基本上是基本的邊緣,或者是顏色區塊,第二層就是一些基本的形狀,例如圓形,或者是豎線pattern,或者是顏色區塊,從第三層開始,就會檢測一些更高層級的東西了,例如人、或者是輪子,或者是狗等等。但是仔細看,就會發現第四層會比第三層檢測的更加複雜。第三層偏向於複雜一些的pattern,第4層則開始檢測例如狗這樣的複雜問題。然而第4層狗都長得差不多,而第五層的狗則是各種各樣的。
Cost function
Neural sytle transfer的Cost Function是
那麼具體的方法就是:
Step1 隨機初始化G
Step2 使用梯度下降得到G
Content Cost Function
如何定義兩個圖像有相同的Content?
假定
所以:
Style Cost Function
Style Cost Function則是每一層activation中channel與channel之間的Gram Matrix,也就是協方差矩陣。
這兩個地方需要用下面兩張圖來說明。
首先activation表達的是圖像的特徵,包括紋理、顏色、或者更高層級的特徵,例如人像、內容等在空間上的分佈(這個很好理解,就是右下角有個狼唄,然後狼檢測器就在右下角activation比較大)
那麼下面這個圖中,表達的是內容一樣,但是風格不一樣,所以位置-特徵這個關係保持不變
而對於下邊這個圖,表示的是內容不一樣,但是風格一樣。關鍵是如何理解“風格”,其實風格從這幾個圖片來講,就是橫的紋理是紅色的,豎的或者斜的紋理是藍色的……
所以其實就是,如果一個地方有橫的紋理,那麼顏色來講一定是紅色的,如果一個地方是豎的紋理,那麼一定是藍色的。所以橫紋理的activation值比較大的地方,一定紅色activation也比較大。這叫做位置相關性,所以Gram Matrix可以很好地反映這一點。
結尾
所以最後就用這個Cost function做就可以了。