Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在tensorflow中翻转时,遮罩和图像的增强结果不一致_Python_Tensorflow_Data Augmentation - Fatal编程技术网

Python 在tensorflow中翻转时,遮罩和图像的增强结果不一致

Python 在tensorflow中翻转时,遮罩和图像的增强结果不一致,python,tensorflow,data-augmentation,Python,Tensorflow,Data Augmentation,我目前正在尝试实现我自己的函数,以便在tensorflow中进行成对数据扩充。为此,我需要对输入图像应用随机图像变换,并对输出遮罩应用相关变换(即旋转和翻转)。但是,图像翻转/反转无法正常工作。我目前拥有的代码示例如下: def paired_data_augmentation(image_masks_tuple): #the image_masks_tuple contains an image as its first #and masks as the remaining

我目前正在尝试实现我自己的函数,以便在
tensorflow
中进行成对数据扩充。为此,我需要对输入图像应用随机图像变换,并对输出遮罩应用相关变换(即旋转和翻转)。但是,图像翻转/反转无法正常工作。我目前拥有的代码示例如下:

def paired_data_augmentation(image_masks_tuple):
    #the image_masks_tuple contains an image as its first
    #and masks as the remaining elements
    def flipper(image_masks,mode = 'lr'):
        image = image_masks[0]
        masks = image_masks[1:]
        if mode == 'lr':
            image_masks = [
                tf.reverse(m,[0]) for m in image_masks]
        elif mode == 'ud':
            image_masks = [
                tf.reverse(m,[1]) for m in image_masks]
        image = image_masks[0]
        masks = image_masks[1:]
        return [image,*new_masks]

    image = image_masks_tuple[0]
    masks = image_masks_tuple[1:]
    image = tf.image.convert_image_dtype(image, dtype=tf.float32)

    flip_lr = tf.random_uniform([])
    flip_ud = tf.random_uniform([])

    tmp = [image,*masks]

    tmp = tf.cond(
        tf.greater_equal(flip_lr,0.5),
        lambda: flipper(tmp,mode = 'lr'),
        lambda: tmp)
    set_shape(tmp)
    tmp = tf.cond(
        tf.greater_equal(flip_ud,0.5),
        lambda: flipper(tmp,mode = 'ud'),
        lambda: tmp)
    set_shape(tmp)

    return tmp
我所期望的是,如果
flip\u lr>0.5
flip\u ud>0.5
,以相同的方式翻转所有图像/遮罩,但实际发生的是,一些图像将在遮罩未翻转和v/v的情况下翻转。有人经历过这种情况并知道如何解决它吗


提前感谢

根据以下代码行:

        if mode == 'lr':
            image_masks = [
                tf.reverse(m,[0]) for m in image_masks]
        elif mode == 'ud':
            image_masks = [
                tf.reverse(m,[1]) for m in image_masks]
您仅对遮罩应用增强。如果您的任务是分割,那么无论您对遮罩应用何种增强,都应将其应用于groundtruth图像

我发现以下实现更容易:

def flip_image_vertically(image, mask):
    """Randomly flip an image and label vertically (left to right).
    """
    uniform_random = tf.random_uniform([], 0, 1.0)
    flip_cond = tf.less(uniform_random, .5)
    image = tf.cond(flip_cond, lambda: tf.image.flip_up_down(image), lambda: image)
    mask = tf.cond(flip_cond, lambda: tf.image.flip_up_down(mask), lambda: mask)

    return image, mask
它的作用是:

  • 生成介于0和1之间的随机浮点标量
  • 如果iff大于.5,则翻转图像和遮罩
  • 您还可以使用进行水平翻转


    根据以下代码行:

            if mode == 'lr':
                image_masks = [
                    tf.reverse(m,[0]) for m in image_masks]
            elif mode == 'ud':
                image_masks = [
                    tf.reverse(m,[1]) for m in image_masks]
    
    您仅对遮罩应用增强。如果您的任务是分割,那么无论您对遮罩应用何种增强,都应将其应用于groundtruth图像

    我发现以下实现更容易:

    def flip_image_vertically(image, mask):
        """Randomly flip an image and label vertically (left to right).
        """
        uniform_random = tf.random_uniform([], 0, 1.0)
        flip_cond = tf.less(uniform_random, .5)
        image = tf.cond(flip_cond, lambda: tf.image.flip_up_down(image), lambda: image)
        mask = tf.cond(flip_cond, lambda: tf.image.flip_up_down(mask), lambda: mask)
    
        return image, mask
    
    它的作用是:

  • 生成介于0和1之间的随机浮点标量
  • 如果iff大于.5,则翻转图像和遮罩
  • 您还可以使用进行水平翻转


    图像遮罩
    包含图像和遮罩。你的解决方案与我的解决方案在一个明确的方面是相同的,这就是为什么我投票支持它。但奇怪的行为仍然存在(他们的反应不同)。但不管怎样谢谢你<代码>图像遮罩包含图像和遮罩。你的解决方案与我的解决方案在一个明确的方面是相同的,这就是为什么我投票支持它。但奇怪的行为仍然存在(他们的反应不同)。但不管怎样谢谢你!