---
# System prepended metadata

title: Cascade CNN 人臉檢測 (CVPR2015)
tags: [Human Face]

---

---
tags: Human Face
---
# Cascade CNN 人臉檢測 (CVPR2015)
Paper : A Convolutional Neural Network Cascade for Face Detection

## Face Detection Challenges
1. 由於人臉存在型態多樣化(例：角度，亮度...等)，Detector需要更好的特徵提取能力才能更準確地分辨人臉與非人臉。
2. 在實際場景中，人臉的大小不一，圖片中各個位置都可能出現人臉。所以提升 Detector的效率也是一大課題。


## Contribution
1. 提出了使用Cascade CNN的方式達到快速檢測的目的。
2. 使用CNN-based bbox calibration的方法，提供準確的位置結果。
3. 提出了一個multi-resolution CNN結構，使得能提高分辨人臉與非人臉的準確率。

## Inferene Pipieline
![](https://i.imgur.com/Zrhb6kS.png)
1. 12-Net
    - 目的 : 用一個較輕量的Network使得可快速分別每一個image window是否為人臉
    - 建造一個Image Pyramid。
        - Why use Image Pyramid ? [Ans](https://www.youtube.com/watch?v=w4tigQn-7Jw)
        ![](https://i.imgur.com/tWvYoCZ.png)
    - 分別將Image Pyramid上的每一張圖片依照$12/F$的比例做Resize，F是最小可接受的人臉長度。
        - >> an image of size 800 × 600 for 40 × 40 faces with 4-pixel spacing, which generates 2494 detection windows.
        - 舉例來說，若想要預測的圖片是800x600且最小可接受的人臉大小為40x40，那若預測的圖片大小就會Resize成(800x12/40)x(600x12/40)=240x180，共(1+(240-12)/4)x(1+(180-12/4))=2494個框。
    - 以Kernel size為12x12且stride=4的方式將resize過後的圖片切成數個12x12的window，並將這些12x12的window分別放入12-Net去預測這些window是否為人臉。
    - architecture : 
        ![](https://i.imgur.com/hGYfphC.png)

2. 12-calibration-net
    - 目的 : 將12-net預測為人臉的Windows放入12-calibration-net得到修正係數並修正Bounding box。
    - classifcation net, classify window with 45 classes
    - class label: 
        - $\{[s_{n},x_{n},y_{n}]\}_{n=1}^{45} \\s_n \in \{0.83, 0.91, 1.0, 1.10, 1.21\} \\x_n \in \{-0.17, 0, 0.17\} \\y_n \in \{-0.17, 0, 0.17\}$
        - e.g. class 1 -> $\{0.83, -0.17, -0.17\}$, class 2 -> $\{0.83, 0.17, -0.17\}$
    - 修正方式:
        - 假設某個人臉框的左上角座標為$(x,y)$, 長寬為$(w,h)$,則修正過後人臉框的左上角座標為$(x-\frac{x_{n}w}{s_n},y-\frac{y_{n}h}{s_n})$, 長寬為$(\frac{w}{s_n},\frac{h}{s_n})$
        - e.g. 若某人臉框的左上角座標為$(20,20)$, 長寬為$(10,10)$, 經過12-net預測成人臉並經過12-calibration-net預測為class 1,則此人臉框會被修正成左上角座標為$(20-\frac{10\times(-0.17)}{0.83},20-\frac{10\times(-0.17)}{0.83})$, 長寬為$(\frac{10}{0.83},\frac{10}{0.83})$
        - architecture : 
    ![](https://i.imgur.com/n05gvco.png)
    - 實際修正方式 : 將confidence大於threshold的class label取平均
        - e.g. 若某人人臉框12-calibration-net並於測出一個confidence score的向量$(c_1,c_2,...,c_{45})=(0.6,0.25,...,0.1)$, 假設threshold=0.2, 則$\{s_{n},x_{n},y_{n}\}={\{\frac{0.83+0.83}{2}}, \frac{0.17+0.17}{2}, \frac{0.17+(-0.17)}{2}\}$

3. 24-net
    - 目的 : 將12-net預測為人臉且經過修正之後的人臉框放入24-net(更深的網路)並預測此框是否為人臉框
    - architecture : 
    ![](https://i.imgur.com/UQrdDek.png)
    - 為何使用multi-resolution CNN 結構?
    > With this multi-resolution structure, the 24-net is supplemented by the information at 12×12 resolution which helpsdetect the small faces.

4. 24-calibration-net
    - 目的和修正方式如同12-calibration-net
    ![](https://i.imgur.com/mu7JfOD.png)

5. 48-net
    - 目的 : 將24-net預測為人臉且經過修正之後的人臉框放入48-net(最深的網路)並預測此框是否為人臉框
    -  architecture : 
![](https://i.imgur.com/aZH2sUd.jpg)

6. 48-calibration-net
    - 目的和修正方式如同12-calibration-net
    - architecture : 
![](https://i.imgur.com/TMZnuUc.png)

## Training Process
- Training Data Preparation：
    - negative image samples，收集5800張不包含人臉的背景照片
    - positive image samples，AFLW人臉數據
- 12-net Training Process
    - 把圖像上所有人臉框並resize成12x12當作正樣本
    - 從背景照片中隨機抽取20萬個12x12的non-face bboxes作為負樣本
    - 利用上述正樣本和負樣本訓練12net的二分類網絡
    - loss為multinomial logistic regression objective function
- 12-calibration-net Training Process
    - 因為已經有了人臉框的標註，按照修正的公式做對反向操作，就可以分別產生相對應於45個校準分類的人臉圖像,接著將這些人臉圖像resize成12x12得到訓練資料
    - loss為multinomial logistic regression objective function
- 24-net Training Process
    - 把圖像上所有人臉框並resize成24x24當作正樣本
    - 從背景圖片中隨機抽取20萬個12x12的non-face bboxes, 並利用
12-net + 12-calibration-net組成cascade結構過濾所有non-face bboxes，所有confidence score大於threshod的non-face bboxes當作負樣本(把判斷錯誤的non-face bboxes當作負樣本)
    - 利用上述正樣本和負樣本訓練24-net的二分類網絡
- 48-net Training Process
    - 訓練方法與24-net相同
- 24-calibration-net和48-calibration-net Training Process
    - 訓練方法與12-calibration-net相同


