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ホームの下で実行されます.
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ファイルを変更することも考えられます.