【问题标题】:Caffe: Understanding expected lmdb datastructure for blobsCaffe:了解 blob 的预期 lmdb 数据结构
【发布时间】:2015-06-14 07:33:19
【问题描述】:

我试图了解数据在 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 都没有提供太多有关所需格式的信息。 我的意图不是使用图像数据,而是时间序列

谢谢!

【问题讨论】:

    标签: caffe lmdb


    【解决方案1】:

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

    基准似乎是最合适的:

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

    所以答案很简单:它是根据caffe.proto 定义的“基准”类型实例的序列化表示形式

    顺便说一句。由于英语不是我的母语,我必须首先意识到“基准”是“数据”的单数形式

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

    数据的常规 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

    【讨论】:

    • “基准” = 一个单独的数据 - 就像一个案例
    • 您是否设法在 C++ 程序中创建了 LMDB 文件?不确定我是否理解您的问题。
    • 我使用的是 C# 而不是 C++,但是是的,在了解了上述内容之后,很容易将其连接到 LMDB
    【解决方案2】:

    我可以试着回答你的第二个问题。由于 Caffe 仅采用 lmdb、hdf5 等一系列选定格式的数据,因此最好将您的数据转换(或生成 - 在合成数据的情况下)这些格式。以下链接可以帮助您。如果你在 Python 中使用 import hdf5 有问题,可以参考this 页面。

    Creating an LMDB file in Python

    Writing an HDF5 file in Python

    HDF5 more examples

    【讨论】:

      猜你喜欢
      • 2018-07-09
      • 2016-09-23
      • 2016-01-15
      • 2016-02-11
      • 2016-01-12
      • 1970-01-01
      • 2016-07-14
      • 2016-03-24
      • 2016-12-18
      相关资源
      最近更新 更多