1. 程式人生 > >深度學習triplet loss 做人再識別(person-reid)

深度學習triplet loss 做人再識別(person-reid)

最近需要做這個課題,採用深度學習做,廢話不多說,直接說一下我的思路以及遇到的問題,希望能有人交流一下(哭,效果一直不好,找不到原因)。

主要是參照cvpr的這篇論文Person Re-Identification by Multi-Channel Parts-Based CNN with Improved Triplet Loss Function.pdf(連結http://z-yt.net/tmp/cvpr2016/content/papers/8851b335.pdf)。按照論文中的說法,其最簡單的用原始triplet loss和一個網路分支在VIPER資料庫上就能達到top1 34%的正確率。可是臣妾經過一番折騰,表示做不到啊,相同的網路和loss我的top1在15%左右,差距簡直不要太大。(我的batch設為30)

我做深度學習用的是caffe,tripletloss層參考的是 部落格http://blog.csdn.net/tangwei2014/article/details/46812153中的寫法,另外我在triplet loss層前面又加上了一個select層用於將anchor、positive、negative分成三個輸出作為loss層的輸入。則樣本的組織形式為如下
anchor1
anchor2
positive1
positive2
negative1
negative2
此處拿batchsize為6來舉例,則一共有兩對triplet三元組,(anchor1,positive1,negative1)和(anchor2,positive2,negative2),他們是一一對應的在一個批次中,當然這在組織imag_data的輸入list中得事先組織好三元組。另外修改過的地方還有data_transformer.cpp加入了可以隨機crop不同寬高的程式碼。