关于用于图像分类或分割的补丁方式训练,我需要在训练过程中将对应于单个图像的多个补丁放入单个小批量中。如何在Keras做到这一点?或者我如何确保单个小批量中的多个训练补丁属于同一个训练图像?
答案 0 :(得分:1)
我建议你为此实现自己的生成器。这不需要复杂。你的代码将是这样的
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
类将确保每个批次仅包含来自同一输入图像的补丁。希望能让您了解如何实现这一目标。
查看keras.preprocessing
的源代码,了解可用于生成修补程序的不同函数(https://github.com/fchollet/keras/blob/master/keras/preprocessing/image.py)。
另外,如果您需要了解有关Python生成器https://wiki.python.org/moin/Generators的更多信息,请阅读此内容。