在 2448×2048 的 PNG 上執行 Image Processing Tool 的預設擴增(Factor 5、Random ±5°),每張約需 4.3 秒。這代表準備數千張訓練資料需要好幾個小時。
時間耗在哪裡
經過效能分析後發現,瓶頸不是旋轉或對齊,而是儲存。執行時間的 90% 以上都耗費在 PIL 的 PNG 編碼器(預設壓縮 level 6)上。
改了什麼
- PNG 壓縮 level 1 — 仍然是無損壓縮,編碼速度約快 5 倍。代價是檔案大約增加 10%。
- 平行儲存輸出 — 每張輸入對應的 6 張輸出,以
ThreadPoolExecutor(最多 8 個執行緒)同時儲存。PIL 編碼器會釋放 GIL,因此速度可隨核心數提升。 - 簡化旋轉流程 — 將原本
rotate(expand=True)後再裁切中央的做法,改為只執行一次rotate(expand=False)。結果相同,成本減半。 - 日誌節流 — 原本每個檔案都輸出的日誌,改為每 10 筆輸出一次。
結果
| 項目 | v1.6.1 | v1.6.2 |
|---|---|---|
| 每張處理時間 | 約 4.3 秒 | 約 0.26 秒 |
| 輸出檔案大小 | 基準 | 約 +10% |
| 設定檔格式 | — | 無變更 |
旋轉邊界會產生不到 0.003% 的像素差異,但不影響擴增品質。