1. 程式人生 > >SphereFace演算法詳解,公式的講解 SphereFace演算法詳解

SphereFace演算法詳解,公式的講解 SphereFace演算法詳解

SphereFace演算法詳解

2017年08月09日 08:19:31 閱讀數:9129
																														</div>
			<div class="operating">
													</div>
		</div>
	</div>
</div>
<article class="baidu_pl">
	<div id="article_content" class="article_content clearfix csdn-tracking-statistics" data-pid="blog" data-mod="popu_307" data-dsm="post">
							<div class="article-copyright">
				版權宣告:本文為博主原創文章,未經博主允許不得轉載。					https://blog.csdn.net/u014380165/article/details/76946380				</div>
							            <div id="content_views" class="markdown_views prism-atom-one-dark">
						<!-- flowchart 箭頭圖示 勿刪 -->
						<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path></svg>
						<p>論文:SphereFace: Deep Hypersphere Embedding for Face Recognition <br>

論文連結:https://arxiv.org/abs/1704.08063

程式碼地址:https://github.com/wy1iu/sphereface

這篇是CVPR2017的文章,用改進的softmax做人臉識別,改進點是提出了 angular softmax loss(A-softmax loss)用來改進原來的softmax loss。如果你瞭解large margin softmax loss(作者和A-softmax loss是同一批人),那麼A-softmax loss簡單講就是在large margin softmax loss的基礎上添加了兩個限制條件||W||=1和b=0,使得預測僅取決於W和x之間的角度。

Figure2中展示的是用一個CNN網路提取特徵,然後將提取到的特徵在類別間的分佈展示出來。(a)和(b)是softmax loss的結果;(c)和(d)是限制W1和W2向量的模等於1,而且b1和b2偏置等於0,稱為modified softmax loss;(e)和(f)是本文的angular softmax loss,後面詳細介紹。接下來介紹Figure2圖的含義:圖中特徵是2維的,對應橫座標,畢竟二維的容易觀察,這可以通過將最後一個提特徵層(假設最後一個特徵提取層是卷積層,那麼就將卷積核數量設定為2)就能得到,因此對於一張輸入影象,就能得到1*2維度的特徵向量,就可以在二維座標空間中畫出來這個點了,對應Figure2(a)、(c)、(e)中的點。最後接一個全連線層,對於Figure2中的二分類而言(一個類別是黃色點,另一個類別是紅色點),全連線層的維度就是2*2,後面一個2就是類別的意思。再看看(b),W1和W2分別是I*2的向量,合在一起就是2*2的全連線層引數,因此W1和W2的箭頭位置所在的座標就是1*2向量的值,這樣就可以畫出圖中的紅色箭頭了,至於中間的紅色線,就是分類界限。同理(d)中W1和W2的模等於1,特徵點之所以類似圓形是將(c)中的特徵點變換成模為1的特徵點;(e)、(f)的含義和(c)、(d)的含義同理。

這裡寫圖片描述

接下來介紹A-softmax loss的內容。還是先從softmax loss開始講起。假設一個二分類問題,那麼下面的公式1和2分別表示樣本x屬於類別1和類別2的概率,這個計算的過程就是softmax。這裡的W1和W2都是向量,二者合在一起組成全連線層的引數矩陣W,也就是W=[W1,W2],全連線層的輸出也就是Wx。假設輸出的尺寸是m*n,那麼m就表示batch size,n表示類別數,所以這裡的W1x和W2x就分別是Wx的兩列。偏置b比較簡單就不詳細說了。因此如果p1大於p2,那麼x屬於類別1。

這裡寫圖片描述

這個時候可以聯想到文章前面提到的一個公式:

這裡寫圖片描述

文章說這是softmax的decision boundary,怎麼理解呢?其實就是p1=p2的情況,此時W1x+b1=W2x+b2。如果p1>p2,從p1和p2的公式可以看出二者的分母是一樣的,分子都是以e為底的指數函式,是遞增的,因此就相當於W1x+b1>W2x+b2

公式1和2只是softmax,並不是softmax loss,這兩者是有差別的,一個是概率,一個是損失。softmax loss的公式如下:

這裡寫圖片描述

公式3的log函式的輸入就是前面公式1和2的p1和p2,只不過不需要分開寫成W1和W2,而是用W就行。這裡yi表示某個類別,j表示所有類別。

公式4是將Li展開來寫,並且引入了角度引數:

這裡寫圖片描述

為什麼公式4的上下兩個等式是成立的?因為可以將矩陣相乘:

這裡寫圖片描述

寫成:

這裡寫圖片描述

非常容易理解吧。

那麼如果引入下面這兩個限制條件呢?

這裡寫圖片描述

這裡寫圖片描述

那麼公式3(結合公式4和上面兩個限制條件看)就會變成:

這裡寫圖片描述

那麼為什麼要引入這兩個限制條件呢?原來的decision boundary是這樣的:

這裡寫圖片描述

如果有上面的兩個限制條件,那麼decision boundary就變成了:

這裡寫圖片描述

也就是說邊界的確定變成只取決於角度了,這樣就能簡化很多問題。而且從Figure2也可以看出這種操作對分類結果有促進作用。

在這兩個限制條件的基礎上,作者又添加了和large margin softmax loss一樣的角度引數,使得公式5變成如下的公式6:

這裡寫圖片描述

這部分可以參考損失函式改進之Large-Margin Softmax Loss,基本一樣。顯然m值越大,優化的難度也越大,但類別之間的angular margin也越大,也就是類間距離越大,同時類內距離越小,因此模型效果越好。本文中引數m預設取4。

因為在公式6中需要限定θy的範圍為[0,π/m],因此為了去掉這個限制,就有了公式7這種能夠在CNN網路中優化的公式。
這裡寫圖片描述

公式7也就是作者文中最終使用的loss公式。因此A-softmax loss可以看成是large margin softmax loss的改進版,也就是在large margin softmax loss的基礎上添加了兩個限制條件。

Table1是關於本文提到的3個loss的分類界限(decision boundary)對比,可以看出softmax loss的優化是對W和x的內積進行的;modified softmax loss(也就是限制Wi的模為1,bi為0)的優化是對角度θi進行的;A-softmax loss的優化也是對θi進行,而且優化目標更加難(引入m引數,優化後在類別之間會得到angular margin)。
這裡寫圖片描述

Figure3表示從幾何角度看A-softmax loss。

這裡寫圖片描述

後面作者還通過數學公式證明了對於二分類,m的最小值要滿足下面這個不等式:

這裡寫圖片描述

對於多分類,m的最小值要滿足下面這個不等式:

這裡寫圖片描述