Facenet即triplet network模型訓練,loss不收斂的問題?
問下,有沒有人調試過triplet network(也就是google的facenet的那個model),求傳授點調試參數的經驗。。。怎麼調試loss都很詭異的在變化。。。有沒有遇到過同樣問題的人。。。
------------------------奇怪的分割線---------------------因為自己要是用的自己寫的新的cnn-modified,然後用類似的triplet network去做訓練。讀入數據也是三元組。想請教下有過類似調試參數經驗的大神,因為之前有聽說過triplet 比較難調試。更何況,我改了model的一些東西,可能更難調試了。所以,希望各位大神指教一下。
謝啦~
一個常見的錯誤:看看你的triplet是怎麼選的?要選最近的k個imposters - 如果k太大了,甚至把所有的imposter都選了,就會不收斂。
兄弟,我調整了網路結構,後來發現自己並沒有做L2 normalize,但是現在做training依舊是有問題,loss一直在0.5左右,margin取1。原先以為是樣本沒有做hard-positive的篩選,現在做了,但是依舊是沒有收斂,不知道是什麼原因了,我的data有6000張的人臉,471個identity。按理說應該這麼小的數據集,應該很容易就收斂才對……
========華麗的分割線==========
通過在minibatch中加入a-p的組對,實現online的sample triplet select。
有興趣的朋友請參見GitHub - pinguo-luhaofang/tripletloss: tripletloss in caffe
看了各位老大的評論收益很多。從我個人的經驗來說,提出幾點總結:1.樣本要多,其中人數要在12000人以上,最好有2000-3000個東方人,每個人的樣本數量要均衡,不均衡就用各種隨機的圖像處理演算法去生成,別怕麻煩2.batchnorm一定要加,而且不要相信論文里說的可以去掉dropout或減小weight_decay,batchnorm的抗過擬合能力實際上是不足的,所以dropout建議設在60%以上3.處理樣本用的人臉檢測演算法非常重要,關鍵點檢測演算法次之,因為前者是後者存在的基礎,總之,儘可能對齊更多的臉。
4.度量學習是必要的,但是千萬不要重頭訓練,要在現有模型上加上embedding層進行微調訓練,這一層的學習率要是前面層次的10-30倍不等,但總學習率要小,當然每個模型情況不同。
5.triplet loss有先天的弊端,但是大家可以去嘗試其它幾種度量學習啊,你們懂得......。7.如果你想在lfw上一決高下,多個網路共同決策是必要的,可以在臉上切子區域,也可以同一數據集不同網路,也可以不同數據集不同網路,要試驗再試驗。6.lfw99.5%不是夢想,大家努力.保證選出來的錯配樣本距離小於同個樣本內的距離,即是選比較難訓練的:
可能是因為網路太深了,導致初始時刻最後一層的輸出和輸入之間幾乎無關聯,損失函數陷入了局部極小值,可以減小網路、使用遷移學習、或者ResNet的方法。另外使用Adam演算法可能有所改善。
在做人臉識別 請問caffe 里 triple loss 重新編譯過後 .prototxt文件怎麼修改呢
同問,其實我感覺0.5的原因是margin設成了1,並且輸出所有樣本的特徵全部一樣,就會造成所有樣本距離都為0,那麼BP回傳的梯度也為0,就會使得loss不再變化。但是不知道如何才能解決這一問題,求解答
你好 請問想使用triplet loss應該怎麼修改層數 輸入的blob應該怎麼設置呢?謝謝
我也不懂這個,求給位告知····
你好,我最近在看triplet network, 請問這個訓練網路的數據的label應該如何處理了?謝謝
可以考慮將margin值設置大一點
https://weixin.qq.com/g/ASSy2x5hRwRgarye (二維碼自動識別)
遇到了同樣的問題,BP回傳值是0
推薦閱讀:
※卷積神經網路(CNN)中卷積層與池化層如何進行BP殘差傳遞與參數更新?
※訓練集準確率接近100%,驗證集準確率80%但是隨著訓練step增加不增也不降。算是過擬合還是欠擬合?
※caffe里的clip gradient是什麼意思?
※GPU對CNN計算的加速原理到底是怎樣的?
※對深度學習的理解達到什麼水平才能應聘大型互聯網公司的機器學習相關崗位?
TAG:人臉識別 | 深度學習DeepLearning | Caffe深度學習框架 |