自分の備忘録/メモも兼ねて。
画像認識系のDeep Learningする際に、訓練データ(画像)を回転させたり左右反転したり、とデータの水増し(data augumentation)することってよくあると思います。Kerasでは、ImageDataGeneratorクラスを使って簡単に水増しできちゃうわけですが、その際のオプション「brightness_range」の挙動について。
###Kerasのbrigtness_rangeとは
brightness_rangeは、画像データの水増しの際に、明るさをランダムに変更するオプションです。こんな感じでImageDataGeneratorのコンストラクタに、brightness_rangeのオプションとして、明るさ変更の強度の範囲をタプルかリストで渡すだけです。あとはflowとかflow_from_directoryとかに上記を渡してあげると、ランダムに明るさを変えた画像を返すジェネレータを作ってくれます。fit_generatorにそのジェネレータを渡せば学習しながら画像を水増ししてくれて大変便利です。
(ImageDataGeneratorについて:https://keras.io/ja/preprocessing/image/)
from keras.preprocessing.image import ImageDataGenerator
img_gen = ImageDataGenerator(brightness_range=(0.3, 1.0))
model.fit_generator(
flow(img_gen), steps_per_epoch=100, epochs=10
)
###試してみたところおかしい
おかしいです。うまく学習が進みません。よく見てみると、brightness_rangeオプションを付けると、0-1値の範囲の画像を入力してるのに、どうやら0-255の範囲に変換されてしまっているよう… ちなみに使っているのは、Google Colabに最初から入っているバージョン2.1.6のKerasです。
※同様の指摘がこちらにありました。
https://github.com/keras-team/keras/issues/10366#issuecomment-449545374
とりあえず上記の現象を回避するために、ジェネレータから吐き出された画像を再度rescaleする処理を追加しましたが、うまく回避する方法ないものでしょうか。詳しい人教えてください。