吳恩達Deeplearning.ai 知識點梳理(course 4,week 4)

本週是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問題了。也就是:

d(img1,img2)

反映Degree of difference between images
d(img1,img2)τ 說明是同一個人,d(img1,img2)>τ 說明不是同一個人。

如何訓練?使用Siamese network

一般的神經網絡輸出都有一個softmax之類的,在這裏,我們直接把softmax去掉,然後用最後的FC層進行判斷和計算。

假如對於x(1) 圖片而言,FC層輸出的向量是f(x(1)) ,對於於x(2) 圖片而言,FC層輸出的向量是f(x(2)) ,那麼:

d(x(1),x(2))=f(x(1))f(x(2))2

那麼最後的learning goal就是,如果是same person,那麼d就小,如果是different person,d就大。

Triplet Loss

那麼如何定義損失函數呢?使用的是triplet loss。

首先有一個Anchor圖片,是某一個人的照片記爲A;
然後在用一個Positive樣本,也是這個人的照片,但是是另一張,記爲P;
然後有一個negative樣本,是別人的一張,記爲N。

然後我們希望

d(A,P)d(A,N)0

但是這樣網絡可能學習到的是d()c ,c是一個constant。
所以我們留有一定餘量:
d(A,P)d(A,N)α, α>0

這樣我們就有一定餘量了。
所以最後的loss function就是:
L(A,P,N)=max(d(A,P)d(A,N)+α, 0)

這是因爲如果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分類問題。
或者還有一些其他形式,例如

(f(x(1))f(x(2)))2f(x(1))+f(x(2)

這個稱爲χ2 form或者χ squred similarity。

計算上的考慮

最後就是說因爲最後比的都是那個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是

J(G)=αJ(C,G)+βJ(S,G)

J(C,G) 是G和C之間的差距,J(S,G) 是S與C之間的差距。
那麼具體的方法就是:
Step1 隨機初始化G
Step2 使用梯度下降得到G
G:=GGJ(G)

Content Cost Function

如何定義兩個圖像有相同的Content?
假定l 層的activation是a[l](G)a[l](C) ,相同的內容,也就意味着activation相同,其實對於第一層就好理解,如果像素都一樣,肯定是兩個相同的圖片嘛。那麼由神經網絡提取出特徵(內容)之後,activation就是內容的一種表達。
所以:

J(C,G)=12n[l]Hn[l]Wn[l]Ca[l](G)a[l](C)

Style Cost Function

Style Cost Function則是每一層activation中channel與channel之間的Gram Matrix,也就是協方差矩陣。

G[l]kk=i=1n[l]Hj=1n[l]Wa[l]ijka[l]ijk

J(C,G)=14n[l]Hn[l]Wn[l]CkkG[l](S)G[l](G)

這兩個地方需要用下面兩張圖來說明。
首先activation表達的是圖像的特徵,包括紋理、顏色、或者更高層級的特徵,例如人像、內容等在空間上的分佈(這個很好理解,就是右下角有個狼唄,然後狼檢測器就在右下角activation比較大)
那麼下面這個圖中,表達的是內容一樣,但是風格不一樣,所以位置-特徵這個關係保持不變

而對於下邊這個圖,表示的是內容不一樣,但是風格一樣。關鍵是如何理解“風格”,其實風格從這幾個圖片來講,就是橫的紋理是紅色的,豎的或者斜的紋理是藍色的……
所以其實就是,如果一個地方有橫的紋理,那麼顏色來講一定是紅色的,如果一個地方是豎的紋理,那麼一定是藍色的。所以橫紋理的activation值比較大的地方,一定紅色activation也比較大。這叫做位置相關性,所以Gram Matrix可以很好地反映這一點。

結尾

所以最後就用這個Cost function做就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章