使用caffe時,要創建包含圖像的訓練數據集,我們需要以特殊格式(如lmdb)創建數據庫,但是有任何選項可傳遞給caffe批次的圖像,例如vector<cv::Mat>
?Caffe + Opencv without lmdb
爲了澄清我正在尋找解決方案,可以處理大量的不能裝入存儲器圖像(但假設一個訓練批次(例如含有50個圖像)可被存儲在存儲器中)。
使用caffe時,要創建包含圖像的訓練數據集,我們需要以特殊格式(如lmdb)創建數據庫,但是有任何選項可傳遞給caffe批次的圖像,例如vector<cv::Mat>
?Caffe + Opencv without lmdb
爲了澄清我正在尋找解決方案,可以處理大量的不能裝入存儲器圖像(但假設一個訓練批次(例如含有50個圖像)可被存儲在存儲器中)。
根據我們使用的輸入層,Caffe可以採用多種類型的輸入。 一些輸入法可用如下:
在模型文件,你找到的第一個層將爲Layer type: Data
,其使用lmdb or leveldb
作爲輸入法。將一組圖像轉換爲這些數據庫非常簡單,因爲Caffe已經提供了轉換圖像的工具。
的Layer type: MemoryData
從存儲器,同時利用攝像機輸入至作爲來自Caffe輸入期間測試階段被傳遞,這將是非常有益的直接讀取數據。使用此層進行培訓非常有用,建議使用而不是。
的Layer type: ImageData
需要一個文本文件作爲輸入。該文本文件包含所有圖像名稱及其完整路徑和類號。 Caffe使用OpenCV來讀取這一層的圖像。它還處理圖像的所有轉換。因此,不要使用OpenCV來讀取圖像,然後傳遞給MemoryData層,建議使用ImageData。
中的.txt的格式從其中的ImageData層讀取圖像必須是:
/path/to/the/image/imageName.jpg classNumber
使用LMDB或性LevelDB的強烈建議這樣做,因爲如果圖像路徑或名稱包含空格,或者任何圖像已損壞,則ImageData無法正常工作。各層的
細節可以發現here。
根據型號和批量大小在GPU中分配內存。如果發生內存溢出,您可以嘗試減小批量大小。 Caffe輕鬆處理訓練120萬張圖像的Imagenet數據庫。因此,對於最佳的批量大小,算法應該沒有任何問題。
爲什麼在訓練中不使用MemoryData?在從lmdb和ImageData中讀取數據時是否還有速度差異? – mrgloom
不建議初學者使用MemoryData,因爲如果培訓未按預期進行,可能會造成困難。此外,對圖像進行的轉換已從MemoryData層棄用,這意味着,在將來的版本中,使用MemoryData時,在將數據傳遞到存儲器數據層之前,需要在圖像外減去,裁剪,調整大小等。 –