1. 程式人生 > >4.1 理解層疊分類器的檢測原理

4.1 理解層疊分類器的檢測原理

文章目錄

4.1 理解級聯分類器的檢測原理

級聯是一系列測試或階段,用於區分是不是某一個物件,比如臉和非臉。對於正向分類,影象的某個部分必須通過級聯的所有階段。反之,如果影象在任何一個階段失敗了,分類器就會立即判定他為非。

影象的部分或視窗是在給定位置和給定放大級別上的畫素樣本。級聯分類器獲取影象在不同位置和不同放大級別的視窗,併為每個視窗執行級聯的各個階段。通常,正向檢測出現在多個重疊視窗中。這些重疊的正向檢測被稱為“領域”,它們意味著更有可能出現真正的匹配。例如,如果我們稍微移動或調整框架的大小,一個真實的臉看起來仍然像一個臉。

現在,您可能想知道我們是如何設計級聯的各個階段的。答案是,我們不直接設計它們。相反,我們讓機器學習元演算法基於一組訓練影象和一組特徵來設計階段。通常,元演算法是AdaBoost(自適應增強)的變體,AdaBoost是一種帶有特定指數誤差函式的線性迴歸公式。訓練影象包括正樣本和負樣本,我們必須提供正樣本中物件座標的元資料。這些特性是分類器可能會(也可能不會)在每個鄰域中找到的本地模式模板。訓練演算法選取了正樣本的典型特徵和負樣本的非典型特徵,並根據這些特徵設計了訓練階段。

4.1.1 Haar-like特徵

Haar-like特徵是人臉檢測和一般目標檢測中最常用的特徵之一。對於每個視窗,Haar級聯分類器從其他視窗中抽取一些灰度畫素值,用來衡量視窗與以下暗區與亮區相遇的特徵的相似性:
在這裡插入圖片描述


因此,Haar級聯的階段表示水平或對角線邊緣、細線或點,它們代表一個物件(相對於非物件)。該演算法的一些變體刪除了一些特徵(如對角線特徵)或添加了一些特徵(如四個矩形相交的角),但基本思想是相同的。

Haar-like的特徵在旋轉或翻轉方面不夠健壯。例如,如果Haar級聯被訓練來檢測直立的面孔,它將不會檢測倒置的面孔。同樣的,如果Haar級聯訓練的是左眼,那麼右眼就不是理想的,因為右眼是左眼的映象。因此,左眼和右眼最好有單獨的級聯。我們將使用OpenCV附帶的4個訓練有素的Haar級聯,這些級聯將檢測一張直立的人臉、一張直立的貓臉、一個人的左眼和一個人的右眼。

4.1.2 區域性二值模式特徵

區域性二值模式(LBP)特徵是另一種流行的特徵。它們也被稱為區域性二值模式直方圖(LBPH)特徵。顧名思義,LBPH特徵是亮度值的直方圖或計數。對於視窗中的每個畫素,分類器觀察在一定半徑內的每個相鄰畫素是更亮了還是更暗了。直方圖包含了每個相鄰位置中較暗畫素的計數。例如,假設一個視窗包含以下兩個1畫素半徑的鄰域:
在這裡插入圖片描述
計算這兩個鄰域(還沒有計算視窗中的其他鄰域),直方圖可以如下圖所示:
在這裡插入圖片描述
讓我們回顧一下我們是如何得出這些數字的。第一個鄰域有黑色的角(相對於中心),因此我們向直方圖表的每個角落的單元格加1。第二個鄰域有一個黑色的頂行(相對於中心),因此我們向直方圖表頂行的每個單元格新增另一個1。

LBP級聯的階段表示代表物件(相對於非物件)的漸變或轉換。

和Haar級聯一樣,LBP級聯在旋轉或翻轉方面也不健壯。OpenCV帶有預先訓練的LBP級聯,適用於直立的人臉和直立的貓臉。可選地,我們可以使用這些來代替Haar級聯。

與Haar級聯相比,LBP級聯的檢測速度更快,但精度較低。對於低端裝置,或者在需要高幀速率的情況下,LBP級聯可能是一個不錯的選擇。然而,現在的iOS裝置非常適合Haar級聯用於實時視訊。

[有關OpenCV實現級聯分類器的資訊,請參見官方文件,位於:http://docs.opencv.org/3.1.0/d5/d54/group__objdetect.html。具體來說,我們將使用cv::CascadeClassifier類.]

###返回到第四章目錄###
###返回到書籍目錄###