前提
kerasのImageDataGeneratorをカスタマイズしてRandom ErasingとMixupの実装ができたのですが、画像を変換する際の処理順をMixup→Random Erasing→ImageDataGeneratorの変換の順に処理することは可能でしょうか?
また、できればMixupの発生させる確立を指定したいです。
実現したいこと
・画像の処理順をMixup→Random Erasing→ImageDataGeneratorの変換の順で処理
・Mixupの発生させる確立を指定
発生している問題
・apply_transform内でmixupがうまくできていない
該当のソースコード
python
1from random_eraser import get_random_eraser 2 3class MyImageDataGenerator(ImageDataGenerator): 4 def __init__(self,mix_up_alpha = 0.0, *args, **kwargs): 5 self.random_eraser = get_random_eraser() 6 super().__init__(*args, **kwargs) 7 assert mix_up_alpha >= 0.0 8 self.mix_up_alpha = mix_up_alpha 9 10 ##mixup用 11 def img(gen: ImageDataGenerator): 12 for x, y in gen: 13 yield x, y 14 15 def mix_up(self, X1, y1, X2, y2): 16 assert X1.shape[0] == y1.shape[0] == X2.shape[0] == y2.shape[0] 17 batch_size = X1.shape[0] 18 l = np.random.beta(self.mix_up_alpha, self.mix_up_alpha, batch_size) 19 X_l = l.reshape(batch_size, 1, 1, 1) 20 y_l = l.reshape(batch_size, 1) 21 X = X1 * X_l + X2 * (1-X_l) 22 y = y1 * y_l + y2 * (1-y_l) 23 return X, y 24 25 def apply_transform(self, x, transform_parameters): 26 27 x = self.mix_up_alpha(x) # 先に処理する 28 x = self.random_eraser(x) 29 return super().apply_transform(x, transform_parameters) 30 31
試したこと
回答を参考にmixupを実装したかったのですが、どのようにdef imgの画像ジェネレーターとmixupするのか詰まっている状況です。
補足情報(FW/ツールのバージョンなど)
・https://dev.classmethod.jp/articles/tensorflow-image-generator-custom/
・https://dev.classmethod.jp/articles/tensorflow-image-generator-custom-mixup/
上記二つのサイトを参考に実装しました。
使用ツール
anacondaを使用
python 3.8.13
TensorFlow 2.3
Spyder 5.3.3
回答1件
あなたの回答
tips
プレビュー