毎回TensorFlow2でのデータオーギュメンテーションを
調べているので、メモしておきます。
環境
TensorFlowだけではなく、TensorFlowのaddon使うのでインストールしておきます。
pip install tensorflow_addons
ライブラリをimport します。
import tensorflow as tf
import PIL
import matplotlib.pyplot as plt
import tensorflow_addons as tfa
画像を読み込みます。私は家の猫の画像を使います。
img_raw = tf.io.read_file("cat.png")
img = tf.image.decode_image(img_raw)
plt.imshow(img)
cut_out
ランダムで画像の一部を切り抜く
new_img = tfa.image.random_cutout(tf.expand_dims(img,axis=0), (128,128), constant_values=255)
plt.imshow(tf.squeeze(new_img))
random_brightness
画像の明るさをランダムで変更する
new_img = tf.image.random_brightness(img, 0.9)
plt.imshow(new_img)
random_contrast
ランダムで画像のコントラストを変更する
new_img = tf.image.random_contrast(img, lower=0.5, upper=0.8)
plt.imshow(new_img)
random_saturation
ランダムで彩度を変更する
new_img = tf.image.random_saturation(img, lower=0.6, upper=0.8)
plt.imshow(new_img)
random_hue
ランダムで色相を変更する
new_img = tf.image.random_hue(img, max_delta=0.5)
plt.imshow(new_img)
rgb_to_grayscale
rgbの画像をグレースケールの画像に変更する
new_img = tf.image.rgb_to_grayscale(img)
plt.imshow(tf.squeeze(new_img), cmap="gray")
random_crop
画像の一部をランダムで切り取る
new_img = tf.image.random_crop(img,[224,224,3])
plt.imshow(new_img)
flip_left_right
画像の左右を反転する
new_img = tf.image.flip_left_right(img)
plt.imshow(new_img)
flip_up_down
画像の上下を反転する
new_img = tf.image.flip_up_down(img)
plt.imshow(new_img)
translate (tfa)
画像を移動する
new_img = tfa.image.translate(tf.expand_dims(img,axis=0), [50,50])
plt.imshow(tf.squeeze(new_img))
transform (tfa)
画像をゆがませる。ここは参考文献を参照してください。
theta = 0.4
trans = [1, tf.sin(theta), 0, 0, tf.cos(theta), 0, 0, 0]
new_img = tfa.image.transform(tf.expand_dims(img,axis=0), trans)
plt.imshow(tf.squeeze(new_img))
参考文献
https://androidkt.com/tensorflow-image-augmentation-using-tf-image/
コメント