Caffe has a build-in input layer tailored for image classification tasks (i.e., single integer label per input image). This input "Data"
layer is built upon an lmdb or leveldb data structure. In order to use "Data"
layer one has to construct the data structure with all training data.
convert_imageset
convert_imageset
is one of these tools).make
ing it make sure you ran make tools
as well.convert_imageset
is created in $CAFFE_ROOT/build/tools
.
/path/to/jpegs/
)./path/to/labels/train.txt
) with a line per input image <path/to/file> . For example:
img_0000.jpeg 1
img_0001.jpeg 0
img_0002.jpeg 0
In this example the first image is labeled 1
while the other two are labeled 0
.
~$ GLOG_logtostderr=1 $CAFFE_ROOT/build/tools/convert_imageset \
--resize_height=200 --resize_width=200 --shuffle \
/path/to/jpegs/ \
/path/to/labels/train.txt \
/path/to/lmdb/train_lmdb
Command line explained:
GLOG_logtostderr
flag is set to 1 before calling convert_imageset
indicates the logging mechanism to redirect log messages to stderr.--resize_height
and --resize_width
resize all input images to same size 200x200
.--shuffle
randomly change the order of images and does not preserve the order in the /path/to/labels/train.txt
file.convert_imageset
otherwise you'll get a scary error message.Other flags that might be useful:
--backend
- allows you to choose between an lmdb
dataset or levelDB
.--gray
- convert all images to gray scale.--encoded
and --encoded_type
- keep image data in encoded (jpg/png) compressed form in the database.--help
- shows some help, see all relevant flags under Flags from tools/convert_imageset.cppYou can check out $CAFFE_ROOT/examples/imagenet/convert_imagenet.sh
for an example how to use convert_imageset
.
see this thread for more information.