diff --git a/examples/cifar10/create_cifar10.sh b/examples/cifar10/create_cifar10.sh index ad5038e0c3e..dfba7cca48a 100755 --- a/examples/cifar10/create_cifar10.sh +++ b/examples/cifar10/create_cifar10.sh @@ -13,6 +13,6 @@ rm -rf $EXAMPLE/cifar10_train_leveldb $EXAMPLE/cifar10_test_leveldb echo "Computing image mean..." ./build/tools/compute_image_mean $EXAMPLE/cifar10_train_leveldb \ - $EXAMPLE/mean.binaryproto + $EXAMPLE/mean.binaryproto leveldb echo "Done." diff --git a/examples/imagenet/create_imagenet.sh b/examples/imagenet/create_imagenet.sh index a286b8fe74c..e912ac43cd7 100755 --- a/examples/imagenet/create_imagenet.sh +++ b/examples/imagenet/create_imagenet.sh @@ -1,5 +1,5 @@ #!/usr/bin/env sh -# Create the imagenet leveldb inputs +# Create the imagenet lmdb inputs # N.B. set the path to the imagenet train + val data dirs EXAMPLE=examples/imagenet @@ -34,7 +34,7 @@ if [ ! -d "$VAL_DATA_ROOT" ]; then exit 1 fi -echo "Creating train leveldb..." +echo "Creating train lmdb..." GLOG_logtostderr=1 $TOOLS/convert_imageset \ --resize_height=$RESIZE_HEIGHT \ @@ -42,9 +42,9 @@ GLOG_logtostderr=1 $TOOLS/convert_imageset \ --shuffle \ $TRAIN_DATA_ROOT \ $DATA/train.txt \ - $EXAMPLE/ilsvrc12_train_leveldb + $EXAMPLE/ilsvrc12_train_lmdb -echo "Creating val leveldb..." +echo "Creating val lmdb..." GLOG_logtostderr=1 $TOOLS/convert_imageset \ --resize_height=$RESIZE_HEIGHT \ @@ -52,6 +52,6 @@ GLOG_logtostderr=1 $TOOLS/convert_imageset \ --shuffle \ $VAL_DATA_ROOT \ $DATA/val.txt \ - $EXAMPLE/ilsvrc12_val_leveldb + $EXAMPLE/ilsvrc12_val_lmdb echo "Done." diff --git a/examples/mnist/convert_mnist_data.cpp b/examples/mnist/convert_mnist_data.cpp index 19040153c86..2749e4521b6 100644 --- a/examples/mnist/convert_mnist_data.cpp +++ b/examples/mnist/convert_mnist_data.cpp @@ -1,6 +1,5 @@ -// -// This script converts the MNIST dataset to the leveldb format used -// by caffe to perform classification. +// This script converts the MNIST dataset to a lmdb (default) or +// leveldb (--backend=leveldb) format used by caffe to load data. // Usage: // convert_mnist_data [FLAGS] input_image_file input_label_file // output_db_file @@ -176,7 +175,7 @@ int main(int argc, char** argv) { #endif gflags::SetUsageMessage("This script converts the MNIST dataset to\n" - "the leveldb/lmdb format used by Caffe to perform classification.\n" + "the lmdb/leveldb format used by Caffe to load data.\n" "Usage:\n" " convert_mnist_data [FLAGS] input_image_file input_label_file " "output_db_file\n" diff --git a/examples/mnist/create_mnist.sh b/examples/mnist/create_mnist.sh index 8c43dc3391f..06ecc27de63 100755 --- a/examples/mnist/create_mnist.sh +++ b/examples/mnist/create_mnist.sh @@ -1,5 +1,5 @@ #!/usr/bin/env sh -# This script converts the mnist data into leveldb/lmdb format, +# This script converts the mnist data into lmdb/leveldb format, # depending on the value assigned to $BACKEND. EXAMPLE=examples/mnist diff --git a/examples/mnist/readme.md b/examples/mnist/readme.md index ac1a0b7d7ea..44e0091f420 100644 --- a/examples/mnist/readme.md +++ b/examples/mnist/readme.md @@ -19,7 +19,7 @@ You will first need to download and convert the data format from the MNIST websi cd $CAFFE_ROOT/examples/mnist ./create_mnist.sh -If it complains that `wget` or `gunzip` are not installed, you need to install them respectively. After running the script there should be two datasets, `mnist-train-leveldb`, and `mnist-test-leveldb`. +If it complains that `wget` or `gunzip` are not installed, you need to install them respectively. After running the script there should be two datasets, `mnist_train_lmdb`, and `mnist_test_lmdb`. ## LeNet: the MNIST Classification Model @@ -37,13 +37,14 @@ Specifically, we will write a `caffe::NetParameter` (or in python, `caffe.proto. ### Writing the Data Layer -Currently, we will read the MNIST data from the leveldb we created earlier in the demo. This is defined by a data layer: +Currently, we will read the MNIST data from the lmdb we created earlier in the demo. This is defined by a data layer: layers { name: "mnist" type: DATA data_param { - source: "mnist-train-leveldb" + source: "mnist_train_lmdb" + backend: LMDB batch_size: 64 scale: 0.00390625 } @@ -51,7 +52,7 @@ Currently, we will read the MNIST data from the leveldb we created earlier in th top: "label" } -Specifically, this layer has name `mnist`, type `data`, and it reads the data from the given leveldb source. We will use a batch size of 64, and scale the incoming pixels so that they are in the range \[0,1\). Why 0.00390625? It is 1 divided by 256. And finally, this layer produces two blobs, one is the `data` blob, and one is the `label` blob. +Specifically, this layer has name `mnist`, type `data`, and it reads the data from the given lmdb source. We will use a batch size of 64, and scale the incoming pixels so that they are in the range \[0,1\). Why 0.00390625? It is 1 divided by 256. And finally, this layer produces two blobs, one is the `data` blob, and one is the `label` blob. ### Writing the Convolution Layer diff --git a/models/bvlc_alexnet/train_val.prototxt b/models/bvlc_alexnet/train_val.prototxt index 69b8916d769..717b6fa447c 100644 --- a/models/bvlc_alexnet/train_val.prototxt +++ b/models/bvlc_alexnet/train_val.prototxt @@ -5,7 +5,8 @@ layers { top: "data" top: "label" data_param { - source: "examples/imagenet/ilsvrc12_train_leveldb" + source: "examples/imagenet/ilsvrc12_train_lmdb" + backend: LMDB batch_size: 256 } transform_param { @@ -21,7 +22,8 @@ layers { top: "data" top: "label" data_param { - source: "examples/imagenet/ilsvrc12_val_leveldb" + source: "examples/imagenet/ilsvrc12_val_lmdb" + backend: LMDB batch_size: 50 } transform_param { diff --git a/models/bvlc_reference_caffenet/train_val.prototxt b/models/bvlc_reference_caffenet/train_val.prototxt index d6d64073619..073d8aeff4a 100644 --- a/models/bvlc_reference_caffenet/train_val.prototxt +++ b/models/bvlc_reference_caffenet/train_val.prototxt @@ -5,7 +5,8 @@ layers { top: "data" top: "label" data_param { - source: "examples/imagenet/ilsvrc12_train_leveldb" + source: "examples/imagenet/ilsvrc12_train_lmdb" + backend: LMDB batch_size: 256 } transform_param { @@ -21,7 +22,8 @@ layers { top: "data" top: "label" data_param { - source: "examples/imagenet/ilsvrc12_val_leveldb" + source: "examples/imagenet/ilsvrc12_val_lmdb" + backend: LMDB batch_size: 50 } transform_param { diff --git a/tools/compute_image_mean.cpp b/tools/compute_image_mean.cpp index fe3497fa87d..20f1ff81f1c 100644 --- a/tools/compute_image_mean.cpp +++ b/tools/compute_image_mean.cpp @@ -17,12 +17,12 @@ using std::max; int main(int argc, char** argv) { ::google::InitGoogleLogging(argv[0]); if (argc < 3 || argc > 4) { - LOG(ERROR) << "Usage: compute_image_mean input_leveldb output_file" + LOG(ERROR) << "Usage: compute_image_mean input_db output_file" << " db_backend[leveldb or lmdb]"; return 1; } - string db_backend = "leveldb"; + string db_backend = "lmdb"; if (argc == 4) { db_backend = string(argv[3]); } diff --git a/tools/convert_imageset.cpp b/tools/convert_imageset.cpp index 1c58f3de33f..7e1e83d9d0c 100644 --- a/tools/convert_imageset.cpp +++ b/tools/convert_imageset.cpp @@ -1,17 +1,12 @@ -// This program converts a set of images to a leveldb by storing them as Datum -// proto buffers. +// This program converts a set of images to a lmdb/leveldb by storing them +// as Datum proto buffers. // Usage: -// convert_imageset [-g] ROOTFOLDER/ LISTFILE DB_NAME RANDOM_SHUFFLE[0 or 1] -// [resize_height] [resize_width] +// convert_imageset [FLAGS] ROOTFOLDER/ LISTFILE DB_NAME +// // where ROOTFOLDER is the root folder that holds all the images, and LISTFILE // should be a list of files as well as their labels, in the format as // subfolder1/file1.JPEG 7 // .... -// if RANDOM_SHUFFLE is 1, a random shuffle will be carried out before we -// process the file lines. -// Optional flag -g indicates the images should be read as -// single-channel grayscale. If omitted, grayscale images will be -// converted to color. #include #include @@ -38,7 +33,7 @@ DEFINE_bool(gray, false, "When this option is on, treat images as grayscale ones"); DEFINE_bool(shuffle, false, "Randomly shuffle the order of images and their labels"); -DEFINE_string(backend, "leveldb", "The backend for storing the result"); +DEFINE_string(backend, "lmdb", "The backend for storing the result"); DEFINE_int32(resize_width, 0, "Width images are resized to"); DEFINE_int32(resize_height, 0, "Height images are resized to");