用於人臉檢測的SSH演算法
為了方便讀者獲取資料以及我們公眾號的作者發布一些 GitHub 工程的更新,我們成立了一個 QQ 群,二維碼在文章末尾,感興趣可以加入。
1. 前言
Single Stage Headless Face Detector(SSH)是 ICCV 2017 提出的一個人臉檢測演算法,它有效提高了人臉檢測的效果,主要的改進點包括多尺度檢測,引入更多的上下文資訊,損失函數的分組傳遞等等,論文相對比較簡單,獲得的效果也還不錯(從 Wider Face 的結果來看,和前幾天介紹的在小尺寸人臉檢測上發力的S3FD 差不多)。
2. 網路結構
SSH 演算法的網路結構如 Figure2 所示:
SSH 演算法是在 VGG 的基礎上進行了改進,創新點主要有兩個,即尺度不變性和引入更多的上下文資訊。
在 Figure2 中,尺度不變性是通過不同尺度的檢測層來完成的,和 SSD,YOLOV3 等目標檢測演算法類似。具體來說一共有3個尺寸的檢測模組(detection module),檢測模組 M1,M2,M3 的stride
分別為8,16,32,從圖中也可以看出 M1 主要用來檢測小尺寸人臉,M2 主要用來檢測中等尺寸人臉,M3 主要用來檢測大尺寸人臉。每個檢測模組都包含了分類(Scores)和回歸(Boxes)兩個分支。檢測模組 M2 是直接接在 VGG 的conv5_3
層後面,而檢測模組 M1 的輸出包含了較多的特徵融合和維度縮減(從512->128)操作,從而減少計算量。
而引入更多的上下文資訊 是通過在檢測模組中插入上下文模組(context module)實現的,上下文模組的結構如 Figure4 所示,它是通過將原始的特徵分別接一個3\times 3卷積的支路和2個3\times 3卷積的支路從而為特徵圖帶來不同的感受野,達到豐富語義資訊的目的:
3. 創新點詳解
剛才提到,SSH 演算法的創新點就3個,即新的檢測模組,上下文模組以及損失函數的分組傳遞,接下來我們就再盤點一下:
3.1 檢測模組
下面的 Figure3 是檢測模組的示意圖:
分類和回歸的特徵圖是融合了普通卷積層和上下文模組輸出的結果。分類和回歸支路輸出的K表示特徵圖上每個點都設置了K個 Anchor,這K個 Anchor 的寬高比例都是1:1,論文說增加寬高比例對於人臉檢測的效果沒有提示還會增加 Anchor 的數量。
3.2 上下文模組
下面的 Figure4 是上下文模組的示意圖:
作者原本是通過引入卷積核尺寸較大的卷積層例如5\times 5和7\times 7來增大感受野,從而引入更多的上下文資訊。但為了減少計算量,作者借鑒了 GoogleNet 中用多個3\times 3卷積代替5\times 5卷積或者7\times 7卷積的做法,於是最終上下文模組的結構就如 Figure4 所示了,另外注意到開頭的3\times 3卷積是共享的。
3.3 損失函數的分組傳遞
SSH 演算法還對損失函數做了一些調整,公式如下所示:
分類的損失函數還是採用常用的二分類損失函數,其中A_k表示屬於檢測模組M_k的 Anchor,而回歸損失部分多了一個I(g_i=1),意思對於不同尺度的檢測模組來說,只回傳對應尺度的 Anchor 損失,這就實現了第二節中提到的 M1 主要用來檢測小人臉,M2 主要用來檢測中等尺寸人臉,M3 主要用來檢測大尺寸人臉的目的。另外,在引入 OHEM 演算法時也是針對不同尺度的檢測模組分別進行的。
4. 實驗結果
下面的 Table1 展示了不同的人臉檢測演算法在 Wider FACE 數據集上的效果對比。HR 演算法的輸入為影像金字塔,可以看到不使用影像金字塔的 SSH 演算法效果都超過了相同特徵提取網路的 HR 演算法。最後一行的 SSH(VGG-16)+Pyramid 表示的是輸入為影像金字塔,可以看到準確率進一步提升了。
下面的 Table2 展示了在 NVIDIA Quadro P6000 GPU 上的速度測試,結果如下:
5. 總結
這篇文章介紹了一下用於人臉檢測的 SSH 演算法,它提出的上下文模組和損失函數的分組傳遞還是比較有意思的,論文的精度也說明這幾個創新點是有用的。但是論文給出的實驗結果比較少,所以我們無法判斷每個 Trick 對結果的影響幅度到底多大,這是比較遺憾的。
6. 附錄
- HR 演算法://blog.csdn.net/wfei101/article/details/80932095
- 參考://blog.csdn.net/u014380165/article/details/83590831
- 論文原文://arxiv.org/pdf/1708.03979.pdf
- 程式碼://github.com/mahyarnajibi/SSH
歡迎關注 GiantPandaCV, 在這裡你將看到獨家的深度學習分享,堅持原創,每天分享我們學習到的新鮮知識。( • ̀ ω•́ )✧
有對文章相關的問題,或者想要加入交流群,歡迎添加 BBuf 微信:
為了方便讀者獲取資料以及我們公眾號的作者發布一些 GitHub 工程的更新,我們成立了一個 QQ 群,二維碼如下,感興趣可以加入。