Caffeの非ピクチャデータをlmdbファイルに変換
2161 ワード
caffeトレーニングでは、まずデータをlmdb形式のファイルに変換し、画像をどのようにlmdb形式のファイルに変換するか、比較的簡単で、参考になるブログが多く、主にcaffeが持参したconvert_を使用します.imageset関数.ブログを参考にできますhttps://www.cnblogs.com/denny402/p/5082341.html
では、非画像については?例えばpcapファイル、txtファイルなど、いくつかの参考URLがあり、pythonのコードを与え、1次元データをlmdbファイルに変換します.
https://www.cnblogs.com/dcsds1/p/5205669.html
http://blog.csdn.net/u014169666/article/details/69569385
http://blog.csdn.net/u010417185/article/details/65443803
しかし、C/C++コードが必要な場合はどうすればいいですか?実はこの変換は複雑ではなく、caffeのソースコードを参考に自分で書くことができます.caffeのソースコードにtools/convert_がありますimageset.cpp,examples/mnist/convert_mnist_data.cpp、これらはすべて参考にすることができます.コアはデータを解析し、Datumという構造でlmdbファイルに書き込むことです.
ここでmnistの例を分析すると、まず公式サイトで与えられたチュートリアルで、mnistデータをlmdb形式に変換するコマンドは以下のようにcaffeホームの下で実行されます.
ここから分かるように、主にconvert_が呼び出されています.mnist_data.binというプログラムですが、この実行可能ファイルはconvert_です.mnist_data.cppが生成されるので、このファイルを直接見ればいいです.
このファイルでは、ほとんどのコードがmnistデータを解析しており、本当にdbを書くコードの量は少なく、以下のコードを簡単にリストすることができます.
このコードから,データを解析し,データに対応するlabelも解析すれば,データとlabelをdatumに入れて保存できることがわかる.コードには多くのヘッダファイルが含まれており、caffeの中にあるので、caffeのあるディレクトリの下でコンパイルすればいいです.一般的にtoolsに入れます.
また、toolsに入れたくない場合は、Makefileファイルを変更することも考えられます.
では、非画像については?例えばpcapファイル、txtファイルなど、いくつかの参考URLがあり、pythonのコードを与え、1次元データをlmdbファイルに変換します.
https://www.cnblogs.com/dcsds1/p/5205669.html
http://blog.csdn.net/u014169666/article/details/69569385
http://blog.csdn.net/u010417185/article/details/65443803
しかし、C/C++コードが必要な場合はどうすればいいですか?実はこの変換は複雑ではなく、caffeのソースコードを参考に自分で書くことができます.caffeのソースコードにtools/convert_がありますimageset.cpp,examples/mnist/convert_mnist_data.cpp、これらはすべて参考にすることができます.コアはデータを解析し、Datumという構造でlmdbファイルに書き込むことです.
ここでmnistの例を分析すると、まず公式サイトで与えられたチュートリアルで、mnistデータをlmdb形式に変換するコマンドは以下のようにcaffeホームの下で実行されます.
build/examples/mnist/convert_mnist_data.bin data/mnist/train-images-idx3-ubyte data/train-labels-idx1-ubyte examples/mnist/mnist_train_lmdb --backend=lmdb
ここから分かるように、主にconvert_が呼び出されています.mnist_data.binというプログラムですが、この実行可能ファイルはconvert_です.mnist_data.cppが生成されるので、このファイルを直接見ればいいです.
このファイルでは、ほとんどのコードがmnistデータを解析しており、本当にdbを書くコードの量は少なく、以下のコードを簡単にリストすることができます.
#include "boost/scoped_ptr.hpp”
#include "caffe/proto/caffe.pb.h"
#include "caffe/util/db.hpp"
#include "caffe/util/format.hpp"
#include
scoped_ptr<:db> db(db::GetDB(db_backend));
db->Open(db_path, db::NEW);
scoped_ptr<:transaction> txn(db->NewTransaction());
Datum datum;
datum.set_channels(1);
datum.set_height(rows);
datum.set_width(cols);
for (int item_id = 0; item_id < num_items; ++item_id) {
datum.set_data(data, rows*cols); //the data
datum.set_label(label); //the label
string key_str = caffe::format_int(item_id, 8);
datum.SerializeToString(&value);
txn->Put(key_str, value);
txn->Commit();
}
db.Close();
このコードから,データを解析し,データに対応するlabelも解析すれば,データとlabelをdatumに入れて保存できることがわかる.コードには多くのヘッダファイルが含まれており、caffeの中にあるので、caffeのあるディレクトリの下でコンパイルすればいいです.一般的にtoolsに入れます.
また、toolsに入れたくない場合は、Makefileファイルを変更することも考えられます.