現在一提到要做影像辨識,就有一堆所謂的「專業人士」跳出來說「必學」:OpenCV、ML(機器學習)與CNN(類神經網路)等等。別人是不是真的專業?我不知道!但是我自己賴此(影像辨識)技術維生,還活得不錯,客戶要我做的影像辨識我都做得出來,所以我應該是專業人士,這一點我很確定!
但是我的「專業意見」是ML、CNN與OpenCV根本就不重要!譬如上面辨識浮萍的案例,ML學派的一定會拿個幾百張照片來讓機器學習,就是嘗試錯誤找出如何分辨影像中哪些部分是浮萍,哪些不是?其實哪需要那麼麻煩?用PhotoShop不同色版看看你就知道該找甚麼顏色了!下面是用藍光看的影像,不就幾乎可以辨識浮萍了,我三分鐘內就得到ML需要學習好多天的答案!
即使要找的顏色沒這麼明顯,我寫個小程式統計十張八張類似照片的RGB色階柱狀圖分布就可以算出要找的顏色特性了!這種傳統的資料分析也是頂多半天的資料處理工作而已,哪需要大張旗鼓收集數百(甚至數千)張照片來跑機器學習?還必須先依照貝氏定理建立各個變數的機率公式等等,工作一點都不輕鬆,說是隔靴搔癢,或脫了褲子放屁來比喻比較合適。我不值得比那些用ML的RD拿更多薪水嗎?
那CNN是幹嘛的?就是找特徵嘛!但是每個影像辨識的目的不同,需要找的特徵也不會一樣,差異可大了!哪會有甚麼通用的公式?像上面辨識浮萍的案例,找到特定的顏色門檻,直接二值化答案就出來了!CNN完全無用武之地,但是跑到下面辨識螺絲釘頭上的文字時,你想簡單套用CNN又不知從何做起了?
我能做到這樣的資料處理,將我需要的特徵擷取到這個樣子,跟CNN一點關係都沒有!也完全不需要使用他們強調的任何AI技術,就是選擇讓我要辨識的字對比最佳的灰階化方式與二值化門檻,如前所述,我半天內就可以用傳統的資料分析概念做好,再加上限縮辨識範圍到環形區域,讓辨識最佳化的處理更聚焦。接下來就是目標的旋轉縮放比對字模等等,那也是跟CNN或ML八竿子扯不上邊的工作!
至於OpenCV呢?那是影像辨識的B&Q,給初學者、半調子或外行人買半成品用的地方!你永遠不會在那裏直接找到你最合用的程式,相反的!如果你有至少學過一學期的影像處理概論,學會基本概念也會寫程式,那你根本就不需要學OpenCV,學了用了反而會受到限制!那是累贅!
用NBA籃球賽來比喻作影像辨識這件工作,我是某隊的總教練。別的隊都將ML、CNN當作球星先發隊員在吹捧重用!但是在我的球隊中,他們是坐在板凳的最末端,通常只有勝負已定的垃圾時間才有可能上場的板凳球員!重點是:我不用這些明星,只用基本動作與傳統技術OK的「普通」球員,我的球隊戰績還是很好!你能拿我怎麼辦?開除我嗎?
任何方法技術當然都是因為「曾經在某些場合有用」才會流傳下來甚至流行起來的!我沒有否定CNN與ML在特定目的時曾經發揮的功效,但是case by case,在我目前做的絕大部分影像辨識工作中他們確實沒甚麼關鍵作用,連扮演辨識SOP中的一個主要程序都沒甚麼必要性,豐富的常識與正確的影像處理觀念,加上熟練的程式技巧還是最重要的影像辨識功力基礎!我的存在就是實證,信不信由你!
還不服氣嗎?直接打蛇的七寸給你看!一個完整的影像辨識流程包括三個部分:前處理取得目標特徵→旋轉縮放正規化目標到標準的大小方向→比對辨識確認是何種目標?CNN與ML技術完全只限於前處理的三分之一部份,還不是最理想有效率的處理方式,你認為熟悉了這兩大技術會對你的工作幫助多大呢?讀很多書上好多課,卻只學到影像辨識的1/3流程?剩下的2/3都很簡單?不必學就會了嗎?你真的被騙了!
我很愛講這個,只是不忍心看到太多人被誤導,浪費太多時間而已。我不需要證明此事來讓我的生意變好!反而是我常常這樣公開批評新潮的AI技術讓我失去不少生意!但是我很相信事實終究會被證明,我希望到時我看起來還是一個始終心口如一的老實人!
限會員,要發表迴響,請先登入