電腦如何看懂一張圖?CNN 基礎與概念
講師:顧祥龍 Guffrey / 財團法人人工智慧科技基金會 AI 工程師
我們知道CNN很常用在電腦視覺上,也就是我們期望透過電腦協助進行圖片的分類及處理,CNN也是電腦視覺中相當成熟的技術。
我們會期望電腦看到什麼東西呢?最簡單的是「認識圖片」,所以首先要跟大家介紹圖片在電腦眼裡,他的組成是什麼樣子。我們知道,人類對於圖片有厲害的辨識及認知能力,因此要先了解人類是怎麼認知一張圖片的,這樣之後在做演算法設計的時候,可以更貼近人類的思考方式。
CNN,也就是卷積神經網路(Convolutional Neural Networks),接著就要了解評估指標,才能了解訓練好的模型能不能被使用。
假設將一張肉眼可見的224 x 224的彩色圖片,輸入到電腦中,電腦是怎麼理解的呢?電腦會將這張圖片拆成三種顏色,也就是我們所說的三原色:紅、綠、藍。拆成三原色之後,每個位置都會對應到一個數字,而這個數字又有個專有名詞叫做:pixel value(像素點),這個像素點的值會介於0~255間,人眼所見的顏色其實就是這三原色的值所組合而成,也就是在電腦世界中的圖片組合不是224 x 224,而是(224,224,3)這個3就是RGB的色彩通道。灰階圖片則是透過RGB分別呈上對應的數值,進行加總。彩色、灰階及黑白圖片都是視覺處理中常處理到的圖片。
人類如何認識一張圖片?
當人類看到一張皮卡丘的圖片,又是如何知道這是皮卡丘呢?有可能是皮卡丘的眼睛、嘴巴或腮紅等關鍵部位,這是因為人類已經先認知道這些關鍵部位,當他們下次再看到這些關鍵部位時,隨即可以認出。這些關鍵部位在電腦視覺中有個關鍵術語:「局部特徵」,因此,我們希望電腦也能認識這些局部特徵。
但是如何讓電腦學習這些局部特徵?因此我們利用一個小框框(filter)掃描圖片,當掃描到重要的特徵時,數值就會變大,不重要的數值就會很小。掃描後的數值又稱為feature map。
關於卷積神經網路架構
這裡有幾個重要的步驟:
當一張皮卡丘的圖片輸入到電腦中,同樣也會經過幾個步驟,這裡有幾個重要的名詞:
- 卷積層(Convolution layer):在CNN中最重要的用途是提取特徵,有點像是電腦的眼睛,並尋找重要的特徵。
- 池化層(Pooling Layer):主要是濾掉不重要的特徵,減少模型參數,防止模型過擬合。常見的Pooling有兩種,一是Max Pooling,另一種則是Average Pooling,各有不同的特性及作用。
- 攤平(Flatten):擔任卷積層到全連接層之間的橋樑。主要是將多維的輸入,攤平成一維輸出,進行維度的轉換。
如何評估模型的好壞?
如果已經訓練好一個模型,又該如何向他人證明這個模型是厲害的呢?有哪些指標可以協助判斷嗎?最常使用的指標就是Confusion Matrix,常用於分類問題並衍生出多種不同的指標。當我們要分類的對象大於二,為了判斷模型的分類狀況,就必須要一個類別拆開來看。這裡會先透過以下四個指標進行初步分類,再往下分析:
- True Positive:代表模型分類正確,且和我們觀察的目標一樣。
- True Negative:代表模型分類正確,但和我們觀察的目標不一致。
- False Positive:代表觀察的目標相同,但是模型分類錯誤。
- False Negative:代表模型分類錯誤,且和觀察的目標不同。
透過上述的分類之後,才可以更進階的針對不同任務場景進行不同的評估指標:
- Accuracy:要特別注意當所有類別數量不均勻的情況下,如果比例差距十分懸殊的話,Accuracy就會不太準確。
- Precision:可用「 精準打擊,不容失誤」來形容,通常在不容錯誤的情況下會以作為主要評估指標,像是手機臉部解鎖的模型等等應用場景。
- Recall:「寧可錯殺,不放過一個」的代表,最常用在需要找出問題的應用中,例如癌症檢測模型。因為不能將有生病的病人判作沒有生病,導致延誤就醫。
有了Precision及Recall的數值後,才能更近一步的計算F1的值。
- F1 : 則是 Precision、Recall 的綜合指標,當我們面對的問題並沒有偏好
Precision或是Recall其中一項時 ,就適合利用F1作為最後評估指標。
總結
當我們輸入一張圖片,利用CNN進行圖片萃取,得到很多無法被送入全連階層運算的Feature map,為了讓這些Feature map可以被送入全連階層運算,所以要透過Flatten將它們拉平,之後就能進行DNN進行分類。以上就是模型的階段。下一步則是利用Confusion Matrix評估模型的好壞。
發現模型的表現不如預期時,就需要回頭修正資料,是不是在分類或歸檔的時候分錯了?修正後再做模型的訓練,再進行評估,直到模型表現被認可,就能說模型訓練好了。