From b2178f4a821fd6bdcb13457b3790a29173d0b3df Mon Sep 17 00:00:00 2001 From: Jack Culpepper Date: Sat, 18 Oct 2014 16:40:13 -0700 Subject: [PATCH] backwards compatible changes to save build mnist files backend --- examples/mnist/convert_mnist_data.cpp | 25 +++++++++++++++++++++++++ examples/mnist/create_mnist.sh | 19 +++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/examples/mnist/convert_mnist_data.cpp b/examples/mnist/convert_mnist_data.cpp index 2749e4521b6..57887c169db 100644 --- a/examples/mnist/convert_mnist_data.cpp +++ b/examples/mnist/convert_mnist_data.cpp @@ -18,6 +18,8 @@ #include // NOLINT(readability/streams) #include +#include "opencv2/core/core.hpp" +#include "opencv2/opencv.hpp" #include "caffe/proto/caffe.pb.h" using namespace caffe; // NOLINT(build/namespaces) @@ -94,6 +96,16 @@ void convert_dataset(const char* image_filename, const char* label_filename, << "mdb_txn_begin failed"; CHECK_EQ(mdb_open(mdb_txn, NULL, 0, &mdb_dbi), MDB_SUCCESS) << "mdb_open failed. Does the lmdb already exist? "; + } else if (db_backend == "files") { // png files + CHECK_EQ(mkdir(db_path, 0744), 0) + << "mkdir " << db_path << "failed"; + for (int i = 0; i < 10; i++) { + int pathlen = strlen(db_path) + strlen("/0") + 1; + char path[pathlen]; + snprintf(path, pathlen, "%s/%c", db_path, '0' + i); + CHECK_EQ(mkdir(path, 0744), 0) + << "mkdir " << path << "failed"; + } } else { LOG(FATAL) << "Unknown db backend " << db_backend; } @@ -131,6 +143,15 @@ void convert_dataset(const char* image_filename, const char* label_filename, mdb_key.mv_data = reinterpret_cast(&keystr[0]); CHECK_EQ(mdb_put(mdb_txn, mdb_dbi, &mdb_key, &mdb_data, 0), MDB_SUCCESS) << "mdb_put failed"; + } else if (db_backend == "files") { // png files + cv::Mat img = cv::Mat(28, 28, CV_8UC1, pixels); + + int pathlen = strlen(db_path) + strlen("/0/12345.png") + 1; + char filename[pathlen]; + + snprintf(filename, pathlen, "%s/%c/%05d.png", db_path, '0' + label, item_id); + //std::cout << "writing " << filename << std::endl; + cv::imwrite(filename, img); } else { LOG(FATAL) << "Unknown db backend " << db_backend; } @@ -146,6 +167,8 @@ void convert_dataset(const char* image_filename, const char* label_filename, << "mdb_txn_commit failed"; CHECK_EQ(mdb_txn_begin(mdb_env, NULL, 0, &mdb_txn), MDB_SUCCESS) << "mdb_txn_begin failed"; + } else if (db_backend == "files") { // png files + } else { LOG(FATAL) << "Unknown db backend " << db_backend; } @@ -161,6 +184,8 @@ void convert_dataset(const char* image_filename, const char* label_filename, CHECK_EQ(mdb_txn_commit(mdb_txn), MDB_SUCCESS) << "mdb_txn_commit failed"; mdb_close(mdb_env, mdb_dbi); mdb_env_close(mdb_env); + } else if (db_backend == "files") { // files + } else { LOG(FATAL) << "Unknown db backend " << db_backend; } diff --git a/examples/mnist/create_mnist.sh b/examples/mnist/create_mnist.sh index 06ecc27de63..c2c9146dd99 100755 --- a/examples/mnist/create_mnist.sh +++ b/examples/mnist/create_mnist.sh @@ -7,6 +7,7 @@ DATA=data/mnist BUILD=build/examples/mnist BACKEND="lmdb" +BACKEND="files" echo "Creating ${BACKEND}..." @@ -18,4 +19,22 @@ $BUILD/convert_mnist_data.bin $DATA/train-images-idx3-ubyte \ $BUILD/convert_mnist_data.bin $DATA/t10k-images-idx3-ubyte \ $DATA/t10k-labels-idx1-ubyte $EXAMPLE/mnist_test_${BACKEND} --backend=${BACKEND} +if [ "$BACKEND" == "files" ] +then + for t in train test + do + rm -f $EXAMPLE/mnist_${t}.txt + + for d in 0 1 2 3 4 5 6 7 8 9 + do + for f in $EXAMPLE/mnist_${t}_${BACKEND}/$d/*.png + do + echo "$f $d" >>$EXAMPLE/mnist_${t}_a.txt + done + done + + shuf $EXAMPLE/mnist_${t}_a.txt >$EXAMPLE/mnist_${t}_b.txt + done +fi + echo "Done."