Я бы хотел использовать библиотеку NVIDIA DALI для замены моего текущего конвейера предварительной обработки изображений, написанного на TensorFlow.
В настоящее время у меня есть следующий код, который применяет случайное искажение контраста с вероятностью0.5:
def random_contrast(image, lower=0.5, upper=1.5, prob=0.5, seed=None):
random_value = random_float(seed=seed)
image = tf.cond(tf.greater(prob, random_value),
lambda: tf.image.random_contrast(image, lower=lower, upper=upper, seed=seed),
lambda: image)
return image
Соответствующий Контраст op от DALI позволяет мне случайным образом изменять контраст изображения:
class MyPipeline(dali.pipeline.Pipeline):
def __init__(self, ...):
self.input = dali.ops.TFRecordReader(...)
...
self.random_contrast_value = dali.ops.Uniform(range=[0.5, 1.5])
self.random_contrast = dali.ops.Contrast()
def define_graph(self):
# Read images and labels
inputs = self.input(name="Reader")
images = inputs["image/encoded"]
labels = inputs["image/class/label"].gpu()
# Decode and augmentation
images = self.decode(images)
images = self.resize(images)
images = self.random_contrast(images.gpu(), contrast=self.random_contrast_value())
return (images, labels)
Но это будет применять искажение к каждомуобраз.Как сделать так, чтобы операция вызывалась только с вероятностью 50%?