2019年4月26日 星期五

CPU vs GPU、YOLO-darknet vs tensorflow效能比較

既然手邊剛好有三張不同的顯卡:GTX 1080Ti、RTX 2070、RTX 2080

也實作了YOLO-darknet與tensorflow 的 C# wrapper

那就來測試一下運算效能吧!

寫了一個簡單的Windows Forms

可以載入影片檔並執行Alturos.Yolo(YOLO-darknet)或是EmguTF(tensorflow)

進行影像辨識運算

並透過EmguCV把結果繪製在影像上

主要考量運算速度

透過觀察相同影片的處理速度-FPS來評判效能


由於手邊有三張不同的顯卡

雖然安裝在不同的測試主機上,但CPU以及Memory的影響其實有限

還是能看出不同顯卡的執行運算效能

第一台主機:(比較舊款)
CPU:i7-4770S、Mem:32GB、GPU:RTX 2070

第二台主機:
CPU:i7-7700、Mem:16GB、GPU:RTX 2080


第三台主機:(也測試CPU)
CPU:E5-2640x2、Mem:64GB、GPU:GTX 1080Ti x2


CPU、GPU採用yolo model(darknet)的運算效能(測試影片解析度1280x720)

E5-2640算是蠻高規的CPU了,處理這類的運算還是力有未逮

而GTX 1080Ti與RTX 2070的比較蠻特別的

在YOLOv2與YOLOv2-Tiny的model下,RTX 2070的效能表現較好

但在YOLOv3與YOLOv3-Tiny卻是GTX 1080Ti表現較好

而RTX 2080不論採用哪一個model,效能皆是最好的

而網路上一般實測,皆提到GTX 1080ti與RTX 2080相當

但這邊YOLO Model測試出來的數據

RTX 2080比GTX 1080Ti要好上20~30%以上


而YOLO-darknet相比tensorflow提供的model

tensorflow的運算量相當吃重

而且發現在載入tensorflow時,第一張影像的辨識運算會delay一小段時間

而這個過程會把顯卡記憶體與power吃得相當大
(後來tensorflow有加入延遲載入memory的機制)

YOLO-darknet在載入的瞬間與過程,Power的使用率相當平穩,皆在100W上下

記憶體也不會全吃滿

tensorflow在執行時,第一張影像處理時會delay一些時間

此時記憶體會全部載入,power也會瞬間飆高


由於我的第一台主機的power瓦數不足(僅500瓦)

因此在執行tensorflow的model時主機幾乎都會crash

所以RTX 2070在tensorflow model效能紀錄僅有兩筆資料:

雖然RTX 2070只測試了兩個SSD Model,但效能比較還算蠻明顯的

RTX 2070 < GTX 1080Ti < RTX 2080

唯一有一組model是由GTX 1080Ti獲勝:mask_rcnn_inception_v2

但因為這組model能提供mask資訊,處理結果如下:
需要比較大量的CPU運算

可以看到表格中,RTX 2080的欄位 CPU也吃了相當重達到45%

而GTX 1080Ti那組 CPU僅吃到12%

因此這部分應該是在CPU上的巨大差距造成 (E5-2620x2 >>> i7-7700)

但整體而言 RTX 2080的運算效能還是比GTX 1080Ti好上20%以上


目前把tensorflow所提供常用的model zoo抓下來測試

測試下來,執行效率最好的當然是SSD(Single Shot MultiBox Detector)系列

但就算是手邊效能最好的RTX 2080,僅能提供12~14 FPS

而曾經非常火紅的FAST_RCNN系列

僅有fast_rcnn_inception_v2能達到11~12 FPS左右


因此相比於YOLO-darknet所能達到的30~40 FPS 以上的效能

完全就是可real time進行影像辨識的效率,差距甚大呢!!


而目前EmguTF也持續在更新tensorflow的版本

未來等到最新版本釋出後再來測試看看


而這次測試每個model辨識出來的結果也都進行了收集和儲存

下一篇將整理這些辨識結果提供給大家參考

沒有留言:

張貼留言