深度學習筆記系列 臉部辨識基本理論(I)
放寒假了,好不容易完成了論文前三章跟得出了初步實驗結果
但是被老師打槍「需要討論」之後產生了自己很廢的想法
所以想念一些書來讓自己充實一點
剛好前陣子在Udemy上買了課程
因此記錄了一下課程的內容
Deep Learning and Computer Vision A-Z™: OpenCV, SSD & GANs
有興趣的人也可以買課程聽聽看(畢竟30天內退款真是個好東西)
裡面的老師目前聽下來覺得講得還不錯(聽得懂)
但實在是因為英文不太行,所以需要做一些筆記幫助吸收
文章中的圖片都是該課程中用到的圖片,僅幫助記憶、沒有其他目的
Viola-Jones Algorithm
是Opencv library的原理,發展至今不只用於人臉圖像的偵測,也可用於實時(real-time)的影像偵測。
分為兩個階段:Training和Detection
但我們必須從Detection開始講起,這樣更有助於之後了解Training的過程。
- Detection 偵測
在Viola-Jones的演算法中,會先將圖片轉為灰階(Gray Scale),接著由圖片的左上角開始逐格(Pixels)偵測指定範圍(Box)內是否含有指定的特徵(Feature)。此外,這張圖片的人臉最好是正面朝前,不要是由上而下、或是由左而右等奇怪的角度。
而每一個特徵都會有相對應的分數,當移到特定範圍後所偵測到的特徵分數最高時,則完成偵測,可以判斷為這「極有可能」是一張臉。(這是一個臉:有兩個眉毛、兩個眼睛、一個鼻子、一個嘴巴)
在這個掃描(Scan)偵測的過程中,Box的範圍可大可小,因此掃描可能發生很多次最終才找到臉。
Haar-like Feature 哈爾特徵
Feature的基本單位是Pixels
- Edge Features
- Line Features
- Four-rectangle Features
在一張經過灰階化的圖片中,我們會試圖找出人臉上具有上述三樣特徵的局部:比如人的嘴巴可以說是Line Feature(中間深、上下淺)、人的眉毛相對於額頭是Edge Feature等。
針對每一個部位的特徵,我們會將他與為以Pixel為單位的網格重疊,並且每一網格中又根據顏色深淺透過標準化(Normalization)給予0~1的數字。
比如說上圖是一個人的鼻子部分,此部位符合Edge Feature,因此我們將他與以pixel為單位的網格($8 \times 4$)重疊後,並給予每一網格一個顏色深淺的數字。而亮面(左側)所有的數字加起來後取平均(W=0.166),暗面所有數字加起來後取平均(B=0.568),最後B-W=0.402。當這個數字越接近1,代表這部分的特別的黑白分明;當數字越接近0,代表這部分應該都是同一個顏色。(網格數值相加的部分與Integral Image有關)
在實際偵測中,我們會以該範圍($8 \times 4$)的網格逐步偵測圖片,找到接近B-W的值(Threshold 閥值、灰度劃分)。圖片可能存在多個符合該特徵的部位,但構成一張臉並不只依賴單一特徵,因此透過其他特徵部位的相對位置我們可以確認這是不是我們要的部位。
Integral Image 積分圖
在Integral Image中,我們將Harr-like Feature中每個網格中的值標準化為0~10的數值以方便計算。而計算方式很簡單,就是創建一個與原圖相同size的網格圖,每當要計算該格積分時,需對應原圖的左上部分相加,如下圖的Integral Image中要計算綠色框框的積分,需將原圖綠色箭頭範圍內的數全部相加。
完成Integral Image後,當我們需要Image中紅色部分的數值,我們只需計算Integral Image中(框框的右下角-框框的右上方+框框的左上方-框框的左方)=紅色框框的值。
Integral Image的好處是就算要計算的框框範圍裡有超過1000個以上的數字,他也可以快速的計算出來(Scalable),以幫助我們找Harr-like Feature。
Reference
圖片與內容來源皆來自課程:
Deep Learning and Computer Vision A-Z™: OpenCV, SSD & GANs