深度學習第四周--第四課人臉識別、神經風格轉移理論

在這裏插入圖片描述

前言

本文的結構是:

  • 人臉識別
    • siames網絡
    • triple損失
  • 神經風格遷移

人臉識別

要做一個人臉識別系統:人臉識別+活體檢測
人臉驗證:1:1問題
人臉識別:1:N問題

one-shot學習

what:
數據庫中每個人的訓練樣本只包含一張圖片,然後訓練一個cnn網絡來進行人臉識別。
缺點:
1、樣本少:每個人只有一張照片,cnn網絡不夠健壯
2、不夠靈活:若數據庫增加一個人,輸出層softmax維度就會發生變化,相當於重新構建cnn網絡。
solution:
相似函數similarity function。
例子,假設數據庫有4張公司的員工照片,現在假設某個人來到辦公室,並想通過帶有人臉識別系統的柵門。
系統需要做的是僅通過一張已有的某個人的照片,來識別前面這個人確實是該員工,相反,若機器看到一個不在數據庫裏的人,機器應該分辨出她不是數據庫中四個人之一。
所以在一次學習問題中,只能通過一個樣本進行學習。
解決辦法:
planA:將人的照片放進卷積神經網絡中,使用softmax單元輸出4種,或者5種標籤,分別對應這4個人,或者4個都不是,但是這個方法不靈活,每增加一個新員工,還得重新訓練卷積神經網絡。–人臉驗證與二分類。
planB:學習similarity函數,學習函數d,d(img1,img2)=degree of difference between images,通過輸入一對圖片,將會告訴你這兩張圖片是否是同一個人,如果之後有新人加入,你只需要將他的照片加入你的數據庫,系統依然能照常工作。–人臉驗證與similarity函數、三元組損失。
具體來說,輸入兩張人臉,機器告訴你它們的相似度。

siamese網絡

what:
若一張圖片經過一般的cnn網絡,最終得到FC,則該FC層可以看作原始圖片的編碼encoding,這表現了原始圖片的關鍵特徵。每張圖片經過siamese network後,由FC每個神經元來表徵。
公式:
d(x(1)x(2))=f(x(1)f(x(2)))22d(x^{(1)}和x^{(2)})=||f(x^{(1)}-f(x^{(2)}))||_2^2
在這裏插入圖片描述
例子:建立一個人臉識別系統的方法是,如果要比較兩個圖片的話,例如這裏的第一張和第二張,你要做的就是把第二張圖片餵給有同樣參數的同樣的神經網絡,然後得到一個不同的128維的向量,這個向量代表或者編碼第二個圖片。
這些編碼就是這兩個圖片的關鍵特徵,你要做的就是定義d,將x(1)x^{(1)}x(2)x^{(2)}的距離定義爲這兩幅圖片的編碼之差的範數,d(x(1)d(x^{(1)}x(2))=f(x(1)f(x(2)))22x^{(2)})=||f(x^{(1)}-f(x^{(2)}))||_2^2
如何訓練這個siamese神經網絡呢?因爲這兩個網絡有相同的參數,所以我們需要訓練一個網絡,它計算得到的編碼可以用於函數d,它可以告訴你兩張圖片是否是同一個人。

三元組損失函數(triplet損失)

爲了得到優質的人臉圖片編碼,所以定義三元組損失函數然後應用梯度下降。
在這裏插入圖片描述
看一個anchor圖片,想讓anchor圖片和positive圖片(positive意味着這是同一個人)的距離很接近,想讓anchor圖片和negative圖片(negative意味着這不是同一個人)的距離得更遠。
所以這就叫做三元組損失,它代表你會同時看三張圖片,需要看anchor圖片、positive圖片、negative圖片,簡寫爲A、P、N。
公式:f(A)f(P)2f(A)f(N)2||f(A)-f(P)||^2 \leq||f(A)-f(N)||^2
爲了確保網絡對於所有的編碼不會總是輸出0,也爲了確保它不會把所有的編碼都設成互相相等的,所以公式變爲:
f(A)f(P)2+αf(A)f(N)2||f(A)-f(P)||^2 +\alpha\leq||f(A)-f(N)||^2
即:
f(A)f(P)2f(A)f(N)2+α0||f(A)-f(P)||^2 -||f(A)-f(N)||^2+\alpha\leq0
接着要定義損失函數:
L(A,P,N)=max(f(A)f(P)2f(A)f(N)2+α,0)L(A,P,N)=max(||f(A)-f(P)||^2 -||f(A)-f(N)||^2+\alpha,0)
一方面,max函數的作用就是,損失函數就是0,只要能使括號左邊部分小於等於0。
另一方面,如果括號左邊部分是最大值,這樣會得到一個正的損失值,通過最小化這個損失函數達到的效果就是使括號左邊部分小於等於0,只要這個損失函數小於等於0,網絡不會關心它負值有多大。

人臉識別與二分類

what:
將兩個siamese network網絡組合在一起,將各自的編碼層輸出經過一個邏輯輸出單元,該神經網絡使用sigmoid函數,輸出1表示識別爲同一人,輸出0表示識別爲不同人。
公式:
y^=σ(k=1K)wkf(x(i))kf(x(j))k+b)\hat y=\sigma(\sum_{k=1}^K)w_k|f(x^{(i)})_k-f(x^{(j)})_k|+b)
其中參數wkw_k和b都是通過梯度下降算法迭代訓練得到。
y^=σ(k=1K)wk(f(x(i))kf(x(j))k)2f(x(i))k+f(x(j))k+b)\hat y=\sigma(\sum_{k=1}^K)w_k\frac{(f(x^{(i)})_k-f(x^{(j)})_k)^2}{f(x^{(i)})_k+f(x^{(j)})_k}+b)

