caffe lmdb如何输入多维数据?

Posted

技术标签:

【中文标题】caffe lmdb如何输入多维数据?【英文标题】:How to input multidimensional data to caffe lmdb? 【发布时间】:2016-09-23 10:01:26 【问题描述】:

我想复制Two-Stream Convolutional Networks for Action Recognition in Videos。

但在为 caffe 提供多帧输入时,感觉就像我碰壁了。

由于单帧网络提供 50% 的准确率。 但是当我通过 LMDB 输入 30*227*227 时。 20(10 帧,每帧 3 个通道)。 accuracy barely reaches 4%。

这让我相信我提供给 caffe 的输入不是所需的格式或模型是错误的(不太可能)。

我想输入 3 x 10 x 227 x 227 的样式。 但是 caffe LMDB 只有几个变量作为输入。即 高度、宽度、通道、数据、标签。

这让我只能在 3 维中写入数据,然后不能在第 4 帧维度中写入数据。

有人知道解决这个问题的方法吗?

或者你知道在哪里可以找到任何使用多帧数据进行分类的 caffe 示例。

据我所知,Caffe 使用 4D blob 来处理数据,因此即使我让它工作也无法处理批处理。所以它一次只能处理一个样本。这也取决于过滤器的设计方式以及它们是否可以处理帧的相关性,因为它们在通常用作批处理的第 4 维中。

对此有什么想法吗?

P.s 我也试过HDF5 similar results。

    datum = caffe.proto.caffe_pb2.Datum()
    datum.channels =3 #3 for a single image/ 30 for stacking them which I tried and get accuracy of 5%
    datum.height = 227
    datum.width = 227
    datum.data = X[i].tostring()  # or .tostring() if numpy < 1.9
    datum.label = classlabel
    str_id = ':10'.format(i+(counter))

【问题讨论】:

改用 hdf5 输入 也试过了.. 也附上结果 查看您的 HDF5 结果:输入大小为 50x48x58x58。和这个问题有关系吗?准确率从 ~3% 开始,但随后稳步上升...... @Shai 不是真的这是另一个实验,会用 HDF5 再试一次......但我刚刚再次浏览了Two stream paper,发现他们实际上给出了 w×h×2L 的输入L 是帧数。但通常 caffe 接受 channelswh 的输入。而且我不确定他们是如何堆叠 2l 的,例如所有 Rs,然后是 B 和 G。 R1,R2,... B1,B2...G1,G2.... 或 R1, B1,G1,R1,G2,B2 ..... ...有什么想法吗? 恐怕我对这个工作不熟悉,所以无法真正回答。这取决于您希望处理数据的方式 【参考方案1】:

根据提到的文章,RGB 图像是空间流的输入,而时间流的堆叠光流帧。因此,您应该首先为时间流提取光流帧。光流帧的每个点都对应于可以看到的带有 x 和 y 分量的向量 作为图像通道。通过堆叠 L 个光学帧,您将获得具有 2*L 通道的图像,并且您的 caffe 输入将是标准的 batch_sizex2LxHxW。另请查看repo 和code 以获得更多帮助。

【讨论】:

以上是关于caffe lmdb如何输入多维数据?的主要内容,如果未能解决你的问题,请参考以下文章

Caffe系列2——制作LMDB数据详细过程(手把手教你制作LMDB)

CAFFE安装(10):Mnist测试(可不做)

Caffe使用:如何将一维数据或其他非图像数据转换成lmdb

caffe学习笔记图像数据转换为db(leveldb/lmdb)文件

[caffe]网络各层参数设置

paper 146:CAFFE--leveldb/lmdb文件