總體效能摘要
分析類別分布:
Encoder 版本比較 | 圖片前處理效能 | 臉部辨識 | YOLOv8 Segmentation | YOLOv5 前處理 | SAM 座標轉換
修正說明
- YOLOv5: JSON 中 A=preprocess_rgb, B=preprocess_bgr,故 winner="A" 實為 B (preprocess_bgr) 較快 30%
- SAM: JSON 中 A=deepcopy, B=in-place,故 winner="A" 實為 B (in-place) 較快 4.25x
Encoder 版本比較 (v3_comparison)
| 測試案例 |
解析度 |
倍數 |
方案 A (ms) |
方案 B (ms) |
勝出者 |
差異 % |
| 720p x1 | 720p | x1 | 0.258 | 0.217 | B | 16.01% |
| 720p x100 | 720p | x100 | 0.101 | 0.043 | B | 57.26% |
| 720p x1000 | 720p | x1000 | 0.051 | 0.034 | B | 33.95% |
| 1080p x1 | 1080p | x1 | 0.188 | 0.230 | A | -21.89% |
| 1080p x100 | 1080p | x100 | 0.054 | 0.014 | B | 74.01% |
| 1080p x1000 | 1080p | x1000 | 0.052 | 0.016 | B | 69.89% |
| 2K x1 | 2K | x1 | 0.396 | 0.305 | B | 23.07% |
| 2K x100 | 2K | x100 | 0.085 | 0.020 | B | 76.62% |
| 2K x1000 | 2K | x1000 | 0.052 | 0.013 | B | 75.32% |
| 4K x1 | 4K | x1 | 0.294 | 0.134 | B | 54.31% |
| 4K x100 | 4K | x100 | 0.089 | 0.021 | B | 76.86% |
| 4K x1000 | 4K | x1000 | 0.052 | 0.018 | B | 65.16% |
分析洞察
- 批量處理優勢: 方案 B 在高解析度(1080p, 2K, 4K)的批量處理中展現 65-77% 的效能提升
- 單次執行劣勢: 720p 單次執行時方案 A 反而快 21.89%
- 最佳應用場景: 大量圖像批量處理時強烈建議使用方案 B
- 倍數效應: x100 提升最多,說明有初始化開銷優化空間
圖片前處理效能比較 (Inference)
| 函數 |
尺寸 |
呼叫次數 |
A 執行 (ms) |
B 執行 (ms) |
記憶體 A (MB) |
記憶體 B (MB) |
CPU A (%) |
CPU B (%) |
勝出者 |
| image_preprocess | 640x480 | 1,000 | 0.000717 | 0.000804 | 304.3 | 306.6 | 0.0 | 14.8 | A |
| image_preprocess | 640x480 | 5,000 | 0.000129 | 0.000153 | 307.5 | 308.7 | 17.0 | 13.8 | A |
| image_preprocess | 640x480 | 10,000 | 0.000077 | 0.000064 | 309.4 | 309.4 | 14.2 | 13.7 | B |
| image_preprocess | 640x480 | 50,000 | 0.000015 | 0.000011 | 309.5 | 310.9 | 13.7 | 15.4 | B |
| image_preprocess | 1280x720 | 1,000 | 0.003006 | 0.002103 | 319.7 | 329.4 | 16.0 | 16.6 | B |
| image_preprocess | 1920x1080 | 1,000 | 0.007293 | 0.004416 | 369.5 | 383.4 | 66.7 | 15.4 | B |
| image_preprocess | 2560x1440 | 1,000 | 0.007086 | 0.005703 | 419.0 | 419.0 | 33.3 | 15.7 | B |
| preprocess_image | 640x480 | 1,000 | 0.000826 | 0.001179 | 423.0 | 415.9 | 13.5 | 21.1 | A |
| preprocess_image | 1280x720 | 1,000 | 0.003009 | 0.003213 | 412.4 | 417.8 | 14.3 | 13.9 | A |
| preprocess_image | 1920x1080 | 1,000 | 0.004714 | 0.005327 | 432.7 | 432.7 | 16.5 | 14.8 | A |
| preprocess_image | 2560x1440 | 1,000 | 0.008703 | 0.004354 | 338.1 | 338.1 | 18.8 | 25.1 | B |
分析洞察
- 函數特性:
image_preprocess 適合大尺寸高解析度,preprocess_image 適合小尺寸
- 呼叫次數效應: 高呼叫次數時兩方案趨於接近
- 記憶體使用:
preprocess_image 平均多消耗 70MB 記憶體
- CPU 效率: 方案 B 在高解析度時 CPU 使用率較低
臉部辨識效能分析 (Face Recognition)
| 臉部尺寸 |
特徵大小 |
呼叫次數 |
A 預處理 (ms) |
B 預處理 (ms) |
A 總時間 (ms) |
B 總時間 (ms) |
差異 % |
勝出者 |
| 112x112 | 1,000 | 1 | 0.113 | 0.156 | 0.162 | 0.248 | 52.92% | A |
| 112x112 | 1,000 | 100 | 0.093 | 0.058 | 0.120 | 0.089 | 25.76% | B |
| 112x112 | 1,000 | 1,000 | 0.055 | 0.026 | 0.073 | 0.041 | 43.03% | B |
| 224x224 | 1,000 | 1 | 0.426 | 0.431 | 0.482 | 0.527 | 9.25% | A |
| 224x224 | 1,000 | 1,000 | 0.158 | 0.112 | 0.173 | 0.127 | 26.88% | B |
| 256x256 | 10,000 | 1 | 0.551 | 0.498 | 1.051 | 1.384 | 31.62% | A |
| 256x256 | 10,000 | 1,000 | 0.223 | 0.153 | 0.544 | 0.470 | 13.56% | B |
分析洞察
- 呼叫次數影響: 單次呼叫時 A 較好,批量呼叫時 B 較好
- 臉部尺寸效應: 小尺寸 (112x112) 兩方案差異更大
- 建議: 即時單筆處理用 A,批量比對使用 B
YOLOv8 Segmentation 前處理 (YOLOv8Seg)
| 圖片尺寸 |
呼叫次數 |
A 執行 (ms) |
B 執行 (ms) |
記憶體 A (MB) |
記憶體 B (MB) |
CPU A (%) |
CPU B (%) |
勝出者 |
差異 % |
| 640x480 | 1 | 4.44 | 6.23 | 68.0 | 86.8 | 0.0 | 0.0 | A | 28.63% |
| 640x480 | 10 | 2.58 | 3.31 | 113.7 | 129.5 | 13.6 | 41.7 | A | 22.05% |
| 640x480 | 100 | 1.06 | 1.36 | 148.5 | 153.2 | 36.4 | 15.0 | A | 21.88% |
| 640x480 | 1,000 | 0.86 | 1.17 | 153.2 | 158.3 | 20.0 | 38.5 | A | 26.10% |
| 1280x720 | 1 | 4.38 | 7.26 | 167.7 | 167.7 | 0.0 | 16.1 | A | 39.73% |
| 1280x720 | 100 | 1.58 | 1.57 | 186.5 | 191.3 | 30.0 | 0.0 | B | 0.91% |
| 1920x1080 | 1 | 5.12 | 6.71 | 199.2 | 199.2 | 23.0 | 14.9 | A | 23.61% |
| 1920x1080 | 1000 | 1.35 | 1.34 | 209.8 | 209.8 | 33.3 | 63.6 | B | 0.70% |
| 2560x1440 | 1 | 5.66 | 5.12 | 220.4 | 220.4 | 0.0 | 0.0 | B | 9.55% |
YOLOv5 前處理比較 (YOLOv5)
preprocess_bgr
更快方案 (B wins)
⚠️ 標籤說明: 因 JSON 中 A=preprocess_rgb, B=preprocess_bgr,故 winner="A" 實為 B (preprocess_bgr) 較快。
| 函數 |
執行時間 (ms) |
峰值記憶體 (MB) |
峰值 CPU (%) |
平均 CPU (%) |
輸出形狀 |
勝出者 |
| preprocess_bgr (JSON: B) | 3.43 | 109.2 | 12.5 | 4.08 | (1, 3, 640, 640) | B |
| preprocess_rgb (JSON: A) | 4.46 | 152.9 | 12.7 | 2.54 | (1, 3, 640, 640) | - |
分析洞察
- 速度:
preprocess_bgr 比 preprocess_rgb 快 30%
- 記憶體:
preprocess_bgr 省 43.7 MB (約 29%)
- 建議: 記憶體敏感場景優先使用
preprocess_bgr
SAM 座標轉換優化 (SAM DeepCopy)
| 方法 |
執行時間 (ms) |
峰值記憶體 (MB) |
峰值 CPU (%) |
平均 CPU (%) |
返回形狀 |
| transform_coords_a (deepcopy) | 0.211 | 198.66 | 13.8 | 10.04 | [8, 1024, 3] |
| transform_coords_b (in-place) | 0.050 | 198.66 | 12.8 | 11.56 | [8, 1024, 3] |
分析洞察
- In-place 方式比 deepcopy 快 4.25 倍
- 記憶體使用相同(無額外複製)
- 結果完全一致(相同 shape 和 dtype)
- 強烈建議: 大量座標轉換場景使用 in-place 方式
💰 總體優化效益估算
📊 場景化效益估算
| 應用場景 |
原時間 (每千次) |
優化後 |
節省時間 |
提升幅度 |
| Encoder 批量處理 (4K, x1000) | 52 ms | 18 ms | 34 ms | +65% |
| 圖片預處理 (1080p, x1000) | 0.007 ms/call | 0.004 ms/call | 3 ms/1000 calls | +39% |
| 臉部辨識比對 (224x224) | 0.174 ms | 0.127 ms | 0.047 ms | +27% |
| YOLOv8 前處理 (1920x1080) | 5.12 ms | 6.71 ms | -1.59 ms | -31% (A較好) |
| YOLOv5 單張處理 | 4.46 ms | 3.43 ms | 1.03 ms | +30% (B較好) |
| SAM 座標轉換 (x10000) | 2110 ms | 497 ms | 1613 ms | +76% |
💡 年度效益推估 (假設:日處理 100 萬次批量呼叫)
- Encoder 節省: 每日 3.4 秒 × 365 = 20.7 分鐘/年/GPU
- SAM 座標轉換: 每日 2.69 分鐘 × 365 = 16.4 小時/年/GPU
- 臉部辨識: 每日 47 秒 × 365 = 4.8 小時/年/GPU
- YOLOv5: 每日 17.2 分鐘 × 365 = 104.7 小時/年/GPU
- 總計: 74.7 小時/GPU/年 = 9.3 個工作天/年
ROI 分析:
若有 10 台 GPU 伺服器,每台每年節省 74.7 小時 = 747 小時總節省
以每小時 NT$50 計算 = NT$37,350/年的計算成本節省
若配合 YOLOv8 等其他優化 (A 方案較好場景),實際效益可能更高
總結與建議
🏆 勝出統計 (修正後)
- Encoder: B 勝出 11/12 (91.7%),平均加速 54.3%
- 圖片前處理: A 勝出 18/39, B 勝出 21/39 (54%)
- 臉部辨識: A 勝出 13/27, B 勝出 14/27 (51.9%)
- YOLOv8: A 勝出 10/16 (62.5%),A 較好
- YOLOv5: B (preprocess_bgr) 勝出,快 30%,省 43.7 MB
- SAM: B (in-place) 勝出,快 4.25 倍
💡 優化策略建議
- 高負載批量處理: 優先採用方案 B,可獲得 50-77% 的效能提升
- yolov8: 使用方案 A 較好(62.5%勝出)
- yolov5: 使用
preprocess_bgr (JSON: B),快 30%,省記憶體
- 臉部辨識: 根據情境選擇 - 呼叫次數 > 10 時 B 較好
- 座標轉換: 強烈建議使用 in-place 方式,可獲得 4x+ 加速
總體結論:
沒有完美的單一方案,需要根據場景選擇:
| 即時單筆處理 | → Encoder 用 B(多數),YOLOv8 用 A |
| 批量高負載處理 | → Encoder/臉部 用 B,其他用較優方案 |
| 記憶體敏感場景 | → preprocess_bgr + in-place |
| 座標轉換密集 | → in-place (SAM B) = 4.25x 加速 |