最近幾年資料科學正夯,你是為了什麼才進入這個領域?是跟風趕流行?還是為了其他目的?
因為最近有網友問到我學機器學習的歷程,也剛好和同事討論到,所以我決定把這幾年的心路歷程好好寫下來。
2011 上半年
這一年我修了大學部「機械視覺」,因為我覺得能讓電腦會「看」東西很屌,這是我入門影像處理的課。要用 VB6,不依賴任何函式庫,以 pixel by pixel 的方式學習二值化、灰階化、色彩空間換算、增長侵蝕、線或圓的偵測等等。
那時候我還是用 Atom 小筆電,所以 VB6 用起來特別吃力,加上也不太喜歡 VB6 的語法,所以想要用 C++ 寫寫看,就開始入門 OpenCV。我還記得光是把 OpenCV 裝起來可以動就花了兩周。
要做期末專題,題目怎麼選呢?當時老師播了一個老舊的實驗影片,是他博班學妹的研究成果,影片中就是一個人,裝了馬達的攝影機會追蹤她的頭,不論她怎麼轉方向、用手遮蔽,攝影機就是能上下左右快速追蹤,抓到他的頭部位置正確。
看了覺得「哇~~超屌,我也想要做出這個!」
(原影片沒有獲得公開許可,所以我只能放那篇論文的截圖)
後來我用,OpenCV 內建現成的 viola jones 物件完成人臉追蹤、現成的 DAQ 完成直流馬達控制,讓這兩者可以交互回授連動,就完成了這個期末專題。當時看起來很屌,但現在回想起來很空虛,因為只是整合了影像和馬達,照一個簡單的控制邏輯互動,並沒有自己做出什麼稱得上電腦視覺的演算法,工藝水準自然也比不上上圖那篇多年前的碩論。
2011 下半年
這一年我在做大學專題,其實就繼續做那個追蹤人臉的攝影機馬達平台,嘗試做的更精密、定位更快速、更滑順。
當時 OpenCV 還沒有繁體中文書,就連簡體書都還沒有出到 2.X 版(C++ 版),我就已經把 OpenCV 摸熟,會用這些現成電腦視覺功能,但用膩了之後想要做到更細、更靈活,會遇到很多困難。
影像部份只是 call OpenCV 所以就沒什麼難的,那時候重點,都放在解決自幹馬達控制模組的各種軔體(firmware)、硬體問題。
比賽時被一個專題評審問到:「你的馬達平台能不能分辨不同人,只追蹤特定的人?」,那是一個半導體專長的老師,我根本不知道怎麼回答他,嚇到不敢說自己只是 call function。但是這個問題,之後就一直成為我的心魔。
就算能夠存取 pixel value,自己能想得出來的方法組合也很有限,找了一些電腦視覺的書來看,發現都蠻困難的,猶豫自己是不是要去修課?
2012 年
這一年我去讀了體育運動相關的碩士班,這是從大學參加游泳校隊、高強度身體訓練成為我生活重心以來的願望。這是原先規劃的人生方向,念得不順利以後,才發只是一個支線任務。雖然這對我人生影響不小,但我在這條支線上,沒做什麼和資料科學有關的事,所以就不細講了。
2008.6.17 彰化縣立體育場游泳池
2013 年
這一年我在機電工程系碩士班讀研究所,想做影像處理,修了電腦視覺的課,知道一些 base on rule 的影像辨識技巧。但學了之後,其實是有點失望的,因為每一個演算法都要寫很久,也很難應付特例,不管怎麼調整,都是有一好、沒兩好。
那時候天真不懂事,所以給自己想了一個很難的題目「痛苦表情辨識」。為什麼想做這個呢?
學生的時候經常上健身房,去久了大多都是熟面孔。發現有些人只用跑步機,從來不用其他器材,跑久了速度也都沒變過。隨著一天天過去,但是有些人的表情會愈跑愈輕鬆。我心理就好奇:
- 「假如一開始跑很辛苦,就算速度不變,跑久了還是會體能越來越好、越來越輕鬆,直到遇到瓶頸為止。」
- 「如果運動表現不變,那能不能從表情變化得知體能進步水準?一開始很猙獰,到後來很輕鬆,這個變化可以用電腦視覺測量出來嗎?」
然後就開啟了這個研究。
–
這時候,我對機器學習還很陌生,只知道用在辨識很強大、可以解決很多 by rule 難以應付的特例。但機器學習的數學似乎特別困難?好像要很好的機率統計基礎?我也不知道,眼前一片未知,然後就笨笨的找了一門機器學習的課去修,先上再說。
結果就是都聽不懂,被當了,我除了 k-mean 之外什麼都沒學會。
(待續)