0

私は現在、でペアデータ拡張を行う独自の関数を実装しようとしています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_lr > 0.5またはflip_ud > 0.5、しかし実際に起こっているのは、マスクが反転してv / vになることなく、一部の画像が反転されることです。誰かがこれを経験し、それを解決する方法を知っていますか?

前もって感謝します

4

1 に答える 1