深度學習中的數據增強技術(一)


 

數據增強的原理

在深度學習中,一般要求樣本的數量要充足,樣本數量越多,訓練出來的模型效果越好,模型的泛化能力越強。但是實際中,樣本數量不足或者樣本質量不夠好,這就要對樣本做數據增強,來提高樣本質量。

 

在圖像分類任務中,對於輸入的圖像進行一些簡單的平移、縮放、顏色變換等,不會影響圖像的類別。

 

如下兩圖,雖然做了變換,但不影響被識別成狗狗。

原始圖片:

轉換后圖

 

對於圖像類型的訓練、數據,所謂的數據增強( 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深度學習框架

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM