天天看點

Joint Cascade Face Detection and Alignment(JDA)文檔

位址:https://github.com/luoyetx/JDA

一、算法流程圖:

訓練過程:

Joint Cascade Face Detection and Alignment(JDA)文檔

檢測過程:

Joint Cascade Face Detection and Alignment(JDA)文檔

二、類圖:

Joint Cascade Face Detection and Alignment(JDA)文檔

從上圖可以看出整個系統主要分為兩大子產品,資料存儲子產品與CART子產品,兩個子產品集中于JDA分類器上,整個系統隻執行個體化一個JDA分類器,存儲于Config中。

三、細節實作:

  • 訓練分為5個stage,每個stage訓練一個cart森林,這裡采用的是Real Adaboost算法:

    待補充…………

  • 在每一輪訓練中,會訓練K個cart樹,訓練每一個cart樹前開始都會做hard negative mining補充負例,采用的方法如下:

    在所有的負例圖檔中,從第一張開始,滑窗圖檔上的每個區域,視窗大小固定,與原始人臉圖檔大小一樣,對每一個區域做旋轉和反轉變換(共八種),然後用該區域通過目前的檢測器,如果被檢測為負例則丢棄,如果檢測為正例,則加入訓練集,直至數量達标為止,當訓練未結束而負例資料已經用完時,訓練會被迫中止。

  • 每一棵cart樹訓練開始前還會對正例和負例資料做一次排序,根據score由大到小排列,采用的排序算法是快排,注意,這裡會大量用到增加記憶體負載的swap操作。
  • 做完hard negative mining和排序後,會計算所有資料得分的density_graph:

    這個函數并沒有實際意義,主要用來輔助了解,引用作者的話

    “add a function 

    draw_density_graph

     to view the density distribution of scores

    +

     means density of positive scores

    x

     means density of negative scores

    *

     means at point both positive and negative have the same density”

    其輸出的是得分的分布情況,橫軸表示的是門檻值區間,縱軸縱軸表示的是某門檻值區間下的樣本數量占該類别樣本數量的比例,輸出如下所示:

    Joint Cascade Face Detection and Alignment(JDA)文檔

    從圖上可以看出,正例樣本分布越靠右,負例樣本越靠左,其分類效果越好。

    下圖是經過一段時間訓練後的樣本分布,可以看出其差别:

    Joint Cascade Face Detection and Alignment(JDA)文檔
  • 所有資料權重的計算公式:
    Joint Cascade Face Detection and Alignment(JDA)文檔
    其中fi是其score,yi是其label,取值{1(正例),-1(負例)},計算完之後會将所有正例和負例分别歸一化為1。
  • 關于特征的提取:

    每一層的特征次元可以設定為不同大小,預設為1000。

    訓練資料會以原尺寸,二分之一尺寸和四分之一尺寸分别存儲,這麼做的目的是因為提取特征時,會随機的在三種尺度中選擇一種尺度的圖檔,論文原句如下:

    “During split test for an internal node, we extend the shape indexed pixel difference features in [4] to multi-scale. Specifically, we generate three scales of images by down sampling the input image to half and one fourth. To generate a feature, we randomly choose an image scale, pick up two random facial points in the current shape, generate two random offsets with respect to the points and take the difference of the two offsetted pixels as the feature. We found the multi-scale pixel difference feature is more robust to noises and necessary for detection learning. ”

    接下來會随機選擇兩個特征點,也就是人臉關鍵點作為提取基點,然後以這兩個基點為中心,在給定的半徑内(每一層的半徑不同,越往後半徑越小)各随機定位一個像素點,然後計算這兩個像素點的內插補點作為特征。

    容易計算,假如特征次元為1000,資料數量為10000,那麼一個cart樹上每個結點的特征數量為10000*1000。

  • 關于樹上每個結點是用作回歸還是分類,以機率p随機選擇,機率p随層熟增大而減小。p越大,分類機率越大。
  • cart劃分采用gini度量名額,回歸以最小像素差名額。

繼續閱讀