數據增強的原理
在深度學習中,一般要求樣本的數量要充足,樣本數量越多,訓練出來的模型效果越好,模型的泛化能力越強。但是實際中,樣本數量不足或者樣本質量不夠好,這就要對樣本做數據增強,來提高樣本質量。
在圖像分類任務中,對於輸入的圖像進行一些簡單的平移、縮放、顏色變換等,不會影響圖像的類別。
如下兩圖,雖然做了變換,但不影響被識別成狗狗。
原始圖片:
轉換后圖
對於圖像類型的訓練、數據,所謂的數據增強( Data Augmentation )方法是指利用平移 、 縮放、顏色等變躁,人工增大訓練、集樣本的個數 ,從而獲得充足的訓練數據,使模型訓練的效果更好。
對於圖像類型的訓練、數據,所謂的數據增強( Data Augmentation )方法是指利用平移 、 縮放、顏色等變躁,人工增大訓練、集樣本的個數 ,從而獲得充足的訓練數據,使模型訓練的效果更好。
關注公眾號“從機器學習到深度學習那些事”獲取更多最新資料
TensorFlow實現圖片數據增強
①圖片大小調整
import matplotlib.pyplot as plt import tensorflow as tf # 讀取圖片 image_data = tf.gfile.FastGFile("data/dog1.jpg", 'br').read() # 4中調整圖片大小的方法,實際應用中可以根據需求組合調整 with tf.Session() as sess: img_data = tf.image.decode_jpeg(image_data) plt.imshow(img_data.eval()) plt.show() # 將圖片數據轉換成實數類型 img_data = tf.image.convert_image_dtype(img_data, dtype=tf.float32) # 重新轉換成300X900的圖片,並展示出調整后的圖片 resized = tf.image.resize_images(img_data, [300, 900], method=1) plt.imshow(resized.eval()) plt.show() # # resize_image_with_crop_or_pad()如原始圖像大於目標圖像,則截取,如果小於則自動填充 # croped = tf.image.resize_image_with_crop_or_pad(img_data, 1000, 1000) # plt.imshow(croped.eval()) # padded = tf.image.resize_image_with_crop_or_pad(img_data,3000,3000) # plt.imshow(padded.eval()) # 按照比例裁剪圖片 central_croped = tf.image.central_crop(img_data,0.8) plt.imshow(central_croped.eval()) plt.show()
部分處理效果展示:
②圖像翻轉
import matplotlib.pyplot as plt import tensorflow as tf # 讀取圖片 image_data = tf.gfile.FastGFile("data/dog1.jpg", 'br').read() # 圖片翻轉 with tf.Session() as sess: img_data = tf.image.decode_jpeg(image_data) plt.imshow(img_data.eval()) plt.show() # 將圖片數據轉換成實數類型 img_data = tf.image.convert_image_dtype(img_data, dtype=tf.float32) # # 圖像上下翻轉 # fliped1 = tf.image.flip_up_down(img_data) # plt.imshow(fliped1.eval()) # 左右翻轉 fliped = tf.image.flip_left_right(img_data) plt.imshow(fliped.eval()) # 沿着對角線翻轉 # transposed = tf.image.transpose_image(img_data) # plt.imshow(transposed.eval()) # # 以50%概率上下翻轉 # fliped = tf.image.random_flip_up_down(img_data) # plt.imshow(fliped.eval()) # # 以50%概率左右翻轉 # fliped = tf.image.random_flip_left_right(img_data) # plt.imshow(fliped.eval()) plt.show()
部分處理效果展示:
關注公眾號“從機器學習到深度學習那些事”獲取更多最新資料
先寫這么多,后續會再發一篇,把剩下的色彩調整、標准化、標注裁剪等放在一起發出來,同時提供一個整合后的代碼。感謝支持
參考資料
21個項目玩轉深度學習
TensorFlow實戰Google深度學習框架