資源 | CPU實時人臉檢測,各種朝向都逃不過

選自Github

機器之心編譯

參與:思源

鑑於一般的 CNN 難以處理旋轉的圖像,中國科學院計算技術研究所的研究者採用一種漸進的方法校準人臉朝向,並精確檢測其位置與角度。他們最近放出了該項研究的源代碼,並表示這種人臉檢測模型可以在 CPU 上快速進行實時推斷。本文介紹了這種具有旋轉不變性的神經網絡,並展示了對應的 CPU 實時人臉檢測項目。

作爲 CV 重要的組成部分,人臉檢測旨在利用卷積神經網絡從人臉圖像中抽取足夠的信息。然而雖然 CNN 能高效處理圖像數據,但大多數情況下它的設計都是針對一般圖像處理任務。卷積網絡本身並不會太考慮旋轉等情況,即使考慮也只是通過數據增強稍微優化一點。在這個項目及對應的論文中,作者提出並實現了一種完全旋轉平面(RIP)不變的人臉檢測。如下圖所示它能檢測出人臉的正確朝向,並從任何 RIP 角度捕獲面部檢測框。

如上所示很多計算機視覺任務或目標檢測需要處理不同的旋轉方向,而爲了解決這樣的問題,Xuepeng Shi 等研究者提出了一種用於旋轉不變性人臉檢測的 PCN(progressive calibration networks)。這種 PCN 能逐步校準每個候選面部的 PIP 方向爲垂直方向,並更好地從非面部圖像中區分出面部圖像。

  • 論文:Real-Time Rotation-Invariant Face Detection with Progressive Calibration Networks
  • 論文地址:https://arxiv.org/pdf/1804.06039.pdf

具體而言,PCN 會抽選識別候選面部圖像塊,並將朝下的圖像塊翻轉至正向,這樣就會減半 RIP 的角度範圍,即從 [−180° , 180° ] 到 [−90° , 90° ]。然後旋轉過的面部圖像塊會進一步區分朝向並校準到垂直向的 [−45° , 45° ] 範圍,這樣又會減半 RIP 的角度範圍。最後,PCN 會分辨到底這些候選圖像塊是不是人臉,並預測出精確的 RIP 角度。

通過將校準過程分割爲幾個漸進的步驟,且在早期校準步驟只預測粗略的朝向,PCN 最後能實現精確的校準。此外,每一個校準步驟可以簡單地旋轉-90°、90°和 180°,因此額外的計算量非常低,這也就是爲什麼該檢測項目能在 CPU 上實時運行的重要原因。通過在逐漸降低的 RIP 範圍內執行二元分類(是人臉或不是人臉),PCN 能在 360° RIP 旋轉角度內準確地檢測到人臉,而本項目重點就是實現這樣旋轉不變的人臉檢測器。

原論文圖 3:uepeng Shi 等研究者提出的 PCN 概覽,它會逐漸降低旋轉的角度範圍,並最終預測人臉及其旋轉的角度。

這種能處理不同旋轉方向的人臉檢測器有非常高的準確率,因爲它會先將候選人臉旋轉至正向再預測。此外,這種方法同樣有非常小的計算量,該 GitHub 項目表示它甚至可以在 CPU 上實時檢測人臉。

PCN 多角度實時人臉檢測項目地址:https://github.com/Jack-CV/PCN-FaceDetection

下圖展示了 PCN 項目在不同情境下的檢測效果,我們會發現即使面部的朝向多種多樣,它也能非常準確地檢測出來。

PCN 的目標是在準確地檢測人臉及朝向的情況下儘可能降低計算力。Xuepeng Shi 等研究者同樣在標準 VGA 圖像(640x480)上對比了 PCN 與其它旋轉不變的人臉檢測器。這些檢測器分別在帶有 3.4GHz CPU 和 GTX Titan X GPU 的臺式電腦上進行測試,速度測試結果與召回率都展示在下表,更詳細的內容請查看原論文。值得注意的是,將方形結果轉換爲矩形或橢圓型有助於更好地擬合標註值,因此能實現更高的準確率,不過下表並沒有做這樣的轉換。

項目使用方法

根據 GitHub 項目所示,目前該項目所測試的環境主要在 Linux,且需要 Caffe 和 OpenCV(2.4.10 或其它兼容版本)的支持。因爲該項目採用的是 Caffe 框架,所以小編放棄測試了~

以下是一些簡要的配置,首先可以設置人臉的最小檢測尺寸(size >= 20):

  • detector.SetMinFaceSize(size);

配置圖像金字塔的縮放因子(1.4 <= factor <= 1.6):

  • detector.SetImagePyramidScaleFactor(factor);

配置人臉檢測的置信度閾值(0 <= thresh1, thresh2, thresh3 <= 1):

  • detector.SetScoreThresh(thresh1, thresh2, thresh3);

是否平滑人臉檢測框(smooth = true or false),推薦在視頻中使用,它可以獲得更加穩定的人臉檢測框。

  • detector.SetVideoSmooth(smooth);

讀者可查看 picture.cpp 和 video.cpp 查看細節,如果你們想在 FDDB 上覆現結果,可以直接運行 fddb.cpp。我們可以在 FDDB 中旋轉圖像以獲得 FDDB-left、FDDB-right 和 FDDB-down,然後分別測試它們。具體而編譯並運行:

cd $PCN_ROOT/code# You should set "CAFFEROOT" in lib.sh, compile.sh, and run.sh first. 
sh lib.sh
sh compile.sh picture/video/fddb
sh run.sh picture/video/fddb

本文爲機器之心編譯,轉載請聯繫本公衆號獲得授權。

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