Как написать или преобразовать данные типа float в leveldb в caffe

Сейчас я делаю leveldb для обучения рамок кафе. Так что я использую «convert_imageset.cppMsgstr «Этот файл cpp записывает данные типа char только в leveldb.
Но у меня есть данные с плавающей точкой, чтобы записать их в leveldb. Эти данные являются предварительными данными изображения, поэтому это данные типа с плавающей точкой.
как я могу написать или преобразовать эти данные с плавающей точкой в ​​leveldb.
Эти данные с плавающей точкой представляют собой набор векторов с 4096 измерениями.
Пожалуйста, помогите мне.
Или нет, как конвертировать его в HDF5Data?

0

Решение

HDF5 обозначает иерархический формат данных. Вы можете манипулировать таким форматом данных, например, с R (Документация RHDF5)

Другое программное обеспечение, которое может обрабатывать HDF5 Matlab а также Mathematica,

РЕДАКТИРОВАТЬ

Новый набор инструментов под названием HDFql недавно был выпущен для упрощения «управления файлами HDF через язык высокого уровня, такой как C / C ++». Вы можете проверить это Вот

2

Другие решения

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

Примечание: я видел Шай«s ответ на вопрос, который утверждает, что lmdb не поддерживает данные типа float. Но он работает для меня с последней версией Caffe и LMDB и с использованием этого фрагмента кода. Поскольку его ответ слишком стар, весьма вероятно, что более старые версии могут не поддерживать данные типа float.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector