Haar like特徵之人臉檢測

2021-10-07 17:05:43 字數 3432 閱讀 7468

haar特徵人臉檢測的4個步驟:

提取人臉的haar-like特徵

每個haar-like特徵使用類似cart的二分類決策樹判別區域是否為人臉【兩類:人臉 | 非人臉】,每個haar-like特徵經過判別訓練得到判別閾值構成多個最優弱分類器(且挑選了最優的haar-like特徵)

多個弱分類器級聯構成強分類器【此步實際是在進行多個弱分類投票進行二分類的過程】

級聯多個強分類器進行人臉檢測與分類

弱分類器指的是效果比盲猜好的分類器

haar特徵是指把影象劃分成多個長方形區域,對這些長方形區域計算畫素值的總和,並比較與此長方形區域的其他鄰接長方形區域畫素總和的差異,並把差異值做為haar-like的特徵值

haar-like特徵最初有三種型別

haar 後來新增的幾個模式

在提取haar-like特徵的時候,我們利用不同尺寸的不同模式的haar-like特徵對影象進行提取,這就導致提取到大量的特徵,且這些特徵之間幾乎沒有相關性,所以我們需要確定對分類最有用的特徵

對分類最有用的特徵:拿人臉舉例來說,額頭的區域總是比眼睛區域亮很多,鼻樑總是比兩邊的眼睛部分亮很多。因為這些特點的存在,當我們拿下圖所示的兩種模式提取haar特徵,能得到最大的haar特徵值

更多模式用於提取人臉特徵

每個弱分類器只包含乙個haar-like特徵,經過分類訓練的每個haar特徵會獲得乙個閾值,(只有提取的該haar特徵值大於閾值,才會判定為人臉)

注:決策樹的功能是選擇最優分類特徵,並分類,只是對於弱分類器來說,分類只是簡單的區分是不是人臉

構造乙個最優弱分類器(此部分只會簡述cart決策樹的做法)

比如構造haar_like特徵f1作為弱分類器的閾值,會計算每個樣本的f1特徵值,然後對所有樣本的f1特徵值進行排序,然後按順序依次選擇每個樣本的f1特徵值作為分類閾值,最後比較按照每個樣本閾值進行分類的分類誤差,選擇分類誤差最小的作為最終該弱分類器閾值

強分類器的生成:1.初始化所有樣本權重為1/n (n為樣本總數)

2.迭代訓練n個樣本得到第乙個最優分類器

3. 如果是非首次的弱分類器,接收了上一弱分類器的把負樣本錯分為正樣本的樣本進行訓練,那在被訓練前,該類樣本會被提高權重,然後和被正確分類為正樣本的樣本一起被用來訓練本次的弱分類器

4.將被本次的弱分類器分類為正樣本的樣本集送入下一弱分類器,迴圈3,4,直至得到t個最優弱分類器

5.組合t個最優弱分類器得到強分類器

訓練好的強分類器的分類是由多個最優弱分類器共同決定的,多個最優弱分類器在進行投票時具有不同的投票權重,最終按權重加和得到分類結果

對於訓練乙個強分類器最重要的一點,就是當某個分類器判別出該區域或該影象無目標(無人臉),就不進行下一步的分類,直接判定為無目標(無人臉)

如下圖假定有三個haar-like特徵(f1,f2,f3)

對多個訓練好的強分類器進行級聯,對人臉進行檢測。每個強分類器在檢測過程按照順序被稱作stage,stage1表示第乙個強分類器,下圖展示強分類器訓練的過程,其中false-postive表示原來是負樣本被錯分為正樣本。

如何進行檢測

haar人臉檢測採用固定影象大小,採用不同尺度的滑動視窗依次滑動整張影象進行檢測

人臉檢測步驟

1.選取當前滑動視窗對應的影象區域進行檢測和分類,把對應的區域放入第乙個強分類器,只要強分類器的任意弱分類器判別此區域不含人臉,就結束檢測,並滑動視窗至下一區域。若第乙個強分類器判別出該部分含有人臉,就會送入下一強分類器進行再檢測和分類,【此後的過程和第乙個強分類器,檢測為無人臉即滑動檢測下一區域,若檢測為有人臉,則傳至下一強分類器判別為有人臉】,如果最後乙個強分類器判別為有人臉,則以視窗作為整張的人臉檢測框。

2.從小到大,嘗試不同尺寸的滑動視窗進行檢測,並都進行步驟1.

此部分參考haar cascade

推薦閱讀

人臉識別之人臉檢測

人臉識別分為人臉檢測 人臉預處理 蒐集和學習人臉以及人臉識別四個部分,此部分將人臉檢測。本文基於opencv進行的。在opencv中常用的人臉檢測器有基於lbp的特徵檢測 基於haar的特徵檢測,兩者的區別 前者比後者快好幾倍且不需要許可協議,但很多haar檢測器需要許可協議。基於haar的臉部檢測...

樹莓派之人臉檢測

樹莓派的基礎知識和教程,可參考知乎使用者 張子豪的系列教程。或者直接通過其github 配套食用,效果更佳。其內容包括 以上內容,保證新手使用者能夠基礎使用樹莓派。用樹莓派實現人臉檢測,需要在樹莓派上安裝opencv。在此基礎上通過 python,實現人臉檢測。1.opencv的安裝 安裝教程 親測...

人臉特徵點檢測

參考 face alignment by explicit shape regression。演算法的實現原始碼在裡的explicitshaperegression.cpp裡面。下面貼上乙個檢測結果 人臉特徵點有不少應用,比如可以對齊人臉,或者做人臉變形。在人臉資料庫裡挑選了一些人臉,對齊它們,求出...