dataset - 如何在caffe中将任意数据集转换为siamese网络数据集格式?

标签 dataset deep-learning caffe conv-neural-network mnist

我有一个由灰度图像创建的数据集,我想将其与 caffe 中的暹罗网络示例一起使用,其中文档使用 mnist 数据集。我想用我自己的数据集替换 mnist 数据集

我发现为了做到这一点,我需要我的数据集采用暹罗网络所需的格式。这可以使用“create_mnist_siamese.sh”创建,它以 idx3-ubyte 格式加载 mnist 数据集,并在 lmdb 数据库的每个位置创建一个包含两个图像和一个匹配/不匹配标签的数据集 lmdb 数据库。

所以我想使用“create_mnist_siamese.sh”脚本,我的数据集也需要采用 idx-ubyte 格式。我尝试使用“mnisten”将数据集转换为 idx-ubyte 格式。但是我收到错误“错误:图像总数小于 num_tests”。我猜脚本没有识别我的图像。数据集的文件夹结构如下:

parent-directory
  - subfolder
  - subfolder 
  .
  .
  .
  -txt file

父目录名称 - '生成的数据集'
子文件夹 - 1 ,2 ,3 ...(子文件夹的标题为 1 - 30,因为我想通过子文件夹的名称来标记每个子文件夹中的数据)
txt 文件在每行包含带有类标签的图像标题。

如何在 caffe 中处理暹罗网络上的数据集?有没有直接的方法将我的数据集转换为 siamese 网络的 lmdb 格式?或者我必须使用 mnisten 吗?如果我这样做了,我该如何修复我的错误?非常感谢阿努的帮助。谢谢。

最佳答案

您不需要使用完全相同的格式 - 这只是一个教程......您所需要做的就是提供一个或多个数据层,总共三个顶级 Blob:datadata_psim。您可以用任何您喜欢的方式来做到这一点,例如LMDB(如 MNIST 示例)、HDF5 或其他。

一般说明

在本教程中,他们进一步展示了加载图像对的简单方法:在 channel 维度中连接两个图像。对于灰度,您获取两个输入图像,其中每个图像的尺寸例如为 [1, 1, 28, 28] (即 1 个图像、1 个 channel 、28x28 分辨率)。然后将它们连接成一张大小为 [1, 2, 28, 28] 的图像并保存它们,例如到 LMDB。

在网络中,加载数据后的第一步是“切片”层,它获取该图像,并沿该轴对其进行切片(即将其分割),从而创建两个顶部 blob,data data_p

 如何创建数据文件?

没有单一正确的方法可以做到这一点。 code本教程中的内容仅适用于 MNIST 集,因此除非您具有完全相同的格式,否则您无法在不进行更改的情况下使用它。您有几种可能性:

  1. 将图像转换为 MNIST 格式。然后,Caffe 教程中的代码就可以开箱即用。您似乎正在尝试此操作 - 如果您需要这方面的帮助,请具体说明:什么是“mnisten”,包括您的代码等等。

  2. 编写您自己的脚本来转换图像。 这实际上非常简单:您所需要做的就是用您最喜欢的编程语言读取图像,选择图像对,计算标签,然后重新保存为 LMDB。 这绝对是更灵活的方式。

  3. 创建具有多个顶级 blob 的 HDF5 文件。这很简单,但可能会比使用 LMDB 慢一点。

您使用什么取决于您 - 我可能会选择 HDF5,因为这是一种简单且非常灵活的开始方式。

 如何生成对?

现在,这是一个难题。本教程中的代码只是选择随机对,这并不是真正的最佳选择,并且会使学习速度相当慢。你不仅需要随机对,还需要有意义、困难但仍然可解决的对。如何做到这一点完全取决于您的数据集。

(Radenović,2016)中提出了一个非常复杂的示例:他们使用 Siamese 网络来学习建筑物图像检索的表示。他们使用运动结构 (SfM) 算法创建建筑物的 3D 重建,然后从这些重建中采样图像对。

创建配对的具体方式取决于您的数据 - 也许您可以接受随机配对 - 也许您需要一种复杂的方法。

文献:

F. Radenovic、G. Tolias 和 O. Chum。 “CNN 图像检索从 BoW 中学习:通过硬示例进行无监督微调”。见:欧洲计算机视觉 session (ECCV),2016。arXiv:1604.02426 .

关于dataset - 如何在caffe中将任意数据集转换为siamese网络数据集格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41904521/

相关文章:

python - 如何绘制多年来许多国家人口密度的 3d 散点图?

c++ - 修改多个输入的 Caffe C++ 预测代码

python - 保存中的问题 - 加载 apollocaffe 模型

python - Keras 密集层中的单位

deep-learning - CNN中如何选择卷积层数和滤波器数

cuda - 使用 cuDNN 编译 Caffe 的问题

c# - 如何在多个列上的数据集的数据表之间定义数据关系?

c# - 使用 DataSet 时数据库未更新

matlab - 在 MATLAB 中生成高斯数据集

python - 有没有办法向神经网络输出添加约束但仍然具有 softmax 激活函数?