如何在caffe中将float型数据写入或转换为leveldb
How to write or convert float-type data to leveldb in caffe
现在我正在制作 leveldb 来训练 caffe framework.So 我使用“convert_imageset.cpp”。这个cpp文件只把char类型的数据写入leveldb。
但是我有浮动数据可以将其写入 leveldb。该数据是预处理图像数据,因此它是浮点型数据。
我怎样才能将这个浮点数据写入或转换为 leveldb。
此浮点数据是一组具有 4096 维的向量。
请帮我。
或者如何将其转换为 HDF5Data?
HDF5代表分层数据格式。您可以使用 R
(RHDF5 documentation)
操作此类数据格式
其他可以处理 HDF5 的软件有 Matlab
和 Mathematica
。
编辑
最近发布了一组名为 HDFql
的新工具来简化 "managing HDF files through a high-level language like C/C++"。你可以看看here
def del_and_create(dname):
if os.path.exists(dname):
shutil.rmtree(dname)
os.makedirs(dname)
def get_img_datum(image_fn):
img = cv.imread(image_fn, cv.IMREAD_COLOR)
img = img.swapaxes(0, 2).swapaxes(1, 2)
datum = caffe.io.array_to_datum(img, 0)
return datum
def get_jnt_datum(joint_fn):
joint = np.load(joint_fn)
datum = caffe.io.caffe_pb2.Datum()
datum.channels = len(joint)
datum.height = 1
datum.width = 1
datum.float_data.extend(joint.tolist())
return datum
def create_dataset():
img_db_fn = 'img.lmdb'
del_and_create(img_db_fn)
img_env = lmdb.Environment(img_db_fn, map_size=1099511627776)
img_txn = img_env.begin(write=True, buffers=True)
jnt_db_fn = 'joint.lmdb'
del_and_create(jnt_db_fn)
jnt_env = lmdb.Environment(jnt_db_fn, map_size=1099511627776)
jnt_txn = jnt_env.begin(write=True, buffers=True)
img_fns = glob.glob('imageData/*.jpg')
fileCount = len(img_fns)
print 'A total of ', fileCount, ' images.'
jnt_fns = glob.glob('jointData/*.npy')
jointCount = len(jnt_fns)
if(fileCount != jointCount):
print 'The file counts doesnot match'
exit()
keys = np.arange(fileCount)
np.random.shuffle(keys)
for i, (img_fn, jnt_fn) in enumerate( zip(sorted(img_fns), sorted(jnt_fns)) ):
img_datum = get_img_datum(img_fn)
jnt_datum = get_jnt_datum(jnt_fn)
key = '%010d' % keys[i]
img_txn.put(key, img_datum.SerializeToString())
jnt_txn.put(key, jnt_datum.SerializeToString())
if i % 10000 == 0:
img_txn.commit()
jnt_txn.commit()
jnt_txn = jnt_env.begin(write=True, buffers=True)
img_txn = img_env.begin(write=True, buffers=True)
print '%d'%(i), os.path.basename(img_fn), os.path.basename(jnt_fn)
img_txn.commit()
jnt_txn.commit()
img_env.close()
jnt_env.close()
以上代码需要来自给定路径的图像,以及每个图像的标签作为 .npy 文件。
致谢:https://github.com/mitmul/deeppose/blob/caffe/scripts/dataset.py
注意:我曾看到 Shai's 一个问题,该问题声称 lmdb 不支持 float-type 数据。但是,它确实适用于最新版本的 Caffe 和 LMDB 并使用此代码片段。由于他的回答太旧了,旧版本很可能不支持 float-type 数据。
现在我正在制作 leveldb 来训练 caffe framework.So 我使用“convert_imageset.cpp”。这个cpp文件只把char类型的数据写入leveldb。 但是我有浮动数据可以将其写入 leveldb。该数据是预处理图像数据,因此它是浮点型数据。 我怎样才能将这个浮点数据写入或转换为 leveldb。 此浮点数据是一组具有 4096 维的向量。 请帮我。 或者如何将其转换为 HDF5Data?
HDF5代表分层数据格式。您可以使用 R
(RHDF5 documentation)
其他可以处理 HDF5 的软件有 Matlab
和 Mathematica
。
编辑
最近发布了一组名为 HDFql
的新工具来简化 "managing HDF files through a high-level language like C/C++"。你可以看看here
def del_and_create(dname):
if os.path.exists(dname):
shutil.rmtree(dname)
os.makedirs(dname)
def get_img_datum(image_fn):
img = cv.imread(image_fn, cv.IMREAD_COLOR)
img = img.swapaxes(0, 2).swapaxes(1, 2)
datum = caffe.io.array_to_datum(img, 0)
return datum
def get_jnt_datum(joint_fn):
joint = np.load(joint_fn)
datum = caffe.io.caffe_pb2.Datum()
datum.channels = len(joint)
datum.height = 1
datum.width = 1
datum.float_data.extend(joint.tolist())
return datum
def create_dataset():
img_db_fn = 'img.lmdb'
del_and_create(img_db_fn)
img_env = lmdb.Environment(img_db_fn, map_size=1099511627776)
img_txn = img_env.begin(write=True, buffers=True)
jnt_db_fn = 'joint.lmdb'
del_and_create(jnt_db_fn)
jnt_env = lmdb.Environment(jnt_db_fn, map_size=1099511627776)
jnt_txn = jnt_env.begin(write=True, buffers=True)
img_fns = glob.glob('imageData/*.jpg')
fileCount = len(img_fns)
print 'A total of ', fileCount, ' images.'
jnt_fns = glob.glob('jointData/*.npy')
jointCount = len(jnt_fns)
if(fileCount != jointCount):
print 'The file counts doesnot match'
exit()
keys = np.arange(fileCount)
np.random.shuffle(keys)
for i, (img_fn, jnt_fn) in enumerate( zip(sorted(img_fns), sorted(jnt_fns)) ):
img_datum = get_img_datum(img_fn)
jnt_datum = get_jnt_datum(jnt_fn)
key = '%010d' % keys[i]
img_txn.put(key, img_datum.SerializeToString())
jnt_txn.put(key, jnt_datum.SerializeToString())
if i % 10000 == 0:
img_txn.commit()
jnt_txn.commit()
jnt_txn = jnt_env.begin(write=True, buffers=True)
img_txn = img_env.begin(write=True, buffers=True)
print '%d'%(i), os.path.basename(img_fn), os.path.basename(jnt_fn)
img_txn.commit()
jnt_txn.commit()
img_env.close()
jnt_env.close()
以上代码需要来自给定路径的图像,以及每个图像的标签作为 .npy 文件。
致谢:https://github.com/mitmul/deeppose/blob/caffe/scripts/dataset.py
注意:我曾看到 Shai's