iT邦幫忙

2024 iThome 鐵人賽

DAY 7
0
AI/ ML & Data

輕鬆上手AI專案-影像分類到部署模型系列 第 7

[Day 7] 資料增強的方法 (1):ImageDataGenerator

  • 分享至 

  • xImage
  •  

前言

有時候我們會遇到資料集數量不足的問題,或是模型訓練發生過度擬合(Overfitting),會使用資料增強(Data Augmentation)來讓資料集擴增或產生多樣性,讓模型更加泛化(Generalization)。今天先介紹其中一種常用於影像的資料增強方法,為使用 Keras 中的 ImageDataGenerator() 來做資料增強,通常是對影像做一些幾何轉換,例如翻轉、平移、縮放或鏡射等,分割驗證集也可以在這裡操作。

使用方法

匯入 ImageDataGenerator()

from keras.preprocessing.image import ImageDataGenerator

設定想要做的資料增強方法(以部分為例):

trdata = ImageDataGenerator(rescale = 1./255,
                            rotation_range=45,
                            width_shift_range=0.2,
                            height_shift_range=0.2,
                            zoom_range=0.2,
                            horizontal_flip=True,
                            validation_split=0.2)

參數說明:

  • rescale:將影像像素縮放,1./255 可將像素值轉換至 [0,1]。
  • rotation_range:隨機旋轉角度。
  • width_shift_range:隨機水平平移。
  • height_shift_range:隨機垂直平移。
  • zoom_range:隨機縮放。
  • horizontal_flip:隨機水平翻轉。
  • validation_split:分割驗證集的比例。

其他參數可以參考:tf.keras.preprocessing.image.ImageDataGenerator - TensorFlow

實際應用

在 Kaggle 資料集上,我找了一個 Bear dataset 作為實作範例資料集。

指定一個變數為資料集的路徑:

trpath = "./Kaggle/data/"

將這個資料集做資料增強:

trdata = ImageDataGenerator(rescale = 1./255,
                            rotation_range=45,
                            horizontal_flip=True,
                            validation_split=0.2)

之後可以利用 flow_from_directory() 來讀取路徑下的資料夾,如果資料集內是以類別整理好,會直接將資料夾名稱當作資料夾內檔案的類別名稱。

讀取訓練資料集:

traindata = trdata.flow_from_directory(directory=trpath, 
                                       target_size=(256,256),
                                       shuffle=True,
                                       subset='training')

其中 directory 為欲使用的訓練資料集路徑 trpath,target_size 為影像的大小,通常會使用長寬相同的正方形,shuffle 為將資料集做洗牌,subset 指定讀取哪一個資料集。

驗證資料集的讀取方法相同,也是從 trpath 讀取(因為我們從 trpath 中做分割,如果要另外準備一個驗證資料集也是可以的),subset 記得改成 'validation'

valdata = trdata.flow_from_directory(directory=trpath, 
                                     target_size=(256,256), 
                                     shuffle=True,
                                     subset='validation')

用一張影像作為範例,印出 10 張使用 ImageDataGenerator() 以及上述參數做資料增強的結果:
https://ithelp.ithome.com.tw/upload/images/20240913/20166645oJCYmbL2bC.png

今天先介紹到這裡,明天會介紹另一種做資料增強的方法。

參考資料


上一篇
[Day 6] 模型的靈魂:資料前處理
下一篇
[Day 8] 資料增強的方法 (2):以新增 Layer 實現
系列文
輕鬆上手AI專案-影像分類到部署模型30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言