caffe的输入格式是什么?

What's caffe's input format?

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

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

好像没有文档描述这个,后来发现这个值是Datum.SerializeToString()写的,找不到Datum在哪里,然后就丢了。

有谁知道如何将 caffe 的非图像记录转换为 leveldb 记录?谢谢!

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

它在 .build_release/src/caffe/proto 中生成一个 caffe.pb.h 文件 class Datum。你可以看看那里了解这个对象是如何工作的。

leveldblmdbHDF5 是当前将数据馈送到 Caffe 的主要格式。 MemoryData 层也支持内存输入,因此可以使用任何输入格式并使用 Caffe 的 python 或 c++ 接口来填充数据块。

如果您已经准备好 leveldbthis 讨论 caffe 问题可能会有用。

下面是一个用 python 填充 leveldb 的示例。它需要 pycaffe 和 plyvel。它改编自 caffe's github issues posted by 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.