我有一个我创建的灰度图像的数据集,我想用caffe中的暹罗网络示例,其中文档使用mnist数据集 . 我想用我自己的数据集替换mnist数据集
我看到,为此,我需要我的数据集采用siamese netwrk所需的格式 . 这可以使用'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
父目录名称 - 'generated dataset'
子文件夹 - 1,2,3 ...(子文件夹 Headers 为1 - 30,因为我想用子文件夹的名称标记每个子文件夹中的数据)
txt文件包含带有类标签的每一行的图像 Headers .
如何使用caffe中的暹罗网络上的数据集?有没有直接的方法将我的数据集转换为暹罗网络的lmdb格式?或者我必须使用mnisten?如果我这样做,我该如何解决我的错误? Anu帮助将不胜感激 . 谢谢 .
2 回答
您不需要使用完全相同的格式 - 这只是一个教程....您需要做的就是提供一个或多个数据层,总共有三个顶级Blob:
data
,data_p
和sim
. 你可以用你想要的任何方式做到这一点,例如LMDB(如在MNIST示例中),HDF5或其他任何内容 .一般说明
在本教程中,他们进一步展示了加载图像对的简便方法:在通道维度中连接两个图像 . 对于灰度,您可以拍摄两个输入图像,其中每个图像都具有尺寸
[1, 1, 28, 28]
(即1个图像,1个通道,28x28分辨率) . 然后你将它们连接成一个大小为[1, 2, 28, 28]
的图像并保存它们,例如到LMDB .在网络中,加载数据后的第一步是"Slice"图层,该图层采用此图像,并沿着该轴对其进行切片(即将其分割),从而创建两个Top blob,
data
和data_p
.如何创建数据文件?
没有一种正确的方法可以做到这一点 . 本教程中的code仅适用于MNIST集,因此除非您具有完全相同的格式,否则无法在不进行更改的情况下使用它 . 你有几种可能性:
将图像转换为MNIST格式 . 然后,Caffe教程中的代码开箱即用 . 看来你正在尝试这个 - 如果你需要帮助,请具体说:什么是“mnisten”,包括你的代码,等等 .
编写自己的脚本来转换图像 . 这实际上非常简单:您需要做的就是用您喜欢的编程语言读取图像,选择对,计算标签,然后重新保存为LMDB . 这绝对是更灵活的方式 .
使用多个Top blob创建HDF5文件 . 这很简单,但可能比使用LMDB慢一点 .
您使用的是由您决定的 - 我可能会使用HDF5,因为这是一种简单且非常灵活的方式 .
如何生成对?
现在,这是一个棘手的问题 . 本教程中的代码只选择随机对,这不是最佳选择,并且会使学习变得相当慢 . 你不仅需要随机对,你需要有意义的,困难的,但仍然可以解决 . 如何做到这完全取决于您的数据集 .
(Radenović,2016)提出了一个非常复杂的例子:他们使用暹罗网络来学习建筑物图像检索的表示 . 他们使用Structure-from-Motion(SfM)算法创建建筑物的三维重建,然后从这些重建中采样图像对 .
你如何创建对数取决于你的数据 - 也许你对随机对很好 - 也许你需要一个复杂的方法 .
Literature:
F.Radenović,G . Tolias和O. Chum . "CNN Image Retrieval Learns from BoW: Unsupervised Fine-Tuning with Hard Examples" . 在:欧洲计算机视觉 Session (ECCV),2016年.arXiv:1604.02426 .
生成对是暹罗网络中最重要的一步 . 但是,有一种简单的方法可以使用咖啡 .
Load the data as separate lmdbs
使用
create_imagenet.sh
或convert_imageset.cpp
脚本创建2 lmdbsdata_1
和data_2
. 对于两个集合使用相同的数据,除了data_2
包含一个少于data_1
的图像 .这将确保在每个epoc中,将比较不同的图像对,从而允许我们覆盖所有
nC2
组合(实际上n^2
)Introduce a Similarity layer in the prototxt
Create files for Similarity layer
Download files for similarity layer
将
similarity_layer.cpp
放在caffe/src/caffe/layers/
中,将similarity_layers.hpp
放在caffe/include/caffe/layers/
中并重建caffe .Note 如果您的网络没有使用上述技术收敛,那么您应该看看以下内容:
使用硬阴影选择图像对
确保正负对(不同对)的 balancer