我需要一些幫助來創建一個帶有圖像和標籤文本文件的純文本目錄中的連體CNN的CaffeDB。最好的將是一個python的方式來做到這一點。
問題不在於瀏覽目錄和製作圖像對。我的問題更多的是從這些對中創建一個CaffeDB。
到目前爲止,我只使用convert_imageset
從圖像目錄中創建CaffeDB。
感謝您的幫助!如何爲圖像目錄中的連體網絡創建CaffeDB訓練數據
回答
爲什麼不簡單地使用舊的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_a
和label_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。
我發現沒有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
@Feuerteufel您需要**創建一個'siamese.py'文件並確保它位於您的'$ PYTHONPATH'中。這個文件應該包含問題中的代碼(以及導入caffe所需的正確的'import')。如果您在[Makefile](https://github.com/BVLC/caffe/blob/master/Makefile.config.example#L82)中啓用了python層,那麼caffe將會爲您運行python代碼作爲其'''咖啡火車'。 – Shai
好吧,蟒蛇圖層沒有啓用,所以我現在正在重建它。對於siamese.py,導入的適當行是「import sys」,「sys.path.insert(0,'path/to/caffe/python')」和「import caffe」或更多?在丟失層中,same_not_same_label然後用作第三個輸入? – Feuerteufel
- 1. 如何爲神經網絡創建一組圖像訓練集
- 2. 如何爲圖像處理創建訓練數據集
- 3. 如何在訓練網絡時防止圖像數據冗餘?
- 4. 如何爲libsvm創建訓練數據(作爲svm_node結構體)
- 5. 改變訓練圖像訓練神經網絡
- 6. 訓練字母圖像到全批培訓的神經網絡
- 7. 神經網絡訓練連續值
- 8. 如何訓練網絡的第一層?
- 9. 在神經網絡中將訓練數據轉換爲數組
- 10. 爲卷積神經網絡選擇訓練圖像
- 11. 如何訓練OCR神經網絡?
- 12. 如何在Matlab中從RGB圖像創建訓練示例?
- 13. Neurolab重新訓練網絡
- 14. 訓練神經網絡
- 15. 如何在直方圖上訓練OpenCV中的神經網絡
- 16. 在sklearn神經網絡中訓練CNN圖像
- 17. TensorFlow中的前訓練神經網絡
- 18. 神經網絡訓練中的MSE
- 19. 爲神經網絡訓練標記數據
- 20. 用圖像訓練的人工神經網絡
- 21. 如何從訓練圖像創建caffemodel文件及其標籤?
- 22. 何時停止訓練神經網絡?
- 23. 在訓練神經網絡時,您是否應該一次性將所有訓練數據傳遞給網絡?
- 24. 如何創建SVM(EmguCV)的訓練集?
- 25. 連接RGB圖像的連體網絡
- 26. 在Caffe中訓練暹羅網絡
- 27. 在matlab中訓練神經網絡
- 28. 在Ruby中訓練神經網絡
- 29. Encog神經網絡分類圖像:訓練
- 30. 完全卷積網絡訓練圖像大小
你打算使用什麼損失層? – Shai
我還不知道。對於我的用例,我爲每個類(4 +垃圾類)提供了一些圖像(100k),我希望網能更好地區分類。使用「正常」的線性CNN,網絡上出現了很多錯誤,我想嘗試一個連接CNN的網絡,讓網絡更好地瞭解差異。 如果您對良好的損失層有一些建議,請告訴我。 – Feuerteufel
對比損失層似乎適合這種用例。 – Shai