NVIDIA DALI: искажение изображения с вероятностью - PullRequest
0 голосов
/ 09 апреля 2019

Я бы хотел использовать библиотеку 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%?

...