論文閱讀:S3FD: Single Shot Scale-invariant Face Detector

寫在前面:記錄一下論文閱讀的收穫,不然怕久遠之後,就不記得了~


1. Sum up

S3FD是2017年發表在arXiv上的一篇文章,文如其名,講的是一個端到端的具有尺度不變性的人臉檢測框架,論文主要創新點在於:

  • 提出了一個適用於不同尺度大小的人臉的檢測框架;
  • 通過錨框匹配策略改進了小尺度人臉的召回率;
  • 通過“最大者勝(max-out)”的背景標籤降低了假陽性率(FPR);

網絡架構如圖所示:
S3FD‘s architecture


2. What’s up?

論文首先針對三個創新點拋出了基於錨框檢測算法的幾個弊病:
drawbacks of anchor-based methods

  • 如圖(a)所示,對於檢測層網絡來說,步長對應的感受野較大,小尺度人臉能夠表達出的特徵少之又少;
  • 如圖(b)所示,錨框與感受野的大小不能很好的匹配,同時錨框、感受野都不能很好的匹配到小尺度人臉區域;
  • 如圖(c)所示,由於錨框大小實際上都是固定的,所以落在這些固定大小之外的人臉就不能很好的檢測到;
  • 如圖(d)所示,如果想要檢測到小尺度人臉,相對於大尺度人臉,那麼就註定會有更多的小尺度、不包含人臉的背景錨框。
    以上幾點是論文所提出的問題,也就是論文創新點所重點關注和改善的幾個地方,下面一一道來。

3. S3FD

3.1 怎麼能讓網絡適用於不同尺度的人臉?

答案很簡單:既然不同尺度的人臉在同一層上的特徵區域不同,那麼又何必強求呢?道不同,不相爲謀,在不同層上分別進行檢測就是了。
當然,理想很豐滿。爲了實現這一理想,就要做些骨感的工作:


首先要建立一個很骨感的網絡,也就是開頭那張圖。以防大家一下就忘了,再放一次:
S3FD

這張圖有什麼玄機呢?
使勁瞅,用力看:

  • Base Convolutional Layers 這個方框內用的是VGG16的框架,不過只取到了Pool5層;
  • Extra Convolutioal Layers 原本應該是VGG16的全連接層fc6、fc7被換成了卷積層,當然我們知道,通過設計卷積層卷積核大小與前一層特徵圖相等,也能實現全連接的功能;同時後面也額外加上了4層卷積層,看來這是要搞大事情呀;
  • 左下角的Detection Layers就是一個抽象的概念了,其實就是Base、Extra方框內的一些卷積層被指派爲檢測層了,不知道其他沒被指派的卷積層會不會感到失落呢;
  • Normalization Layers:這個圖上沒標,其實就是對Base方框裏被選中的幾個檢測層進行了L2 normalization;
  • Predicted Convolutional Layers 也是人如其名,就是預測層了,其中每個卷積層分別承擔着不同尺度的人臉的檢測任務,分別預測錨框的偏移量和所屬類別的置信率;論文所聲稱的適用於不同尺度人臉的功能就是這樣實現的了;
  • Max-out BG label:爲了雨露均沾,還是提一下這個框框,這個就是專門爲了Con3_3而設計的了,目的是篩選出大部分的背景錨框;
  • Multi-task Loss Layers:就是損失層咯,分類用softmax loss,迴歸用smooth L1 loss。

以上,終於把這個十分骨感的網絡講完了,下面就是一點一點地實現我們豐滿的理想了。

How about anchors’ scales?

