LoginSignup
leooon
@leooon (玲央 石崎)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

tf.keras.layers.Layerでaugment layerを作りたい。

解決したいこと

自分でlayerを作って,内部でaugmentをしたいです。
具体的には以下のaugmentを適用したいです。

import imgaug.augmenters as iaa

class AugLayer(tf.keras.layers.Layer):
  def __init__(self, n, m):
    super().__init__()
    self.augment = iaa.RandAugment(n, m)

  def call(image, **kwargs):
    image = tf.cast(image, tf.uint8)
    image = self.augment(image.numpy())
    image = tf.cast(image, tf.float32)
    return image

発生しているエラー

layerが機能するか試すために、以下を実行するとエラーが発生します。

augment = AugLayer(n=3,m=7)
augment(data)
TypeError: call() takes 1 positional argument but 2 were given

上記でaugmentに引数として渡した、’data’は以下の様な構成になっています。

data = (label,
        {'inp1': imgs
         'inp2': label})

自分で試したこと

・上記のエラー文を解消するために、callの引数に**kwargsを追加しました。しかし、エラーは解消できていません。

どなたか、layerにaugmentを適用する方法をご教示していただけませんか。よろしくお願いいたします。

0

1Answer

クラスのメソッドに必要なselfが抜けているのでは?

import imgaug.augmenters as iaa

class AugLayer(tf.keras.layers.Layer):
  def __init__(self, n, m):
    super().__init__()
    self.augment = iaa.RandAugment(n, m)

- def call(image, **kwargs):
+ def call(self, image, **kwargs):
    image = tf.cast(image, tf.uint8)
    image = self.augment(image.numpy())
    image = tf.cast(image, tf.float32)
    return image
1Like

Comments

  1. @leooon

    Questioner
    @PondVillege様

    いつも迅速なご回答ありがとうございます。
    お陰様でエラーを解消できました。

    ありがとうございました。

Your answer might help someone💌