首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Caffe:从Python读取LMDB

Caffe:从Python读取LMDB
EN

Stack Overflow用户
提问于 2015-10-14 13:53:30
回答 2查看 21K关注 0票数 17

我已经使用caffe提取了特征,它会生成一个.mdb文件。然后我尝试使用Python读取它,并将其显示为一个可读的数字。

代码语言:javascript
复制
import lmdb

lmdb_env = lmdb.open('caffefeat')
lmdb_txn = lmdb_env.begin()
lmdb_cursor = lmdb_txn.cursor()

for key, value in lmdb_cursor:
    print str(value)

这将打印出一行很长的不可读的、断开的字符。

然后我尝试打印int(value),它返回以下内容:

代码语言:javascript
复制
ValueError: invalid literal for int() with base 10: '\x08\x80 \x10\x01\x18\x015\x8d\x80\xad?5'

float(value)提供以下内容:

代码语言:javascript
复制
ValueError: could not convert string to float:? 5????5

这是lmdb文件本身的问题,还是与数据类型的转换有关?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-14 18:47:25

下面是我找出的工作代码

代码语言:javascript
复制
import caffe
import lmdb

lmdb_env = lmdb.open('directory_containing_mdb')
lmdb_txn = lmdb_env.begin()
lmdb_cursor = lmdb_txn.cursor()
datum = caffe.proto.caffe_pb2.Datum()

for key, value in lmdb_cursor:
    datum.ParseFromString(value)
    label = datum.label
    data = caffe.io.datum_to_array(datum)
    for l, d in zip(label, data):
            print l, d
票数 33
EN

Stack Overflow用户

发布于 2016-06-14 17:18:48

如果您已经在lmdb中对图像进行了编码,则在使用@ytrewq的代码时可能会看到此错误

代码语言:javascript
复制
ValueError: total size of new array must be unchanged

请改用此函数:

代码语言:javascript
复制
import caffe
import lmdb
import PIL.Image
from io import StringIO
import numpy as np

def read_lmdb(lmdb_file):
    cursor = lmdb.open(lmdb_file, readonly=True).begin().cursor()
    datum = caffe.proto.caffe_pb2.Datum()
    for _, value in cursor:
        datum.ParseFromString(value)
        s = StringIO()
        s.write(datum.data)
        s.seek(0)

        yield np.array(PIL.Image.open(s)), datum.label

示例:

代码语言:javascript
复制
lmdb_dir = '/save/jobs/20160613-125532-958f/train_db/'
for im, label in read_lmdb(lmdb_dir):
    print label, im
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33117607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档