那麼問題來了,前面說了不同層上檢測不同尺度的人臉,這個“不同尺度”,也就是不同層的錨框大小該怎麼定義呢?
首先的直覺是:因爲人臉區域的標定框一般都是正方形,所以錨框也定義成正方形,長寬比1:1。
OK,那麼關鍵的,這個長、寬到底應該是多少呢?取決於兩個因素:

  • 有效感受野
    啥叫有效感受野?看圖說話:
    effective receptive field
    只看圖(a),對於整個黑色方框來說,其整體是一個理論上的能夠對最終輸出產生影響的感受野,也就是大家通常意義上所理解的感受野,真~感受野,那麼有效感受野就是圖中心的白色點點,這些是實際上能夠對最終輸出產生影響的區域,也就是所謂的有效感受野,真~真~感受野。因此,在圖(b)中,黑色虛線框是正常的感受野,藍色虛線圓就是我們的有效感受野,而紅色實線框就應該是我們的錨框的大小;
  • 等比例間距原則(Equal-proportion interval principle)
    這又是啥?不要着急,君且安坐,聽我一言:
    看圖(c),錨框移動的步長是n/4,那麼固定錨框是n×n的,於是這就成了我們的等比例間距原則:不同尺度的錨框在圖像上都有相等的密度,從而使得不同尺度的臉能夠大體上匹配到相等數量的錨框。

爲了能夠實現我們的豐滿理想,還真是操碎了心啊。

3.2 尺度補償錨框匹配策略(Scale compensation anchor matching strategy)

所謂錨框匹配,也就是在訓練過程中如何確定哪些錨框是匹配到人臉了的,而哪些沒有。
一般來說,錨框匹配首先匹配那些與標記好的人臉有最好IOU交併比的錨框,然後匹配那些與任意人臉的IOU交併比大於某個臨界值的錨框。有點繞,但確實如此。就是先按照預先標記好的人臉區域匹配最好的錨框,然後從衆多生成的錨框區域中來匹配次好的錨框。
但是陳獨秀同志又有話說了,看圖:
scale compensation
我們知道,衆多圖像中的人臉區域大小應該是連續分佈的,但我們的錨框大小卻是一些固定的值。圖(a)中藍虛線,當錨框是固定值(16, 32, 64, 128, 256, 512)的時候,可以看到,與這些值都不接近的人臉區域不能夠很好的被匹配到,尤其是小人臉部分,效果微乎其微。
據此,文章提出了尺度補償錨框匹配策略:

  • 降低錨框匹配的臨界值,一般是0.5, 這裏改爲0.35,以提高每個人臉框所匹配到的錨框數量;
  • 針對依然沒有被匹配到的人臉區域, 將閾值改爲0.1,然後選擇匹配比最高的N個錨框進行匹配;
    經過這一該進,效果顯著,就是圖(a)中的紅實線了。

3.3 “最大者勝”的背景標籤(Max-out background label)

首先,啥是背景標籤?很簡單,對於人臉檢測,錨框區域如果包含人臉,那麼就是正例,如果不包含人臉,那麼就是負例,也即背景標籤。
對於基於錨框的檢測方法來說,有一個問題:
anchors numbers
比如本文中所述的方法,對於一張640*640的圖像,其總共產生了34,125個錨框!僅conv3_3就貢獻了超過75%的尺度大小爲16×16的錨框!
這可如何是好呀?
於是就到了3.2中圖(b)的做法了:對於每個匹配到的錨框,同時預測其一系列背景錨框,然後選擇其中置信率最高(max)的一個作爲負例,也即Max-out。其實這就是一種局部優化方法,以此來減少假正率。

4. The end, and flowers!

以上,就是S3FD如何提出了一個豐滿的理想,並一步一步骨感地實現它的過程。
論文在提出之時在各大人臉檢測榜上刷出了較好的成績,wider face、FDDB、AFW等,當然,截止到現在(2018-09-13 10:09:06)是又被其他方法給頂了下去。果然是打江山容易,守江山難啊~~
最後放上一張大家都愛放的檢測效果圖,也是S3FD論文中的檢測效果圖:
finding 853 faces
這張圖據說共有1000張臉,S3FD方法檢測出了853張。
不要驚奇,不要訝異,百度的Pyramidbox檢測出了880張~~當然,這是後話,不在本文討論。

5. The real end,and FLOWERS!

完結撒花。
你的贊是我最大的動力!


以及個人私貨時間:
github :oukohou
my site:oukohou.wang
e - mail:[email protected]
wechat official account: oukohou
oukohou
Scan and we’ll see.

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