- 影像預處理:統一影像尺寸 (Image Resizing)
在訓練神經網路時,輸入影像的大小通常需要固定,然而自行收集的資料集中的影像尺寸往往不一。因此,在預處理階段需要將圖片統一尺寸。
- 目的: 將大小不一的輸入影像統一為神經網路所需的固定尺寸。
- 示例程式 (基於 TensorFlow/NumPy/Matplotlib):
- 使用 tf.io.read_file(x) 讀取影像檔案。
- 使用 tf.image.decode_jpeg(image, channels=3) 將 JPEG 格式解碼成三維張量。
- 使用 tf.image.resize(image, [128, 128]) 將影像縮小或放大到指定尺寸(例如 128x128)。
- 最後,將張量轉換為 NumPy 陣列 (np.asarray(image.numpy(), dtype='uint8')) 並使用 plt.imshow(image) 顯示。
- 結果範例: 原始影像大小可能是 (620,620,3),經過處理後變成 (128,128,3)。
- 資料增強 (Data Augmentation)
資料增強是一種為了提高深度學習模型性能的技術,它在現有的訓練資料基礎上人工創建新的、合理的訓練樣本。這能有效擴展訓練資料集的範圍,讓模型學習到更多影像特徵,並減少過度擬合。
- 目的: 擴展訓練資料集,提高模型的泛化能力。
- 常用增強操作: 旋轉、翻轉、調整大小、比例尺、改變亮度、改變色溫、裁剪等。
- 注意事項: 資料增強主要用於訓練資料集,不應應用於驗證或測試資料集。同時,某些操作(如垂直翻轉)可能不適用於特定的任務。
- 使用 tf.keras.preprocessing.image.ImageDataGenerator 進行批次資料增強與讀取
TensorFlow 提供了 ImageDataGenerator 類別,它能從資料夾中快速產生增強後的資料。
主要步驟:
- 在工作目錄下建立資料夾,並將不同類別的圖片分門別類放置於各自的子資料夾中(例如:根目錄 flower 下有子資料夾 rose,其中包含玫瑰圖片)。
- 建立 ImageDataGenerator 物件,並設定增強參數(如 rescale=1/255)。
- 使用 flow_from_directory() 方法從指定資料夾生成一個資料批次產生器 (Generator)。
生成器使用方式:
產生的生成器可以搭配 for...in 迴圈一起使用進行迭代,生成資料批次。需要注意的是,生成器會不斷地生成資料,因此需要手動設定結束條件(例如使用 break)。