人臉檢測:FaceBoxes

簡介

FaceBoxes是一個足夠輕量的人臉檢測器,由中國科學院自動化研究所和中國科學院大學的研究者提出,旨在實現CPU下的實時人臉檢測,FaceBoxes論文是《FaceBoxes: A CPU Real-time Face Detector with High Accuracy》

FaceBoxes原理

設計理念

FaceBoxes針對模型的效率和檢測的效果做了很多設計,效率方面希望檢測器足夠快,檢測效果方面希望有更高的召回率,尤其是針對小臉的情況,基於此:

  • 一個下采樣足夠快的backbone,被命名爲Rapidly Digested Convolutional Layers(RDCL);
  • 在用於檢測的層和backbone中都引入多層分支的設計,被命名爲Multiple Scale Convolutional Layers(MSCL);
  • 使用一種更密集的Anchor策略,提升模型的召回率;

下面詳細的說明下這些設計。

網絡結構

在這裏插入圖片描述
上圖是FaceBoxes的整體結構圖,在圖中有標明Rapidly Digested Convolutional Layers(RDCL)和Multiple Scale Convolutional Layers(MSCL),其實就是backbone的前後兩部分。

  • Rapidly Digested Convolutional Layers(RDCL)
    所謂的快速消融卷積層,本質上就是計算量要小,下采樣要快。對於一個目標檢測或人臉檢測模型來說,計算量高的很大一部分原因是輸入圖像尺寸大,圖像分類任務中224是一個常用尺寸,而這個尺寸去做檢測是幾乎不可能的。所以FaceBoxes爲了足夠快,就在在前幾層儘快的完成下采樣,把特徵圖的寬高降下來。在上圖RDCL的部分,一共只有四層,兩層卷積個兩層全連接,但是實現了4×2×2×2=324\times2\times2\times2=32倍的下采樣,而主幹網絡最後也只下采樣128倍,絕大部分都在前幾層完成了。
    此外,RDCL中的卷積層並且由於是前兩層卷積,可以使用CReLU,就像下圖這樣。
    在這裏插入圖片描述
    這讓前兩層卷積輸出通道數可以更小,分別是24和64。也正是因爲快速消融卷積層的存在,FaceBoxes把輸入圖像尺寸設置成了1024×10241024\times1024。這個尺寸即便對於目標檢測任務來說,都是不算小的。
  • Multiple Scale Convolutional Layers(MSCL)
    MSCL就是backbone的後半部分,它有兩個意思:
    1.主幹模型中使用了多層卷積,增加模型的寬度,豐富模型的感受野。這其實就是用了inception模塊,在結構圖上也能看出來,分別是inception1,inception2和inception3。inception模塊的細節如下圖。
    在這裏插入圖片描述
    inception3之後,FaceBoxes主幹網絡還有四層卷積,分別是Conv3_1,Conv3_2,Conv4_1和Conv4_2,卷積核1×11\times13×33\times3交替使用,完成最後兩次下采樣。
    2.檢測中使用了多層分支,這個就像SSD一樣,多層分支已經是檢測模型的標配了,FaceBoxes一共拉取了三層分支。分別在inception3,Conv3_2和Conv4_2的後面,在1024×10241024\times1024輸入的情況下,這三層的寬高也可以算出來,分別是32×3232\times3216×1616\times168×88\times8,再使用3×33\times3的核進行卷積,沒有做下采樣,最後通道數量分別控制爲(4+2)×21(4+2)\times21(4+2)×1(4+2)\times1(4+2)×1(4+2)\times1
    我們先說下(4+2)(4+2)是什麼,FaceBoxes在這裏參考了RPN,RPN的兩個分支就分別是4和2。輸出2因爲RPN在做是不是目標的預測,而人臉檢測中目標只有人臉一類,所以FaceBoxes的2是在預測是不是人臉。剩下的4邊界框的四個值了。
    然後還剩下21,1,1三個數,這個和FaceBoxes選取Anchor的策略有關,我們放到下一個部分一起說明。

Anchor選擇

FaceBoxes的Anchor選擇沒有多種比例,因爲人臉差不多都接近一個正方形,所以每一層的Archor都是1:1的。尺度上每一層預設不同,在第一層分支上預設了三個尺寸,分別是32×3232\times3264×6464\times64128×128128\times128,負責預測圖中的小目標。後兩層各一個尺度,分別是256×256256\times256512×512512\times512
除此之外,FaceBoxes提出了一種Archor密集程度的概念,它通過下面的公式計算:
Adensity=AscaleAintervalA_{density} =\frac{A_{scale}}{A_{interval}}
什麼意思呢?密集程度是就是AdensityA_{density}AscaleA_{scale}是Anchor的尺寸,AintervalA_{interval}是Anchor間隔。尺寸上面提到過了,而間隔的意思就是說,在當前的特徵圖上向原圖映射,那麼特徵圖上一個點對應原圖的區域是多少?
比如inception3這一層的輸出特徵圖,它下采樣了32倍了,所以Ainterval=32A_{interval}=32。那麼用尺寸與間隔的比值能反映出這個Anchor的密集程度。
比如第一層分支上尺寸爲32×3232\times32的預設Anchor,此時的間隔也是32,在特徵圖上每一個點生成32×3232\times32Anchor,這樣Anchor永遠是不會有重疊的,計算得到的Adensity=1A_{density}=1
按照這個公式,把五個尺寸的AdensityA_{density}都算出來,分別是1,2,4,4,4。這樣就會發現前兩個尺寸的Anchor密集程度太低了。而前兩個Anchor主要就是做小目標預測的,這樣不可避免的會影響小目標的召回率。怎麼辦?
在這裏插入圖片描述
文中提出了一種讓Anchor變得密集的策略,其實就是生成一個Anchor之後,根據需要的數量,平移出來。平移的本質這個Anchor的中心點不再是特徵圖的那個對應像素點了,就像上圖中畫出來的那樣。
最後爲了補齊這個密集度,第一個尺寸的Anchor會變成4倍,第二個尺寸的Anchor會變成2倍,第三、四、五個尺寸Anchor不變,這樣一來,上面我們提到的21,1,1這三個數就出來了。1,1就對應第四個和第五個尺寸的Anchor,而21=(4+2+1)×321=(4+2+1)\times3

損失函數

FaceBoxes的損失函數和RPN是完全一致的,交叉熵+SmoothL1,這個不再重複了。

性能評價

在這裏插入圖片描述
首先是一個在FDDB上的消融實驗,分別驗證了RDCL,MSCL和Anchor strategy,RDCL是對速度影響最大的因素,所以當只使用RDCL,不使用其餘兩個的時候,速度是最快的,但是效果也是最差的。
Anchor strategy對於最終的mAP有1%左右的影響。
最後,Faceboxes沒有在wider face上的結果,可能是效果太差了吧╮( ̄▽  ̄)╭,而是AFW,PASCAL face和FDDB
在這裏插入圖片描述

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