pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 一般來說,人臉識别分三步走:
- 找人臉:圖檔中找出含人臉的區域框出來
- 對齊人臉:将人臉的眼鏡鼻子嘴巴等标出來,以此作為依據對齊人臉
- 識别:将對齊的人臉進行識别,判定這張臉究竟是誰
本篇要介紹的損失函數,用于第三步驟,聚焦于更準确地識别這張臉究竟屬于誰,本質上屬于一個分類問題。
一言以蔽之ArcFace、SphereFace、CosFace三個損失函數相對于前輩們而言,改進的一個核心思路就是:
隻有平常(train)更刻苦的訓練,才有可能在比賽中(test)中得到更好的結果。 它們都對卷積神經網絡提出了更高的目标,在訓練階段更為艱難,也是以讓其成為了一個更好的分類器。
一、從前輩說起
首先談談他們的前輩:
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 維基百科介紹:
Softmax函數 ,或稱 歸一化指數函數 [1],是邏輯函數的一種推廣。它能将一個含任意實數的K維向量
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... “壓縮”到另一個K維實向量
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 中,使得每一個元素的範圍都在
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 之間,并且所有元素的和為1。該函數的形式通常按下面的式子給出:
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace...
簡單來說 softmax 将一組向量進行壓縮,使得到的向量各元素之和為 1,而壓縮後的值便可以作為置信率,是以常用于分類問題。另外,在實際運算的時候,為了避免上溢和下溢,在将向量丢進softmax之前往往先對每個元素減去其中最大值,即:
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 想了解更多,可以參考:憶臻:softmax函數計算時候為什麼要減去一個最大值?
再談談一個容易搞混的東西:
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 上面我們丢入一個長度為
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 的
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 向量,得到
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... ,而softmax loss呢,則是:
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 其中
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 是一個長度為
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 的one-hot向量,即
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... ,隻有ground truth對應的
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 。是以也可以簡寫為:
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 到這裡我們不妨在看看交叉熵
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... :
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 其中
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 是真實分布,在分類任務中,
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 實際上等價于上面的
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 。而
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 則是預測分布,在分類任務中
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 實際上等價于上面的
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 。這樣一來進行化簡就得到:
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 我咋覺得這麼眼熟呢...
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 是以,我們可以得到:
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 參考連結: https:// blog.csdn.net/u01438016 5/article/details/77284921
二、SphereFace
論文位址: https:// arxiv.org/pdf/1704.0806 3.pdf
要想增強
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 的分類能力,其實就是要在分布上做到兩點:
- 讓同類之間距離更近
- 讓不同類之間距離更遠
不妨繼續看看
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... :
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 其中
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 代表兩個向量
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 之間的夾角,如果對
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 歸一化,将偏置
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 置為0,即
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... ,則有:
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 下标
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 表示
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 。
對于
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 我們乘上一個大于等于1的整數
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... :
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 這樣不僅放大了類之間的距離,也因放大了同類
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 與
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 之間的間隔而使類内更聚攏。
不過上述公式仍有問題:原來的
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... ,如今
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 超出了向量之間的夾角函數
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 定義域範圍
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 咋辦?
那就變個函數呗,把n個cos怼起來變成一個遞減的連續的函數:
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 這樣一來:
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 如此我們就得到了SphereFace的損失函數
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 原論文則是:
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 其中
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 表示第
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 個樣本,
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 表示第
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 個樣本的
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 标簽,
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 表示第
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 和樣本
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 之間的夾角。
論文中的可視化圖檔:
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace...
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace...
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace...
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... Pytorch代碼實作:
# SphereFace
三、CosFace
論文位址: https:// arxiv.org/pdf/1801.0941 4.pdf
和SphereFace類似,CosFace也是從
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 的餘弦表達形式入手,令
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 。與此同時,作者發現
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 對于分類并沒有啥幫助,是以幹脆将其固定
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... ,是以有:
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace...
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 應該代表歸一化的
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 。
接下來與上文
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 類似的是也引入了常數
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... ,不同的是這裡的
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 是加上去的:
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace...
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace...
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace...
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace...
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 以上我們就得到了CosFace中提出的
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace...
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 代碼實作:
# CosFace
四、ArcFace
論文位址: https:// arxiv.org/pdf/1801.0769 8.pdf
話不多說,直接上公式:
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace...
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace...
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace...
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace...
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 可以看到和CosFace非常類似,隻是将
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 作為角度加上去了,這樣就強行拉大了同類之間的角度,使得神經網絡更努力地将同類收得更緊。
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 僞代碼實作步驟:
- 對
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 進行歸一化 - 對
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 進行歸一化 - 計算
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 得到預測向量
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... - 從
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 中挑出與ground truth對應的值 - 計算其反餘弦得到角度
- 角度加上m
- 得到挑出從
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 中挑出與ground truth對應的值所在位置的獨熱碼 - 将
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 通過獨熱碼放回原來的位置 - 對所有值乘上固定值
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace...
代碼實作:
# ArcFace
到此ArcFace、SphereFace、CosFace的損失函數就介紹完啦~
參考連結:https://blog.csdn.net/fuwenyan/article/details/79657738
歡迎關注個人微信公衆号:
pytorch如何定義損失函數_人臉識别損失函數簡介與Pytorch實作:ArcFace、SphereFace、CosFace... 歡迎掃碼關注~