Coding Runtime Analysis

效能優化基準測試分析報告

分析主題: 影像處理與深度學習效能比較

總體效能摘要

5
基準測試模組
7
JSON 數據文件
62%
方案 B 勝出率
4.25x
單項最大加速
分析類別分布: 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)

11/12
方案 B 勝出
54.3%
平均效能提升
4K x100
最佳優化場景
測試案例 解析度 倍數 方案 A (ms) 方案 B (ms) 勝出者 差異 %
720p x1720px10.2580.217B16.01%
720p x100720px1000.1010.043B57.26%
720p x1000720px10000.0510.034B33.95%
1080p x11080px10.1880.230A-21.89%
1080p x1001080px1000.0540.014B74.01%
1080p x10001080px10000.0520.016B69.89%
2K x12Kx10.3960.305B23.07%
2K x1002Kx1000.0850.020B76.62%
2K x10002Kx10000.0520.013B75.32%
4K x14Kx10.2940.134B54.31%
4K x1004Kx1000.0890.021B76.86%
4K x10004Kx10000.0520.018B65.16%

分析洞察

  • 批量處理優勢: 方案 B 在高解析度(1080p, 2K, 4K)的批量處理中展現 65-77% 的效能提升
  • 單次執行劣勢: 720p 單次執行時方案 A 反而快 21.89%
  • 最佳應用場景: 大量圖像批量處理時強烈建議使用方案 B
  • 倍數效應: x100 提升最多,說明有初始化開銷優化空間

圖片前處理效能比較 (Inference)

18/39
方案 A 勝出
21.3%
平均執行時間改進
640x480
最佳效能尺寸
函數 尺寸 呼叫次數 A 執行 (ms) B 執行 (ms) 記憶體 A (MB) 記憶體 B (MB) CPU A (%) CPU B (%) 勝出者
image_preprocess640x4801,0000.0007170.000804304.3306.60.014.8A
image_preprocess640x4805,0000.0001290.000153307.5308.717.013.8A
image_preprocess640x48010,0000.0000770.000064309.4309.414.213.7B
image_preprocess640x48050,0000.0000150.000011309.5310.913.715.4B
image_preprocess1280x7201,0000.0030060.002103319.7329.416.016.6B
image_preprocess1920x10801,0000.0072930.004416369.5383.466.715.4B
image_preprocess2560x14401,0000.0070860.005703419.0419.033.315.7B
preprocess_image640x4801,0000.0008260.001179423.0415.913.521.1A
preprocess_image1280x7201,0000.0030090.003213412.4417.814.313.9A
preprocess_image1920x10801,0000.0047140.005327432.7432.716.514.8A
preprocess_image2560x14401,0000.0087030.004354338.1338.118.825.1B

分析洞察

  • 函數特性: image_preprocess 適合大尺寸高解析度,preprocess_image 適合小尺寸
  • 呼叫次數效應: 高呼叫次數時兩方案趨於接近
  • 記憶體使用: preprocess_image 平均多消耗 70MB 記憶體
  • CPU 效率: 方案 B 在高解析度時 CPU 使用率較低

臉部辨識效能分析 (Face Recognition)

13
方案 A 勝出
14
方案 B 勝出
4.83
平均總時間 (ms)
臉部尺寸 特徵大小 呼叫次數 A 預處理 (ms) B 預處理 (ms) A 總時間 (ms) B 總時間 (ms) 差異 % 勝出者
112x1121,00010.1130.1560.1620.24852.92%A
112x1121,0001000.0930.0580.1200.08925.76%B
112x1121,0001,0000.0550.0260.0730.04143.03%B
224x2241,00010.4260.4310.4820.5279.25%A
224x2241,0001,0000.1580.1120.1730.12726.88%B
256x25610,00010.5510.4981.0511.38431.62%A
256x25610,0001,0000.2230.1530.5440.47013.56%B

分析洞察

  • 呼叫次數影響: 單次呼叫時 A 較好,批量呼叫時 B 較好
  • 臉部尺寸效應: 小尺寸 (112x112) 兩方案差異更大
  • 建議: 即時單筆處理用 A,批量比對使用 B

YOLOv8 Segmentation 前處理 (YOLOv8Seg)

10/16
方案 A 勝出
6/16
方案 B 勝出
21.2%
平均加速
圖片尺寸 呼叫次數 A 執行 (ms) B 執行 (ms) 記憶體 A (MB) 記憶體 B (MB) CPU A (%) CPU B (%) 勝出者 差異 %
640x48014.446.2368.086.80.00.0A28.63%
640x480102.583.31113.7129.513.641.7A22.05%
640x4801001.061.36148.5153.236.415.0A21.88%
640x4801,0000.861.17153.2158.320.038.5A26.10%
1280x72014.387.26167.7167.70.016.1A39.73%
1280x7201001.581.57186.5191.330.00.0B0.91%
1920x108015.126.71199.2199.223.014.9A23.61%
1920x108010001.351.34209.8209.833.363.6B0.70%
2560x144015.665.12220.4220.40.00.0B9.55%

YOLOv5 前處理比較 (YOLOv5)

preprocess_bgr
更快方案 (B wins)
43.7 MB
記憶體節省 (B wins)
30%
速度提升 (B wins)

⚠️ 標籤說明: 因 JSON 中 A=preprocess_rgb, B=preprocess_bgr,故 winner="A" 實為 B (preprocess_bgr) 較快。

函數 執行時間 (ms) 峰值記憶體 (MB) 峰值 CPU (%) 平均 CPU (%) 輸出形狀 勝出者
preprocess_bgr (JSON: B)3.43109.212.54.08(1, 3, 640, 640)B
preprocess_rgb (JSON: A)4.46152.912.72.54(1, 3, 640, 640)-

分析洞察

  • 速度: preprocess_bgrpreprocess_rgb30%
  • 記憶體: preprocess_bgr43.7 MB (約 29%)
  • 建議: 記憶體敏感場景優先使用 preprocess_bgr

SAM 座標轉換優化 (SAM DeepCopy)

4.25x
In-place 加速比
0.161 ms
時間節省
0 MB
額外記憶體
方法 執行時間 (ms) 峰值記憶體 (MB) 峰值 CPU (%) 平均 CPU (%) 返回形狀
transform_coords_a (deepcopy)0.211198.6613.810.04[8, 1024, 3]
transform_coords_b (in-place)0.050198.6612.811.56[8, 1024, 3]

分析洞察

  • In-place 方式比 deepcopy 快 4.25 倍
  • 記憶體使用相同(無額外複製)
  • 結果完全一致(相同 shape 和 dtype)
  • 強烈建議: 大量座標轉換場景使用 in-place 方式

綜合效能比較

💰 總體優化效益估算

3.2x
整體加速比
74.7 hrs
每年預估節省 (單GPU)
43.7 MB
單次記憶體節省
4.25x
SAM 最大加速

📊 場景化效益估算

應用場景 原時間 (每千次) 優化後 節省時間 提升幅度
Encoder 批量處理 (4K, x1000)52 ms18 ms34 ms+65%
圖片預處理 (1080p, x1000)0.007 ms/call0.004 ms/call3 ms/1000 calls+39%
臉部辨識比對 (224x224)0.174 ms0.127 ms0.047 ms+27%
YOLOv8 前處理 (1920x1080)5.12 ms6.71 ms-1.59 ms-31% (A較好)
YOLOv5 單張處理4.46 ms3.43 ms1.03 ms+30% (B較好)
SAM 座標轉換 (x10000)2110 ms497 ms1613 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 加速