我尝试使用caffe
进行音频识别,但无法找到输入格式的文档。
我想使用leveldb
,因此我必须为每条记录创建一个键和一个值,这是一对标签字符串和数据字节数组。
似乎没有文档描述这一点,在我发现值由Datum.SerializeToString()
编写后,我无法找到Datum
然后丢失的位置。
有谁知道如何将非图片记录转换为leveldb
的{{1}}条记录?谢谢!
答案 0 :(得分:3)
leveldb
,lmdb
和HDF5
是目前向Caffe提供数据的主要格式。 MemoryData
层也启用了内存输入,因此可以使用任何输入格式,并使用Caffe的python或c ++接口填充数据blob。
如果您已经设置leveldb
,this关于咖啡问题的讨论可能会有用。
下面是使用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
。您可以在那里了解此对象的工作原理。