Теперь я создаю leveldb для обучения caffe framework. Поэтому я использую "convert_imageset. цена за клик". Этот файл cpp записывает данные типа char только в leveldb. Но у меня есть данные с плавающей запятой, чтобы записать их в leveldb. Эти данные представляют собой предварительно обработанные данные изображения, поэтому они являются данными типа с плавающей запятой. как я могу записать или преобразовать эти данные с плавающей запятой в leveldb. Эти данные с плавающей запятой представляют собой набор векторов с 4096 измерениями. Помогите пожалуйста мне. Или нет, как преобразовать его в HDF5Data?
Как записать или преобразовать данные типа float в leveldb в caffe
Ответы (2)
HDF5 означает иерархический формат данных. Вы можете манипулировать таким форматом данных, например, с помощью R
(документация RHDF5 а>)
Другим программным обеспечением, которое может обрабатывать HDF5, являются Matlab
и Mathematica
.
ИЗМЕНИТЬ
Недавно был выпущен новый набор инструментов под названием HDFql
для упрощения «управления файлами HDF с помощью языка высокого уровня, такого как C/C++». Вы можете проверить это здесь
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
Примечание. Я видел Шая ответ на вопрос, в котором утверждается, что lmdb не поддерживает данные типа float. Но у меня это работает с последней версией Caffe и LMDB и с использованием этого фрагмента кода. Поскольку его ответ слишком старый, весьма вероятно, что более старые версии могли не поддерживать данные типа с плавающей запятой.
"HDF5Data"
? - person Shai   schedule 04.01.2016