網路城邦
上一篇 回創作列表 下一篇  字體:
我的影像辨識有用GPU嗎?先問你的CPU有在用嗎?
2022/08/01 14:02:49瀏覽1145|回應0|推薦6

現在影像辨識領域的一個流行話題是GPU的使用!為什麼要用GPU呢?為什麼有用GPU的系統就似乎比較高檔?主要原因是影像的資料量大,如果要做辨識運算,計算量就會很大,計算量大就會反應慢,GPU是一個可以承擔「較簡易」運算的計算元件,如果可以善用GPU,甚至使用含有很多GPU的額外硬體,如顯示卡,理論上當然會讓影像處理與辨識速度加快!

但很神奇的?我的軟體至今都還沒有使用到除了系統自動提供以外的任何GPU!作出來的影像辨識軟體,卻是市面上知名的極高速產品!譬如一秒鐘可以辨識20張以上的百萬畫素街景影像中所有的車牌!我的車載車牌辨識軟體可以用五十公里的車速掃描路邊停車的所有汽機車車牌,辨識率還達到八成五以上!GPU其實是顯示卡的運算核心,我用的顯示卡也只是一般規格,沒在挑的!頂多是要求i7八核心以上的CPU!

事實上我們正常使用的高階程式語言是無法直接用程式控制GPU的!就像我們不能直接讀寫記憶體一樣!GPU與記憶體都是作業系統才有權配置的資源,要真的使用GPU來分散我的影像辨識工作,其實是很麻煩的!所以要使用有GPU的影像處理系統,必須搭配特殊設計的軟硬體,當然很貴也很沒有設計彈性,跟機器學習一樣,不是我們這種小公司可以玩得起的!

但是我的軟體有因此變得效率較低嗎?好像沒有?我的軟體反而是速度快到出名的!如上圖的兩百萬畫素貨櫃碼影像辨識時間居然只需要0.10.2秒的水準?原因何在?主要就是我雖然動不到GPU,但是只要善用多執行緒平行運算的程式技巧,我就可以充分發揮多處理器CPU的運算能力!

現在一般規格電腦的CPU動輒八核心16核心,每一個處理器(核心)都是功能完整,比GPU好上幾十甚至上百倍的計算元件,如果你這些很好使用且高效能的資源都還沒充分利用到,何須擔心沒有GPU的加持呢?如上圖所示,我先算正片後算負片嘗試找到所有可能的貨櫃碼,耗時是227毫秒,但是如果讓正負片辨識分流到兩個執行緒,也就是讓CPU的兩個處理器同步運算呢?就只需要136毫秒了!

我的軟體所以能比別家軟體高速的原因,就是盡可能讓大量計算分流,其實跟使用大量GPU分散運算的概念是一樣的!但是用CPU的多餘閒置核心只需要多執行緒(多線程)程式的寫作技巧,我不必加裝任何額外的硬體,也不必安裝甚麼可以驅動GPU的額外軟體,我的影像辨識速度就很快了!簡單說,就是不必多花任何的錢啦!

了解了嗎?不要呆呆地一直追求時髦,很多垃圾訊息只是慫恿你花不必要的錢活絡經濟而已!譬如前兩天太太問來家裡幫我們安裝網路的中年工程師:我們家的100M網速夠用嗎?他的回答很有警世作用!他說他們家夫妻與孩子也都是網路使用者,但購買的網速方案是16M!一點問題都沒有!內行的才會知道錢該怎麼花!

相信我!你要做好影像辨識,需要的絕對不是GPU,而是更好的演算法設計功力,還有多執行緒程式的寫作技巧!我相信你的多核心CPU根本還用不到一半!追求GPU產品就像買千萬超跑開車上班或去菜市場買菜一樣!你家錢多要這樣花是對市場經濟有幫助,但說到實際需求呢?真的完全沒必要,除非你的演算法實在太爛啦!如下即使一次辨識三個貨櫃碼,速度還是快得驚人!比眨眼(平均250毫秒)更快的161毫秒而已,你覺得我還需要GPU嗎?這麼快的速度,我也只用到CPU的兩個核心哦!

( 心情隨筆工作職場 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=yccsonar&aid=176178750