keras.preprocessingのrandom_rotationが回転してくれない時の対処
今回の話については、何が原因なのかわかっていません。
でも対処法があるので書いている次第です。
/**TLDR
keras.preprocessingのrandom_rotationがちゃんと回転してくれない時は
random_rotation(x,rg=360,row_axis=0,col_axis=1,channel_axis=2)
みたいに row_axis ,col_axis ,channel_axis もちゃんと指定してあげよう。
**/
/** ここから解説 **/
まずは現象が発生した僕の環境ですが
tensorflow 1.6 + keras 2.1.5です。
画像はまずarrayに変換する必要があります。
keras.preprocessingを使いますと、
img = load_img("sample.jpg", target_size=(200,300))
array = img_to_array(img)
みたいにしますよね。ここで
print(array.shape)
として、arrayの構造を見てみますと、
(200,300,3)と出ます。
つまり(縦ピクセル数 , 横ピクセル数, チャネル)ですね。
よって、random_rotationを呼び出すときは
row_axis=0,
col_axis=1,
channel_axis=2,
が正しいわけです。ここまでよろしいでしょうか?
では、これらaxisを指定しない場合どうなるか...kerasのソースのデフォルト値を見てみましょう
https://github.com/tensorflow/tensorflow/blob/r1.7/tensorflow/python/keras/_impl/keras/preprocessing/image.py
row_axis=1,
col_axis=2,
channel_axis=0,
....ずれてる...
おいkeras!img_to_arrayも同じkeras.preprocessingなんだからちゃんと合わせようよ!www
実はこのkeras.preprocessing、他のrandom_zoomやrandom_shift関数でも全部ずれてます。
謎なのは、random_zoomやrandom_shiftの場合はrow_axis ,col_axis ,channel_axis を呼び出す時に指定しないでも(つまりデフォルト値で)正常に動作するのです...
random_rotationだけがダメなのです...
さて、今日の情報はお役に立ちましたでしょうか?
でも対処法があるので書いている次第です。
/**TLDR
keras.preprocessingのrandom_rotationがちゃんと回転してくれない時は
random_rotation(x,rg=360,row_axis=0,col_axis=1,channel_axis=2)
みたいに row_axis ,col_axis ,channel_axis もちゃんと指定してあげよう。
**/
/** ここから解説 **/
まずは現象が発生した僕の環境ですが
tensorflow 1.6 + keras 2.1.5です。
画像はまずarrayに変換する必要があります。
keras.preprocessingを使いますと、
img = load_img("sample.jpg", target_size=(200,300))
array = img_to_array(img)
みたいにしますよね。ここで
print(array.shape)
として、arrayの構造を見てみますと、
(200,300,3)と出ます。
つまり(縦ピクセル数 , 横ピクセル数, チャネル)ですね。
よって、random_rotationを呼び出すときは
row_axis=0,
col_axis=1,
channel_axis=2,
が正しいわけです。ここまでよろしいでしょうか?
では、これらaxisを指定しない場合どうなるか...kerasのソースのデフォルト値を見てみましょう
https://github.com/tensorflow/tensorflow/blob/r1.7/tensorflow/python/keras/_impl/keras/preprocessing/image.py
row_axis=1,
col_axis=2,
channel_axis=0,
....ずれてる...
おいkeras!img_to_arrayも同じkeras.preprocessingなんだからちゃんと合わせようよ!www
実はこのkeras.preprocessing、他のrandom_zoomやrandom_shift関数でも全部ずれてます。
謎なのは、random_zoomやrandom_shiftの場合はrow_axis ,col_axis ,channel_axis を呼び出す時に指定しないでも(つまりデフォルト値で)正常に動作するのです...
random_rotationだけがダメなのです...
さて、今日の情報はお役に立ちましたでしょうか?
Comments