Image 多输入图像

Image 多输入图像,image,machine-learning,neural-network,deep-learning,caffe,Image,Machine Learning,Neural Network,Deep Learning,Caffe,我正在考虑实现一个Caffe CNN,它接受两个输入图像和一个标签(稍后可能是其他数据),我想知道是否有人知道prototxt文件中用于执行此操作的正确语法?它只是一个带有额外顶部的图像数据层吗?或者我应该为每一层使用单独的图像_数据层 谢谢, James编辑:我最近一直在使用HDF5_数据层来实现这一点,这绝对是一条路要走 HDF5是一个键值存储,其中每个键都是一个字符串,每个值都是一个多维数组。因此,要使用HDF5_数据层,只需为要使用的每个顶部添加一个新键,并设置该键的值以存储要使用的图像

我正在考虑实现一个Caffe CNN,它接受两个输入图像和一个标签(稍后可能是其他数据),我想知道是否有人知道prototxt文件中用于执行此操作的正确语法?它只是一个带有额外顶部的图像数据层吗?或者我应该为每一层使用单独的图像_数据层

谢谢,
James

编辑:我最近一直在使用HDF5_数据层来实现这一点,这绝对是一条路要走

HDF5是一个键值存储,其中每个键都是一个字符串,每个值都是一个多维数组。因此,要使用HDF5_数据层,只需为要使用的每个顶部添加一个新键,并设置该键的值以存储要使用的图像。从python编写这些HDF5文件很容易:

import h5py
import numpy as np

filelist = []
for i in range(100):
    image1 = get_some_image(i)
    image2 = get_another_image(i)
    filename = '/tmp/my_hdf5%d.h5' % i
    with hypy.File(filename, 'w') as f:
        f['data1'] = np.transpose(image1, (2, 0, 1))
        f['data2'] = np.transpose(image2, (2, 0, 1))
    filelist.append(filename)
with open('/tmp/filelist.txt', 'w') as f:
    for filename in filelist:
        f.write(filename + '\n')
然后只需将HDF5_数据参数的源设置为“/tmp/filelist.txt”,并将顶部设置为“data1”和“data2”

我在下面留下最初的答复:

====================================================

有两种很好的方法可以做到这一点。最简单的方法可能是使用两个单独的图像数据层,一个包含第一个图像和标签,另一个包含第二个图像。Caffe从LMDB或LEVELDB(键值存储)检索图像,假设您创建了两个具有相同整数id键的相应图像的数据库,Caffe实际上将正确加载图像,并且您可以继续使用两个层的数据/标签构建网络


这种方法的问题是,拥有两个数据层并不是很令人满意,而且如果您想做更高级的事情,比如为边界框等使用非整数标签,它的可扩展性也不太好。如果您准备在这方面投入时间,通过修改tools/convert_imageset.cpp文件以跨通道堆叠图像或其他数据,您可以做得更好。例如,您可以创建一个具有6个通道的基准面-前3个通道用于第一个图像的RGB,第二个通道用于第二个图像的RGB。在“使用图像\数据层”中阅读此内容后,可以使用切片层将流拆分为两个图像,切片点位于索引3处,沿切片\尺寸=1维。如果在进一步的道路上,你决定要加载更复杂的数据,你会理解编码方案,并且可以根据SRC/CAFE/Leals/DATAYLAY.CPP编写自己的解码层,以获得对流水线的完全控制。

< P>你也可以考虑使用HDF5A数据层,多个“顶部”。你找到这个了吗?如果是这样,请发布一个答案。您是否考虑过将两张图像作为双通道?@james sergeant也许您可以接受答案?RusellStewart的回答看起来很棒。谢谢!我同意这些方法。对于第二个,如果我有不同大小的图像呢?因此,我无法将它们堆叠到不同的通道中,对吗?无法加载大小大于2GB的hdf5数据!