Joint Cascade Face Detection and Alignment流程

論文Joint Cascade Face Detection and Alignment記錄

前言
現在人臉檢測用深度學習甩傳統方法一大截,但是記錄下這篇文章,主要是看看思想(看文章時間較短,只有一天,有些地方可能有誤):
這篇文章,使用級聯樹,將分類與迴歸都完成,使用的是局部二值特徵,local binary feature,計算簡單,高效,最後得到結果也還可以,但是也存在一定的問題:
參數難調,訓練不穩定,由於是級聯樹,就是一個樹判斷完成後再給下一個樹進行判斷,一個一個樹來判斷
0 比如說總共有320*5=1600個樹,將這些樹分成5個級,每級320個樹,爲什麼要分級,是爲了在每一級中的樹中固定好大概多少個節點用於分類,多少個節點用於迴歸,對於每個樹
這個樹的深度是固定的,是一個4層的二叉樹,最後的葉子節點有8個,對於給定的圖像塊,這個圖像塊可能是正樣本也可能是負樣本,正樣本的話還會包含正樣本的關鍵點的座標

1 特徵
對於圖像塊,假設關鍵點個數爲5,在圖像的5個關鍵點中隨機找一個點,再在這個點一定半徑內周圍隨機找2個點,求這兩個點之間的像素差值,作爲特徵值,像這樣隨機求3200次特徵值,得到3200個待選的特徵,原文中說的是在關鍵點中隨機找兩個關鍵點,再在每兩個關鍵點周圍一定半徑內隨機找兩個點,求這兩個點之間的像素差值作爲特徵,有點不明白的是,如果是按照原文這樣來,那麼就每次產生兩個特徵了,是一次使用兩個特徵嗎?這點沒弄明白,還有另外一個理解,就是在關鍵點中隨機找兩個,然後在這兩個關鍵點周圍各自周圍一定半徑內找一個偏移點,然後將這兩個關鍵點周圍的偏移點求像素差值,貌似這樣理解更合理,但是原文像這樣進行翻譯有點欠缺。原文中關鍵點特徵選擇:
這裏寫圖片描述
2 分類節點
對上面的3200個特徵,選擇使得分裂成左右節點後信息增益較大的那個特徵,根據該特徵,將樣本進行分裂,分裂到左邊和右邊子樹
3 選擇爲分類節點還是迴歸節點
對於每個節點,有機會選擇成爲分類節點,也有機會選擇成爲迴歸節點,成爲那個節點由公式:
p=1-0.1*t(t=1,3,5,7,9)
決定,其中t代表哪一級,前面分了5級,那麼在每一級內部的320個樹中,每個樹成爲分類節點與迴歸節點的概率是一樣的,比如第一級,成爲分類節點的概率是1-0.1*1=0.9,那麼每個節點都有0.9的概率成爲分類節點,0.1的概率成爲迴歸節點,即大部分節點都會成爲分類節點,在後期的幾級,t增大,後面會有更多的節點用於迴歸
4 迴歸節點
對於迴歸節點也是求上面的特徵,但節點分裂的標準是使得,左右兩邊的節點上的正樣本的關鍵點位置(所選擇的那個特徵對應的關鍵點)與標定的關鍵點位置之差,左邊正樣本這個值的方差,加上右邊樣本這個值的方差之和最小,個人理解相當於根據這個關鍵點的偏差形成的向量進行聚類,類別爲2,這樣和分類節點一樣,也會得到一個閾值,那麼再根據這個閾值,將負樣本進行左右分類
5 葉子節點的分數
不論是正樣本,還是負樣本,不論是分類節點還是迴歸節點,最後都會分到一個葉子節點上,然後根據給定的公式,求每個節點對應的分數,然後將節點的分數累加,就得到這個樹對於是不是人臉的判斷的一個分數,每個樹進行累加,一旦這個值小於某個閾值,就判斷爲非人臉,就停止不進入到下一個樹;
每個葉子節點分數由公式進行求解:
這裏寫圖片描述
其中w是每個樣本的權重,有下面的公式給出,其中f的初始值都是0,因此每個樣本的權重都是一樣的:
這裏寫圖片描述
6 迴歸
對於某個樹,每個正樣本都會走到某個葉子節點,對於樣本a,比如說走到葉子節點2,那麼對應的有一個數:01000000,還有一個樣本的關鍵點的座標,5個點,10個值,那麼對於所有的正樣本,都會形成這樣的一一對應的關係,再根據這樣的關係,進行求迴歸關係,查找5個座標點應有的偏移量。原文算法的第11行有一個k mod L,需要注意的是,這個是用於將訓練數據對應到每一個關鍵點,與在關鍵點處選擇特徵的區別在於:選擇特徵的時候,是隨機的選擇關鍵點,那麼一棵樹中可能涉及的關鍵點有多個,但是一顆樹走完後,這個樹中選擇哪個關鍵點用於求特徵就固定了,最後在葉子上會形成一個二值特徵,那麼用這個二值特徵可以對任意關鍵點進行迴歸,而這個k mod L的目的就是將所有訓練數據對應到每一個關鍵點上:
這裏寫圖片描述
7 級聯
在下一個樹中,將座標加上偏移量後,回到1,再次進行分裂,進行循環,這樣迭代,一直到所有的樹都迭代完成

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章