8

我需要一些幫助來創建一個帶有圖像和標籤文本文件的純文本目錄中的連體CNN的CaffeDB。最好的將是一個python的方式來做到這一點。
問題不在於瀏覽目錄和製作圖像對。我的問題更多的是從這些對中創建一個CaffeDB。
到目前爲止,我只使用convert_imageset從圖像目錄中創建CaffeDB。
感謝您的幫助!如何爲圖像目錄中的連體網絡創建CaffeDB訓練數據

+0

你打算使用什麼損失層? – Shai

+0

我還不知道。對於我的用例,我爲每個類(4 +垃圾類)提供了一些圖像(100k),我希望網能更好地區分類。使用「正常」的線性CNN,網絡上出現了很多錯誤,我想嘗試一個連接CNN的網絡,讓網絡更好地瞭解差異。 如果您對良好的損失層有一些建議,請告訴我。 – Feuerteufel

+0

對比損失層似乎適合這種用例。 – Shai

回答

7

爲什麼不簡單地使用舊的convert_imagest製作兩個數據集?

layer { 
    name: "data_a" 
    top: "data_a" 
    top: "label_a" 
    type: "Data" 
    data_param { source: "/path/to/first/data_lmdb" } 
    ... 
} 
layer { 
    name: "data_b" 
    top: "data_b" 
    top: "label_b" 
    type: "Data" 
    data_param { source: "/path/to/second/data_lmdb" } 
    ... 
} 

至於損失,因爲每個實例有你需要的label_alabel_b轉換成same_not_same_label類的標籤。我建議你使用python層「即時」執行此操作。在prototxt呼叫添加到蟒蛇層:

layer { 
    name: "a_b_to_same_not_same_label" 
    type: "Python" 
    bottom: "label_a" 
    bottom: "label_b" 
    top: "same_not_same_label" 
    python_param { 
    # the module name -- usually the filename -- that needs to be in $PYTHONPATH 
    module: "siamese" 
    # the layer name -- the class name in the module 
    layer: "SiameseLabels" 
    } 
    propagate_down: false 
} 

創建siamese.py(確保它是在你的$PYTHONPATH)。在siamese.py你應該有一層類:

import sys, os 
sys.path.insert(0,os.environ['CAFFE_ROOT'] + '/python') 
import caffe 
class SiameseLabels(caffe.Layer): 
    def setup(self, bottom, top): 
    if len(bottom) != 2: 
     raise Exception('must have exactly two inputs') 
    if len(top) != 1: 
     raise Exception('must have exactly one output') 
    def reshape(self,bottom,top): 
    top[0].reshape(*bottom[0].shape) 
    def forward(self,bottom,top): 
    top[0].data[...] = (bottom[0].data == bottom[1].data).astype('f4') 
    def backward(self,top,propagate_down,bottom): 
     # no back prop 
     pass 

確保您在洗牌兩套例子以不同的方式,讓你獲得不平凡的對。此外,如果構造所述第一和第二數據集與不同數的實例,那麼你將看到不同的對在每個曆元)


確保你構建網絡共享重複的權重有關更多信息,請參閱this tutorial

+0

我發現沒有siamese.py文件,caffe/python和python2.7都沒有安裝dir。我正在使用Ubuntu 15.04,並於2015年10月獲得了caffe-master分支。 只有mnist連體例子,我已經在教程中用共享參數設計了網絡,只有數據輸入的開頭對我來說不清楚。到目前爲止,我沒有使用python圖層。我只需定義網絡並使用train命令爲給定的solver.prototxt運行caffe。 贊:caffe train -solver solver.prototxt -gpu all。 我的數據層是指帶有* .mdb的目錄以及平均的binaryproto文件 – Feuerteufel

+0

@Feuerteufel您需要**創建一個'siamese.py'文件並確保它位於您的'$ PYTHONPATH'中。這個文件應該包含問題中的代碼(以及導入caffe所需的正確的'import')。如果您在[Makefile](https://github.com/BVLC/caffe/blob/master/Makefile.config.example#L82)中啓用了python層,那麼caffe將會爲您運行python代碼作爲其'''咖啡火車'。 – Shai

+0

好吧,蟒蛇圖層沒有啓用,所以我現在正在重建它。對於siamese.py,導入的適當行是「import sys」,「sys.path.insert(0,'path/to/caffe/python')」和「import caffe」或更多?在丟失層中,same_not_same_label然後用作第三個輸入? – Feuerteufel