前言
本文的結構是:
- 人臉識別
- 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每個神經元來表徵。
公式:
例子:建立一個人臉識別系統的方法是,如果要比較兩個圖片的話,例如這裏的第一張和第二張,你要做的就是把第二張圖片餵給有同樣參數的同樣的神經網絡,然後得到一個不同的128維的向量,這個向量代表或者編碼第二個圖片。
這些編碼就是這兩個圖片的關鍵特徵,你要做的就是定義d,將和的距離定義爲這兩幅圖片的編碼之差的範數,和。
如何訓練這個siamese神經網絡呢?因爲這兩個網絡有相同的參數,所以我們需要訓練一個網絡,它計算得到的編碼可以用於函數d,它可以告訴你兩張圖片是否是同一個人。
三元組損失函數(triplet損失)
爲了得到優質的人臉圖片編碼,所以定義三元組損失函數然後應用梯度下降。
看一個anchor圖片,想讓anchor圖片和positive圖片(positive意味着這是同一個人)的距離很接近,想讓anchor圖片和negative圖片(negative意味着這不是同一個人)的距離得更遠。
所以這就叫做三元組損失,它代表你會同時看三張圖片,需要看anchor圖片、positive圖片、negative圖片,簡寫爲A、P、N。
公式:。
爲了確保網絡對於所有的編碼不會總是輸出0,也爲了確保它不會把所有的編碼都設成互相相等的,所以公式變爲:
即:
接着要定義損失函數:
一方面,max函數的作用就是,損失函數就是0,只要能使括號左邊部分小於等於0。
另一方面,如果括號左邊部分是最大值,這樣會得到一個正的損失值,通過最小化這個損失函數達到的效果就是使括號左邊部分小於等於0,只要這個損失函數小於等於0,網絡不會關心它負值有多大。
人臉識別與二分類
what:
將兩個siamese network網絡組合在一起,將各自的編碼層輸出經過一個邏輯輸出單元,該神經網絡使用sigmoid函數,輸出1表示識別爲同一人,輸出0表示識別爲不同人。
公式:
其中參數和b都是通過梯度下降算法迭代訓練得到。
神經風格遷移
什麼是神經風格遷移?
例如,C代表舊金山的金門大橋(內容圖像),S代表畢加索風格的圖像(風格圖像),然後把兩張圖像結合起來,得到G這張畢加索風格的金門大橋。
爲了實現神經風格遷移,需要知道卷積網絡提取的特徵,在不同的神經網絡,深層的、淺層的。
深度卷積網絡學習什麼?
假如你訓練了一個卷積神經網絡,你希望能看到不同層之間隱藏單元的計算結果。
不同層的隱藏單元從檢測簡單的事物到複雜的事物,比如說,第一層的邊緣,第二層的質地,第深層的複雜物體。
代價函數
代價函數分爲兩個部分:
第一部分爲內容代價,這是一個關於內容圖片和生成圖片的函數,用來度量生成圖片G的內容與內容圖片C的內容有多相似。
然後會把結果加上一個風格代價函數,也就是關於S和G的函數,用來度量圖片G的風格和圖片S的風格的相似度。
用兩個超參數和來確定內容代價和風格代價,兩者之間的權重用兩個超參數來確定。
流程:
隨機初始化生成圖像G,然後使用之前定義的代價函數J(G),再使用梯度下降的方法將其最小化,更新G:,在這個步驟中,實際上更新的是圖像G的像素值。
內容代價函數
假設需要衡量內容圖片和生成圖片在內容上的相似度,令和,代表這兩個圖片C和G的l層的激活函數值,如果這個兩個激活值相似,那麼就意味着兩個圖片的內容相似。定義,爲兩個激活值不同或者相似的程度,取l層的隱含單元的激活值,按元素相減,內容圖片的激活值與生成圖片相比較,然後取平方,也可以在前面加上歸一化或者不加。如果對J(G)做梯度下降來找G的值時,整個代價函數會激勵這個算法來找到圖像G,使得隱含層的激活值和你內容圖像相似。
風格代價函數
將圖片的風格定義爲l層中各個通道之間激活項的相關係數。
計算不同通道的相關性,反映原始圖片特徵間的相互關係,從某種程度上刻畫了圖片的“風格”。
。
用符號i,j表示下界,對i,j,k位置的激活項,乘以同樣位置的激活項,也就是位置的激活項,即,將它們兩個相乘,然後i和j分別加到l層的高度和寬度,即和,將這些不同位置的激活項都加起來,(i,j,k)和(i,j,)中x座標和y座標分別對應高度和寬度,將k通道和通道上這些位置的激活項都進行相乘。
同時對風格圖像S和生成圖像G都進行這個運算,最後,將S和G代入到風格代價函數中去計算,將得到這兩個矩陣之間的誤差,因爲它們是矩陣,所以在這裏加一個F(frobenius範數,編號1所示),這實際上是計算兩個矩陣對應元素相減的平方的和,把式子展開,從k和開始作差,把對應式子寫下來,然後把得到的結果都加起來,在此使用了一個歸一化常數,也就是,再在外面加一行平方。
一維到三維推廣
卷積神經網絡,也適用於1維數據,例如心電圖,也適用於3維數據,例如CT掃描。