什么是caffe的输入格式?

时间:2015-09-22 02:19:26

标签: c++ caffe leveldb

我尝试使用caffe进行音频识别,但无法找到输入格式的文档。

我想使用leveldb,因此我必须为每条记录创建一个键和一个值,这是一对标签字符串和数据字节数组。

似乎没有文档描述这一点,在我发现值由Datum.SerializeToString()编写后,我无法找到Datum然后丢失的位置。

有谁知道如何将非图片记录转换为leveldb的{​​{1}}条记录?谢谢!

2 个答案:

答案 0 :(得分:3)

leveldblmdbHDF5是目前向Caffe提供数据的主要格式。 MemoryData层也启用了内存输入,因此可以使用任何输入格式,并使用Caffe的python或c ++接口填充数据blob。

如果您已经设置leveldbthis关于咖啡问题的讨论可能会有用。

下面是使用python填充leveldb的示例。它需要pycaffe和plyvel。它改编自caffe's github issues发布的Zackory。它不是特定于图像,只要您以CxHxW的形式表示每个示例,其中任何或所有可以等于1:

import caffe

db = plyvel.DB('train_leveldb/', create_if_missing=True, error_if_exists=True, write_buffer_size=268435456)
wb = db.write_batch()
count = 0
for file in dataset:
    mat = # load numpy array from file

    # Load matrix into datum object
    datum = caffe.io.array_to_datum(mat)

    wb.put('%08d_%s' % (count, file), datum.SerializeToString())

    count += 1

    # Write to db in regular intervals
    if count % 1000 == 0:
        # Write batch of images to database
        wb.write()
        del wb
        wb = db.write_batch()

    # Write last batch of images
    if count % 1000 != 0:
        wb.write()

我发现构建lmdb要简单得多。 lmdb示例here

答案 1 :(得分:1)

Datum对象是用protobuf定义的。看这里: https://github.com/BVLC/caffe/blob/master/src/caffe/proto/caffe.proto#L30-L41

它在caffe.pb.h中使用类.build_release/src/caffe/proto生成文件Datum。您可以在那里了解此对象的工作原理。