人臉識別 如何訓練tripletloss

2021-08-14 06:22:14 字數 1608 閱讀 4044

本篇**來自獵戶星空這家公司

**位址

google的facenet採用800萬人,2億資料,每個batchsize為1800進行訓練。

然而有用如此資料的公司少之又少。下圖展示了乙個當每一類人數與準確率的關係。

可見當資料量缺乏的情況下,使用tripletloss不但不會提高,還會降低。

如上圖所示:triplet是乙個三元組,包括anchor,negative,positive。從訓練樣本選取乙個樣本作為anchor,然後選取和anchor同一類的乙個樣本作為positive。不同類的某個樣本作為negtive。tripletloss方法的目的就是使類內更近,類間變得更加遠。由公式可表示如下:

最終tripletloss為:

如下圖所示,這是常用的三種訓練策略。

第一種方法輸入時就組成三元組。即輸入的batch為3的倍數,但此時由於negtive是隨機採的,導致乙個batch中hard negative較少,最終是easy negative優化,效果不好。

這個策略應該是常用的策略,即從乙個batch中尋找滿足下面公式的三元組。但存在乙個問題,乙個batch並不能覆蓋所有的三元組情況。乙個batch中有效的三元組數量有限,因此也不能訓練出來乙個好結果。

為了使得乙個batch中,hard negative數量多,很自然的想法就是想找出那些類特別相似。解決方法就是通過聚類實現。流程如下:

計算每乙個類的中心。

使用kmeans方法將訓練聚成m類。

從離自己相近的簇中尋找hard negative。這樣乙個batch中將會形成更多的hard 三元組。

本篇文章在訓練tripletloss策略上使用聚類的方法尋找hard negative,在微軟資料集上進行訓練得到提公升。後期可以將其結合sphereface進行看是否有提公升。

opencv 人臉檢測 模型訓練 人臉識別

人臉檢測 模型訓練 人臉識別 2018 08 15 今天給大家帶來一套人臉識別乙個小案例,主要是幫助小夥伴們解決如何入門opencv人臉識別的問題,現在的ai行業比較火熱,ai技術的使用比較廣泛。就拿現在的只能手機來說吧,現在很多智慧型手機都必須有人臉識別解鎖 拍照自動美顏 拍照物體識別等等功能,這...

opencv 人臉識別 (二)訓練和識別

環境 vs2010 opencv 2.4.6.0 特徵 eigenface input 乙個人臉資料庫,15個人,每人20個樣本 左右 output 人臉檢測,並識別出每張檢測到的人臉。1.為訓練資料預處理 為灰度 對齊 歸一化 void resizeandtogray char dir,int k...

Python如何實現人臉識別

usr bin python3 coding utf 8 import cv2 import sys class opencvs def main self int 0 cap cv2.videocapture 0 告訴opencv使用人臉識別分類器 classfier cv2.cascadecla...