关于将单个图像的多个补丁放入单个小批量中

regarding putting multiple patches for a single image into a single mini-batch

关于图像分类或分割的patch-wise训练,我需要在训练过程中将对应于单个图像的多个patch放入一个mini-batch中。如何在 Keras 中做到这一点?或者如何确保单个小批量中的多个训练补丁属于同一训练图像?

我建议您为此实现自己的生成器。这不需要很复杂。你的代码将是这样的

class PatchGenerator():
    def __init__(self, batch_size, X, y):
        self.batch_size = batch_size
        # self.X is a list of input images
        self.X = X
        # self.y is a list of target classes
        self.y = y
        self.index = 0

    def __iter__(self):
        return self

    def next(self):
        # Get next image
        image = self.X[self.index]
        target = self.Y[self.target]
        self.index += 1
        if self.index > len(self.X):
            self.index = 0

        batch = []
        for i in range(self.batch_size):
            # Generate a new random patch for the image
            patch = get_random_patch(image) # Implement this yourself
            batch.append((patch, target))
        return np.array(batch)

# Create the new generator
patch_generator = PathGenerator(32, X, y)

# Fit your model with the generator
model.fit_generator(patch_generator, samples_per_epoch=len(X))

上面的 PatchGenerator class 将确保每个批次仅包含来自同一输入图像的补丁。它有望让您了解如何实现它。

查看 keras.preprocessing 的源代码,了解可用于生成补丁的不同函数 (https://github.com/fchollet/keras/blob/master/keras/preprocessing/image.py)。

此外,如果您需要了解有关 Python 生成器的更多信息,请阅读本文 https://wiki.python.org/moin/Generators