支持多label的caffe,有比較好的實現嗎?


最近在實現Network in Network 和 HCP,這裡邊用到了muti-label在這裡說一下自己的實現方法。我的實現方法是基於Python Layer的。

定義自己的data層,詳細見fast-rcnn/layer.py at master · rbgirshick/fast-rcnn · GitHub

通過類似的方式可以自定義label的屬性(比如維數、類型)

強烈建議利用python layer做自己想要的拓展工作,另外給我的R.B.G神的fast-rcnn做個廣告rbgirshick/fast-rcnn · GitHub,這個工程給了我們如何在caffe的基礎上做自己的擴展的範例。

當然hdf5也是一種選擇,但是我的經驗是,真的很慢。


hdf5


你還可以用兩個LMDB做,一個裝數據,另一個把你的label當做數據存進去就好了。

只需要模仿著tools/convert_imageset.cpp寫一個data和label分開存放到兩個LMDB里的代碼,訓練的時候用兩個data layer讀兩個LMDB。


kyocen/Caffe-Multi-Label已經有人做了。


不知道題主是要別人實現好的還是要自己搞,我默默提供倆自己搞的辦法。大概都是一天以內的工作量。

1)複雜版:在proto里把label的optional改成repeated,然後編譯下逐個把那一籮筐錯誤改了。

2)偷懶版:label有限,比如兩個或者三個,直接弄個和label性質差不多的變數,label_1啥的,然後改少數幾個地方就行。類似於什麼base data,什麼prefetch什麼的。

半年前的回答了。。。最近還做了別的

3)hdf5實在不能更方便。。。雖然2GB的限制有點點麻煩。。

4)這個沒自己寫過:用多個lmdb實現。以前聽說會有點問題,後來另一個人表示完全沒事。。。


問個 圖片標籤需要坐標輸入的 比如人臉關鍵點也要輸入進去 caffe怎麼弄


兩種方法:

方法1.如吳建所說,建兩個lmdb,分別存儲的是數據和對應的label,在做lmdb時注意對應好數據和label就可以了,同時兩個lmdb的datum.data一個是數據,另外一個是標籤,至於datum.label隨便填就行了(比如直接都置為0),反正在prototxt中不讀這個top就好了。

方法2.參考caffe中example中的pascal-multilabel-with-datalayer.ipynb的例子,自己寫一個讀取多標籤的python layer,因為不用權值更新所以python版本的datalayer和losslayer不會太過於影響速度,具體參考example/pycaffe/layers/pascal_multilabel_datalayers.py 中所寫,裡面需要改的只是你要讀的不同格式文件而已,大致框架不需要動,還是比較方便。

總結:方法1相對比較簡便,方法2相對比較規範,看你具體任務的需求。


如果用兩個LMDB做預測人臉關鍵點位置,如果涉及到鏡像怎麼辦?


給hdf5的點贊,不過貌似要寫自己的multi-label loss layer 和 accuracy layer?

可以用cxxnet,cxxnet/advanced.md at master · dmlc/cxxnet · GitHub

multilabel configuration · Issue #194 · dmlc/cxxnet · GitHub


新手建議用hdf5 格式,改源碼太複雜,而且容易出錯且影響到其他模塊,,現在教程太多了,,參考 深度學習框架Caffe-windows快速入門到應用視頻課程(共10課時) 倒數第二節


推薦閱讀:

如何評價谷歌最近在人臉數據集上取得驚人效果的BEGAN模型?
請問如何將深度學習Caffe做成一個動態庫,方便在其他應用程序中調用?
卷積神經網路(CNN)學習資料推薦?
如何繪製caffe訓練過程中的loss和accurary的曲線??

TAG:機器視覺 | 深度學習DeepLearning |