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
。你可以看看那里了解这个对象是如何工作的。
leveldb
、lmdb
和 HDF5
是当前将数据馈送到 Caffe 的主要格式。 MemoryData
层也支持内存输入,因此可以使用任何输入格式并使用 Caffe 的 python 或 c++ 接口来填充数据块。
如果您已经准备好 leveldb
,this 讨论 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.
我正在尝试使用 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
。你可以看看那里了解这个对象是如何工作的。
leveldb
、lmdb
和 HDF5
是当前将数据馈送到 Caffe 的主要格式。 MemoryData
层也支持内存输入,因此可以使用任何输入格式并使用 Caffe 的 python 或 c++ 接口来填充数据块。
如果您已经准备好 leveldb
,this 讨论 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.