網路城邦
上一篇 回創作列表 下一篇  字體:
我的螺絲釘辨識速度有多快?500萬畫素只需0.132秒!
2021/10/21 16:13:15瀏覽1000|回應0|推薦9

這張圖的重點是原始影像有2592 X 1944 = 5,038,848,也就是五百萬畫素!在此當然是經過縮圖顯示的。但是包括辨識右邊的尺來計算每mm等於幾個畫素,到做完全程辨識,只需要132毫秒!也就是0.132秒,一般人眨眼一次的時間約0.2-0.4秒,所以不到一眨眼的時間我已經將所有目標辨識完畢了

這就是我的程式效能!你可以用CNN+ML+DL來跟我pk!比我快我請你吃披薩。以此例來說,我當然不需要甚麼GPU硬體加速的!只用軟體加上好一點的一般規格電腦就可以做到這樣了。我有沒有作弊呢?譬如預先知道螺絲釘大概的位置,只搜尋特定的區域當然就不是地毯式搜索五百萬畫素了!

當然沒有作弊!我確實是搜尋全圖每一個畫素之後找到目標的!跟CNN有一點像的是,我也用某個大小的矩形遮罩去掃描全圖的,CNN稱之為卷積(Convolution)。但我的作法不是直接計算所有區塊的特徵,而是用粗網格概略偵測各區塊有沒有明顯的色階變化?只是單調背景的大部分區域就會很快被檢測發現之後忽略過去了!這跟人找東西的視覺演算法概念一樣,我們不會細看單調區域的!

在此之後,我後續實際處理的影像面積,就真的只有幾十萬畫素的重點區域了!即使如此,早期的版本也是我目前好幾倍的辨識時間,因為影像辨識程序有太多陷阱會讓你浪費時間,如果不夠精準聰明的調整掌控,速度就是會差很多倍,記憶體用量也會同步多很多倍!

舉例來說,任何二維影像資料的處理都是兩層甚至三四層的迴圈,你是不是搜尋了超過需要資料的範圍?你是不是可以跳點或跳線做運算,還是可以得到極相似的計算結果?譬如一個20X20區域的平均亮度,如果你跳點取樣100點跟全面取樣400點,計算結果是幾乎一樣的!

當你確定沒做重複的陣列運算,確定迴圈只跑你需要的範圍與密度之後,你就會發現辨識速度快了不只一倍!但是要做到這些事情,你必須非常精確地知道程式中每一個步驟,每一迴圈設計的目的!所以如果你的程式初稿是來自OpenCV或其他CNN原始碼範例,你是絕對不敢,也無法像我這樣精準優化修改程式的!牽一髮動全身,你看不懂的機器當然不敢亂搞的!

這就是我堅持所有程式都自己實作可以獲得的紅利了!很糟糕的是:正因為影像辨識很複雜,太多人都懶得從原理起步實作,覺得門檻太高了!所以就讓那些AI詐騙集團有機可趁,努力打廣告洗腦,讓使用者認為真的可以經過機器學習,不必搞懂細節就能繼續開發影像辨識軟體

這就是目前多數影像辨識研發都會卡關的主要原因了!如果自己都不知道自己程式中核心演算法的來源與目的,那就是盲人騎瞎馬,夜半臨深池,距離落水溺斃不遠了!天下沒有白吃的午餐,妄想依賴CNNMLDL之類的黑盒子影像辨識模組,你甚麼辨識軟體都開發不出來的!即使做出來都會跑得超慢的!

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

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