Contents ...
udn網路城邦
不撥雲如何見日?再跟你講一個辨識過程的探險故事!
2021/10/15 05:22
瀏覽971
迴響0
推薦7
引用0

現在大家都說影像辨識的「基礎」「神器」是CNN!但任何人看CNN演算法應該都會覺得很頭痛,因為數學太多,也太抽象了!每個特徵的擷取都要用到不同大小與內容的矩陣,不同大小的矩陣擷取的特徵還要分層?還常常故意語焉不詳,讓你得自己實作時困難重重,乾脆就買他們賣的產品吧!

譬如在3X3層級看起來是直線的特徵,到了5X5的層級可能變成一個斜線,到了7X7層級則變成圓弧了?還沒談到如何辨識?辨識甚麼東西?光是抽取特徵的過程已經把學生都嚇跑了!或是再也不想傷腦筋,買現成的黑盒子模組來用吧?但是真的有必要非走CNN這條路不可嗎?我覺得完全不必

這些數學比起我用的事實上簡單很多,但是我的數學都是有原因有確定目的的,所以都很好理解。我也是有學CNN的,但是目前的CNN數學模式根本無法解決我眼前面對的問題!無論他們分多少層次,設計擷取多少種特徵,它們都不是一個思考的過程,只是漫無目的特徵偵測過程!

大多數CNN偵測到的特徵,在後續作辨識判斷時是根本沒有用的!所以又要研發很多在純數學基礎上節省運算時間的演算法,數學模式看起來就更抽象更複雜嚇人了!如下圖這樣。即使如此,他們的運算量還是太大,辨識速度很慢,所以才會天天想著如何用更強大的CPUGPU硬體來強渡關山!CNN的想法或許不錯,但目前成效還是很不好的!

下面是一個我昨天解決的問題,如果你也略懂CNN的話,就可以體會一下我和CNN學派做事方法的差異。這個螺絲釘頭上,我需要辨識的是那三條輻射線與BY兩個字元,但很不幸,有一條輻射線與B字元實質上在鑄造時就連在一起了!如下圖:

對於OCR技術來說,這可以說是致命的一擊!如果無法找到合理的分割邏輯,我就一定無法辨識出那個B了。但是針對這個專案,我已經發展出很多以極座標為基礎的演算法,這是目前以直角坐標為基礎的CNN完全沒有的東西,日後如果有人研究出將直角座標的CNN轉換成極座標模式的演算法,就可以拿到一個博士學位了,我在OCR的基礎上做出極座標演算法應該也可以拿個資工博士的?學術界就是那麼一回事!

我的辨識程序是:先找到這一群圓形對稱辨識目標的中心點,建立出它們之間的一個極座標系統,如下圖:

以此圓心為基準,正右方為0度,如雷達一樣環狀掃描各個角度的明暗資訊,就可以建立如下的柱狀圖:

ABC標示,因為輻射線目標是空心的,在柱狀圖上會呈現兩個波峰夾著一個深谷,我可以依據此特性掌握到它們,甚至可以估計它們概略的涵蓋角度範圍,很好判斷的!但是你用直角坐標為基礎的演演算法,就無法正確掌握到這些特徵,不管你用多少層的CNN都做不到

簡單說,如果你要找的目標是圓周對稱性質,你就必須將資料用這個極座標的角度做分析,但是這件事就超出目前CNN的能力範圍了!所以我想套用借用CNN也是沒辦法的!我必須發明出超越CNN的演算法!我也真的做到了。如下就是在我辨識出輻射線位置範圍後,將它們清除的殘餘影像圖:

雖然不是擦得很乾淨,但是這樣就足以讓B字元擺脫輻射線目標的糾纏,變成一個可以用一般OCR技術辨識的目標了!當然一個圓形對稱的螺絲釘會自由滾動,BY字元可能以任何角度呈現,所以我必須知道字元目標是在極座標的哪個角度與半徑範圍,字元的上下方一定是徑向的!不是向著圓心就是相反。藉此準確地將目標旋轉縮放到正確的大小方向,再與字模進行比對,就能得到最終的答案!

前述這些是我之前已經建立好的演算法,我昨天碰到問題其實是我一向以整體螺絲釘頭的最外框為鎖定圓心位置的基礎,但這個案例中外框的中心點顯然不是那群輻射線與字元的中心點。這是一個圓凸的釘頭,也不可能要求拍攝的機器自動移動對準釘頭正上方,所以我必須從演算法上解決問題。

我想到的是辨識那個封閉的亮白區域,只要是圓凸的釘頭,他們想在上面鑄造或刻字時,多半會弄出這樣一個區域,它一定是正圓形的,通常也會較亮,所以我就在二值化圖上找主目標內最大的亮白區塊(下圖中的淡黃區域)即可,找到後就以它為校正後的極座標的中心。

一個聰明到會讓人說是AI的影像辨識,實際過程就是會這麼迂迴曲折,目前流行的CNN + ML + DL都是還完全做不到的!所以千萬不要說我不用那些技術就很LOW?很「AI?錯得離譜了!事實上是他們所謂的AI影像辨識技術還很LOW,在我目前需要的議題上,我完全無法追隨引用他們的技術,我必須超越他們才會有生路!我也做到了!

所謂AI的學術界都是這樣的,他們注重形式的發明,總是告訴大家很多起跑的方式,但是從來不想花太多時間研究或告訴大家,如何處理過程細節與抵達終點的方式!真的是很迷惑大眾,浪費大家時間的態度!

有誰推薦more
全站分類:心情隨筆 工作職場
自訂分類:不分類

限會員,要發表迴響,請先登入