Caffe:了解blob的预期lmdb数据结构

时间:2015-04-09 04:44:56

标签: caffe lmdb

我试图理解如何在Caffe中解释数据。 为此,我看了Minst Tutorial 查看输入数据定义:

layers {
  name: "mnist"
  type: DATA
  data_param {
    source: "mnist_train_lmdb"
    backend: LMDB
    batch_size: 64
    scale: 0.00390625
  }
  top: "data"
  top: "label"
}

我现在已经查看了mnist_train_lmdb并获取了其中一个条目(以十六进制显示):

0801101C181C229006
00000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000
00000000000054B99F973C2400000000000000000000000000000000
000000000000DEFEFEFEFEF1C6C6C6C6C6C6C6C6AA34000000000000
00000000000043724872A3E3FEE1FEFEFEFAE5FEFE8C000000000000
000000000000000000000011420E4343433B15ECFE6A000000000000
00000000000000000000000000000000000053FDD112000000000000
000000000000000000000000000000000016E9FF5300000000000000
000000000000000000000000000000000081FEEE2C00000000000000
000000000000000000000000000000003BF9FE3E0000000000000000
0000000000000000000000000000000085FEBB050000000000000000
00000000000000000000000000000009CDF83A000000000000000000
0000000000000000000000000000007EFEB600000000000000000000
00000000000000000000000000004BFBF03900000000000000000000
0000000000000000000000000013DDFEA60000000000000000000000
00000000000000000000000003CBFEDB230000000000000000000000
00000000000000000000000026FEFE4D000000000000000000000000
00000000000000000000001FE0FE7301000000000000000000000000
000000000000000000000085FEFE3400000000000000000000000000
000000000000000000003DF2FEFE3400000000000000000000000000
0000000000000000000079FEFEDB2800000000000000000000000000
0000000000000000000079FECF120000000000000000000000000000
00000000000000000000000000000000000000000000000000000000
2807

(我在这里添加了换行符,以便能够看到'7'数字。)

现在我的问题是,描述了这种格式?或者说不同的地方定义前36个字节是某种标题,最后8个字节有一些标签对应?

我如何构建自己的数据? Blob TutorialLayers Definition都没有提供有关所需格式的信息。 我的目的不是使用图像数据,而是使用时间序列

谢谢!

2 个答案:

答案 0 :(得分:15)

我意识到协议缓冲区必须在这里发挥作用。因此,我尝试针对caffe.proto中定义的某些类型对其进行反序列化。

Datum 似乎非常合适:

{Caffe.Datum}
    Channels: 1
    Data: {byte[784]}
    Encoded: false
    FloatData: Count = 0
    Height: 28
    Label: 7
    Width: 28

所以答案很简单:它是' Datum'的序列化表示。按caffe.proto

定义的类型化实例

顺便说一下。因为英语不是我的母语,我必须首先意识到" Datum"是数据"

的单一形式

在使用您自己的数据时,其结构如下:

  

数据的传统blob维度是数字N x通道   K x高度H x宽度W. Blob存储器在布局中是行主要的,所以最后一个   /最右边的尺寸变化最快。例如,索引处的值   (n,k,h,w)物理上位于索引((n * K + k)* H + h)* W   + w。

请参阅Blobs, Layers, and Nets: anatomy of a Caffe model以获取参考资料

答案 1 :(得分:2)

我可以尝试回答你的第二个问题。由于Caffe只采用lmdb,hdf5等多种选定格式的数据,因此最好将数据转换(或生成 - 如果是合成数据)这些格式。以下链接可以帮助您。如果您在Python中使用import hdf5时遇到问题,那么您可以参考this页面。

Creating an LMDB file in Python

Writing an HDF5 file in Python

HDF5 more examples