讓Caffe生成的數據集能在Theano上直接運行(一)——lmdb與protobuf

不論使用何種框架進行CNNs訓練,共有3種數據集:

Training Set用於訓練網絡。

Validation Set用於訓練時測試網絡準確率。

Test Set用於測試網絡訓練完成後的最終正確率。

 

Caffe生成的數據分爲2種格式:Lmdb和Leveldb。

它們都是鍵/值對(Key/Value Pair)嵌入式數據庫管理系統編程庫。

雖然lmdb的內存消耗是leveldb的1.1倍,但是lmdb的速度比leveldb快10%至15%,更重要的是lmdb允許多種訓練模型同時讀取同一組數據集。

因此lmdb取代了leveldb成爲Caffe默認的數據集生成格式。

 

Google Protocol Buffer的安裝

Protocol Buffer是一種類似於XML的用於序列化數據的自動機制。

首先在Protocol Buffers的中下載最新版本:

https://developers.google.com/protocol-buffers/docs/downloads

解壓後運行:

./configure
$ make
$ make check
$ make install
pip installprotobuf


添加動態鏈接庫

exportLD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

 

Lmdb的安裝

pip install lmdb

要parse(解析)一個protobuf類型數據,首先要告訴計算機你這個protobuf數據內部是什麼格式(有哪些項,這些項各是什麼數據類型的決定了佔用多少字節,這些項可否重複,重複幾次),安裝protobuf這個module就可以用protobuf專用的語法來定義這些格式(這個是.proto文件)了,然後用protoc來編譯這個.proto文件就可以生成你需要的目標文件。

想要定義自己的.proto文件請閱讀:

https://developers.google.com/protocol-buffers/docs/proto?hl=zh-cn

 

編譯.proto文件

protoc--proto_path=IMPORT_PATH --cpp_out=DST_DIR --java_out=DST_DIR--python_out=DST_DIR path/to/file.proto
--proto_path 也可以簡寫成-I 是.proto所在的路徑

輸出路徑:

--cpp_out 要生成C++可用的頭文件,分別是***.pb.h(包含申明類)***.pb.cc(包含可執行類),使用的時候只要include “***.pb.h”

--java_out 生成java可用的頭文件

--python_out 生成python可用的頭文件,**_pb2.py,使用的時候import**_pb2.py即可

最後一個參數就是你的.proto文件完整路徑。


歡迎參與討論並關注本博客微博以及知乎個人主頁後續內容繼續更新哦~

轉載請您尊重作者的勞動,完整保留上述文字以及文章鏈接,謝謝您的支持!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章