lmdb_file = "/usr/work/data/train_lmdb"
lmdb_env = lmdb.open(lmdb_file, readonly=True)lmdb_txn = lmdb_env.begin()lmdb_cursor = lmdb_txn.cursor()datum = caffe.proto.caffe_pb2.Datum() i = 0print "Starting reading"for key, value in lmdb_cursor: if i < 1: print 'iteration: ', i datum.ParseFromString(value) label = datum.label flat_x = np.fromstring(datum.data, dtype=np.float32) x = flat_x.reshape(datum.channels, datum.height, datum.width) print 'label: ', label i += 1 else: breaklmdb_env.close()
plt.imshow(x.transpose(1,2,0)/255, cmap=plt.cm.gray)
plt.show()
plt.imshow(solver.test_nets[0].blobs['data'].data[0,...].transpose(1,2,0)/255, cmap=plt.cm.gray)
plt.show()
plt.imshow(solver.net.blobs['data'].data[0,...].transpose(1,2,0)/255, cmap=plt.cm.gray)
plt.show()
layer {
name: "data"
type: "Data"
top: "data"
top: "label"
data_param {
source: "/usr/work/data/train_lmdb"
backend: LMDB
batch_size: 50
}
include {
phase: TRAIN
}
}
layer {
name: "data"
type: "Data"
top: "data"
top: "label"
data_param {
source: "/usr/work/data/test_lmdb"
backend: LMDB
batch_size: 50
}
include {
phase: TEST
}
}
# Resized image
X = np.zeros((100, 3, RESIZE_HEIGHT, RESIZE_WIDTH), dtype=np.float32)# this is the labely = np.array(img_labels, dtype=np.int32)
map_size = X.nbytes * 50
# Read the images into X
X = ...
...
# write to lmdb
env = lmdb.open(test_lmdb, map_size=map_size) with env.begin(write=True) as txn: for i in xrange(100): print "Image id: ", i datum = caffe.proto.caffe_pb2.Datum() datum.channels = X.shape[1] datum.height = X.shape[2] datum.width = X.shape[3] datum.float_data = X[i].tobytes() datum.label = int(y[i]) str_id = '{:08}'.format(i) txn.put(str_id.encode('ascii'), datum.SerializeToString())
datum.float_data = X[i].tobytes()
should be:
datum.data = X[i].tobytes()
I'm thinking maybe the way I created lmdb wasn't what caffe was expecting?Below is a simplified version of how I saved the data to lmdb:
# Resized image
X = np.zeros((100, 3, RESIZE_HEIGHT, RESIZE_WIDTH), dtype=np.float32)# this is the label
y = np.array(img_labels, dtype=np.int32)
map_size = X.nbytes * 50
# Read the images into X
X = ...
...
# write to lmdbenv = lmdb.open(test_lmdb, map_size=map_size)with env.begin(write=True) as txn:for i in xrange(100):print "Image id: ", idatum = caffe.proto.caffe_pb2.Datum()datum.channels = X.shape[1]datum.height = X.shape[2]datum.width = X.shape[3]
datum.data = X[i].tobytes()