Caffe:了解 blob 的预期 lmdb 数据结构
Caffe: Understanding expected lmdb datastructure for blobs
我正在尝试了解数据在 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 个字节是某种 header 而后 8 个bytes有一些标签对应吗?
我将如何构建自己的数据?
Blob Tutorial nor Layers Definition 都没有透露太多关于所需格式的信息。 我的意图不是使用图像数据,而是时间序列
谢谢!
我意识到协议缓冲区必须在这里发挥作用。因此,我尝试针对 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" 是 "data"
的单数形式
关于使用您自己的数据,其结构如下:
The conventional blob dimensions for data are number N x channel
K x height H x width W. Blob memory is row-major in layout so the last
/ rightmost dimension changes fastest. For example, the value at index
(n, k, h, w) is physically located at index ((n * K + k) * H + h) * W
+ w.
我可以试着回答你的第二个问题。由于 Caffe 仅采用一系列选定格式的数据,如 lmdb、hdf5 等,因此最好将数据转换(或生成 - 在合成数据的情况下)为这些格式。以下链接可以帮助您。如果您在 Python 中遇到 import hdf5
的问题,那么您可以参考 页面。
Creating an LMDB file in Python
Writing an HDF5 file in Python
我正在尝试了解数据在 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 个字节是某种 header 而后 8 个bytes有一些标签对应吗?
我将如何构建自己的数据? Blob Tutorial nor Layers Definition 都没有透露太多关于所需格式的信息。 我的意图不是使用图像数据,而是时间序列
谢谢!
我意识到协议缓冲区必须在这里发挥作用。因此,我尝试针对 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" 是 "data"
的单数形式关于使用您自己的数据,其结构如下:
The conventional blob dimensions for data are number N x channel K x height H x width W. Blob memory is row-major in layout so the last / rightmost dimension changes fastest. For example, the value at index (n, k, h, w) is physically located at index ((n * K + k) * H + h) * W + w.
我可以试着回答你的第二个问题。由于 Caffe 仅采用一系列选定格式的数据,如 lmdb、hdf5 等,因此最好将数据转换(或生成 - 在合成数据的情况下)为这些格式。以下链接可以帮助您。如果您在 Python 中遇到 import hdf5
的问题,那么您可以参考
Creating an LMDB file in Python
Writing an HDF5 file in Python