iT邦幫忙

2025 iThome 鐵人賽

0
AI & Data

從入門村到最終 BOSS:30 天打通深度學習主線系列 第 20

Day 20:資料結構化、擴增

  • 分享至 

  • xImage
  •  

我們完成了資料的爬蟲採集和人工清洗。今天,我們要將這些乾淨的圖片「精加工」:先進行結構化分割,然後實作 PyTorch/Fast.ai 的資料DataLoader,最後結合 Day 17 我們提及的遷移學習理論,正式啟動我的多模型 Stage 1 訓練。

一、數據準備最後環節:8:1:1 資料分割
在訓練之前,必須將清洗好的圖片進行嚴格的 8:1:1 資料分割:80% 訓練集、10% 驗證集、10% 測試集。這一步確保了我的模型評估是科學且客觀的。

  1. 結構化分割實作
    我使用 Python 腳本來實作 8:1:1 比例切分,確保每個類別都維持相同的分配比例,實現類別平衡。
# 程式碼實作:隨機分配檔案並建立 train/val/test 資料夾結構
import os, random, shutil

MY_PROJECT_PATH = '/content/drive/MyDrive/My_Disaster_Project/'
SOURCE_ROOT = os.path.join(MY_PROJECT_PATH, 'Disaster_Crawler_Cleaned/') 
TARGET_ROOT = os.path.join(MY_PROJECT_PATH, 'Disaster_Data_Processed/')
SPLIT_RATIOS = {'train': 0.8, 'val': 0.1, 'test': 0.1}
CLASSES = ['Drought', 'Tsunami', 'Tornado', 'Sandstorm'] # 假設的類別

for class_name in CLASSES:
 

二、實作 PyTorch 資料載入管線 (DataLoader)
資料分割完成後,我的資料夾結構符合 Fast.ai 的 ImageFolder 要求。我現在實作 DataLoader,它同時完成了數據載入、資料擴增和標準化 。

  1. 資料擴增與標準化 (Transforms)
    為了對抗資料稀缺並符合預訓練模型的要求,我使用 Fast.ai 的 DataBlock 來定義我的轉換管線。
from fastai.vision.all import *

source = 'your_data_root_path' # 指向 TARGET_ROOT
dls = DataBlock(
    blocks=(ImageBlock, CategoryBlock),         # 圖像與類別的數據結構
    get_items=get_image_files,                 # 獲取資料夾內所有圖像文件
    # 根據父資料夾 'train'/'val' 分割
    splitter=GrandparentSplitter(train_name='train', valid_name='val'), 
    get_y=parent_label,                        # 將父資料夾名稱作為標籤
    item_tfms=Resize(460),                     # 調整圖像大小
    # 批量級別的資料增強:尺寸為 224,並自動包含 ImageNet 標準化
    batch_tfms=aug_transforms(mult=2, min_scale=0.5, size=224) 
).dataloaders(source, bs=32) # 使用 Batch Size=32 載入數據

註:batch_tfms=aug_transforms(size=224) 這一行是核心。它對訓練集執行了隨機翻轉、旋轉等資料擴增,並將所有圖片轉換為224 X 224尺寸,同時進行了 ImageNet 標準化,確保數據格式與遷移學習基底模型的要求一致。

  1. 驗證 Dataloaders
    在開始訓練前,我確認了 DataLoader 正確讀取了類別和樣本數。
# 檢查 Dataloaders 資訊
print(f"總共的類別: {dls.vocab}")
print(f"訓練集樣本數: {len(dls.train_ds)} 張")
print(f"驗證集樣本數: {len(dls.valid_ds)} 張")

# 觀察一個批次的數據
dls.show_batch(max_n=4) #

https://ithelp.ithome.com.tw/upload/images/20251106/201536672BycDpbk54.jpg

註:視覺化驗證: dls.show_batch 顯示了經過資料擴增後的圖像,證明我的數據已成功轉化為模型可食用的食糧。

https://ithelp.ithome.com.tw/upload/images/20251106/20153667oXIWMtqPho.jpg


上一篇
Day 19:從爬蟲到清洗~我的資料準備旅程
下一篇
Day 21:多模型訓練 Stage 1 & Stage 2 微調
系列文
從入門村到最終 BOSS:30 天打通深度學習主線30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言