iT邦幫忙

2025 iThome 鐵人賽

0
AI & Data

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

Day 19:從爬蟲到清洗~我的資料準備旅程

  • 分享至 

  • xImage
  •  

昨天,我鎖定了我的實戰專案目標:自然災害影像分類,並確定了資料集的結構要求。今天將展開實戰的第一個關卡——資料準備。由於市面上沒有現成的、符合我專案需求的資料集,我必須親手打造它。

這個過程包括了爬蟲採集、手動清洗,以及在 Google Colab 環境中完成最終的格式化。

flowchart LR
A[資料採集:The Crawler] --> B[數據清洗:人工+規則]
B --> C[結構化:ImageFolder]
C --> D[分割:train/val/test]

一、第一步:資料採集與 Colab 環境建立

  1. 為什麼要自己爬蟲?

現有公開資料集有兩個主要痛點:其一是影像型態不一致,常混入非衛星/俯瞰角度的照片(如近拍、宣傳圖),導致視覺語境混雜;其二是類別不夠細,難以對應「預警輔助」的實務需求,例如把 Drought 與一般沙漠景觀混為一談,造成標註與模型學習目標失焦。

因此我決定自行蒐集,策略如下:

目標鎖定:每一災害類別(Drought / Tsunami / Tornado / Sandstorm / Raining),優先衛星/航拍/俯瞰視角。

工具選用:Python 腳本 + 關鍵字組合(中英混搭、加入 “satellite / aerial view / top-down”),在 Colab 執行。

合規意識:尊重網站 robots.txt 與圖片授權;僅用於研究/教學,後文有檢核。

二、實作環境:Google Colab + Google Drive

Colab 的優勢在於免安裝、提供免費 GPU(可用於後續模型訓練)、並能直接掛載 Google Drive 以批次存取大檔,同時分享 Notebook 也相當便利、易於重現實驗。不過 Colab 的 GPU 有使用時數與資源配額限制,建議在真正進入模型(權重)訓練階段時再啟用 GPU,資料爬取/清洗與前處理則以 CPU 執行,能把配額留給最耗時的訓練與微調。

# Colab 環境:掛載 Google Drive
import os
from google.colab import drive

# 連接我的雲端硬碟,以便存取爬蟲下載的原始資料
drive.mount('/content/drive')

# 設定我的專案根目錄
MY_PROJECT_PATH = '/content/drive/MyDrive/My_Disaster_Project/'
print(f"專案工作空間路徑設定為: {MY_PROJECT_PATH}")

二、第二步:數據清洗與質量把關
爬蟲帶來的圖片數量雖然龐大,但**「噪音」也高得驚人。這一步是最耗時、但對模型成敗最關鍵**的一步。

  1. 我面臨的「數據噪音」挑戰
    我遇到的主要挑戰包括:圖檔損壞、非俯瞰視角的照片(例如新聞海報或地面特寫)、以及爬蟲誤判的類別(例如「沙塵暴」關鍵字抓到沙灘照片)。

  2. 我的清洗策略:人工複檢與過濾
    我針對每一個類別,都進行了嚴格的人工複檢與手動過濾。我手動清除了大量無關或低質量的圖片,確保剩下的圖片高度相關並且視覺一致,雖然手動清洗無法用程式碼完整呈現,但這是保證數據集質量的關鍵。下面這段程式碼展示了我如何用 Python 處理清洗後的圖片,將它們重新編號,並準備進行分割。

# 輔助腳本範例:清理後對資料夾內圖片進行檢查和重新命名
import glob

CLEANED_ROOT = os.path.join(MY_PROJECT_PATH, 'Disaster_Crawler_Cleaned/')
CLASSES = ['Drought', 'Tsunami', 'Tornado', 'Sandstorm']

for class_name in CLASSES:
    class_path = os.path.join(CLEANED_ROOT, class_name)
    if os.path.exists(class_path):
        # 獲取所有圖片檔案
        files = glob.glob(class_path + '/*.jpg') + glob.glob(class_path + '/*.png')
        print(f"類別 '{class_name}' 清洗後的有效圖片數: {len(files)} 張")
    else:
        print(f"警告:找不到類別 '{class_name}' 的資料夾!")

# 假設此時圖片已經是乾淨的,準備進入分割階段

上一篇
Day 18專案啟動與實戰發想
下一篇
Day 20:資料結構化、擴增
系列文
從入門村到最終 BOSS:30 天打通深度學習主線30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言