神經風格遷移

什麼是神經風格遷移?
在這裏插入圖片描述
例如,C代表舊金山的金門大橋(內容圖像),S代表畢加索風格的圖像(風格圖像),然後把兩張圖像結合起來,得到G這張畢加索風格的金門大橋。
爲了實現神經風格遷移,需要知道卷積網絡提取的特徵,在不同的神經網絡,深層的、淺層的。

深度卷積網絡學習什麼?

假如你訓練了一個卷積神經網絡,你希望能看到不同層之間隱藏單元的計算結果。
不同層的隱藏單元從檢測簡單的事物到複雜的事物,比如說,第一層的邊緣,第二層的質地,第深層的複雜物體。

代價函數

代價函數分爲兩個部分:
Jcontent(C,G)J_{content}(C,G)
第一部分爲內容代價,這是一個關於內容圖片和生成圖片的函數,用來度量生成圖片G的內容與內容圖片C的內容有多相似。
Jstyle(S,G)J_{style}(S,G)
然後會把結果加上一個風格代價函數,也就是關於S和G的函數,用來度量圖片G的風格和圖片S的風格的相似度。
J(G)=αJcontent(C,G)+βJstyle(S,G)J(G)=\alpha J_{content}(C,G)+\beta J_{style}(S,G)
用兩個超參數α\alphaβ\beta來確定內容代價和風格代價,兩者之間的權重用兩個超參數來確定。

流程:
隨機初始化生成圖像G,然後使用之前定義的代價函數J(G),再使用梯度下降的方法將其最小化,更新G:G=GJ(G)G=\frac{\partial}{\partial G}J(G),在這個步驟中,實際上更新的是圖像G的像素值。

內容代價函數

假設需要衡量內容圖片和生成圖片在內容上的相似度,令a[l][C]a^{[l][C]}a[l][G]a^{[l][G]},代表這兩個圖片C和G的l層的激活函數值,如果這個兩個激活值相似,那麼就意味着兩個圖片的內容相似。定義Jcontent(C,G)=12a[l][C]a[l][G]2J_{content}(C,G)=\frac{1}{2}||a^{[l][C]}-a^{[l][G]}||^2,爲兩個激活值不同或者相似的程度,取l層的隱含單元的激活值,按元素相減,內容圖片的激活值與生成圖片相比較,然後取平方,也可以在前面加上歸一化或者不加。如果對J(G)做梯度下降來找G的值時,整個代價函數會激勵這個算法來找到圖像G,使得隱含層的激活值和你內容圖像相似。

風格代價函數

將圖片的風格定義爲l層中各個通道之間激活項的相關係數。
計算不同通道的相關性,反映原始圖片特徵間的相互關係,從某種程度上刻畫了圖片的“風格”。
Gkk[l][S]=i=1nH[l]j=1nW[l]ai,j,k[l](S)ai,j,k[l](S)G_{kk^{'}}^{[l][S]}=\sum_{i=1}^{n_H^{[l]}}\sum_{j=1}^{n_W^{[l]}}a_{i,j,k}^{[l](S)}a_{i,j,k^{`}}^{[l](S)}
用符號i,j表示下界,對i,j,k位置的激活項ai,j,k[l]a_{i,j,k}^{[l]},乘以同樣位置的激活項,也就是ijki,j,k^{`}位置的激活項,即ai,j,k[l]a_{i,j,k^{`}}^{[l]},將它們兩個相乘,然後i和j分別加到l層的高度和寬度,即nH[l]n_H^{[l]}nW[l]n_W^{[l]},將這些不同位置的激活項都加起來,(i,j,k)和(i,j,kk^{'})中x座標和y座標分別對應高度和寬度,將k通道和kk^{'}通道上這些位置的激活項都進行相乘。
Gkk[l](S)=i=1nH[l]j=1nW[l]ai,j,k[l](S)ai,j,k[l](S)G_{kk^{'}}^{[l](S)}=\sum_{i=1}^{n_H^{[l]}}\sum_{j=1}^{n_W^{[l]}}a_{i,j,k}^{[l](S)}a_{i,j,k^{`}}^{[l](S)}
Gkk[l](G)=i=1nH[l]j=1nW[l]ai,j,k[l](G)ai,j,k[l](G)G_{kk^{'}}^{[l](G)}=\sum_{i=1}^{n_H^{[l]}}\sum_{j=1}^{n_W^{[l]}}a_{i,j,k}^{[l](G)}a_{i,j,k^{`}}^{[l](G)}
同時對風格圖像S和生成圖像G都進行這個運算,最後,將S和G代入到風格代價函數中去計算,將得到這兩個矩陣之間的誤差,因爲它們是矩陣,所以在這裏加一個F(frobenius範數,編號1所示),這實際上是計算兩個矩陣對應元素相減的平方的和,把式子展開,從k和kk^{'}開始作差,把對應式子寫下來,然後把得到的結果都加起來,在此使用了一個歸一化常數,也就是12nH[l]nW[l]nC[l]\frac{1}{2n_H^{[l]}n_W^{[l]}n_C^{[l]}},再在外面加一行平方。
Jstyle[l](S,G)=1(2nH[l]nW[l]nC[l])2kk(Gkk[l](S)Gkk[l](G))J_{style}^{[l]}(S,G)=\frac{1}{(2n_H^{[l]}n_W^{[l]}n_C^{[l]})^2}\sum_k\sum_{k^{'}}(G_{kk^{'}}^{[l](S)}-G_{kk^{'}}^{[l](G)})

一維到三維推廣

卷積神經網絡,也適用於1維數據,例如心電圖,也適用於3維數據,例如CT掃描。

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