深度學習在人臉檢測中的應用 | CSDN 博文精選

深度學習在人臉檢測中的應用 | CSDN 博文精選深度學習在人臉檢測中的應用 | CSDN 博文精選

作者 | 樑志成、劉鵬、陳方傑

責編 | 唐小引

本文精選自 CSDN 博客,已獲作者原創授權

在目標檢測領域,可以劃分為人臉檢測與通用目標檢測,往往人臉這方面會有專門的算法(包括人臉檢測、人臉識別、人臉其他屬性的識別等),並且和通用目標檢測(識別)會有一定的差別。這主要來源於人臉的特殊性(譬如有時候目標比較小、人臉之間特徵不明顯、遮擋問題等),本文將主要從人臉檢測方面來講解目標檢測。

深度學習在人臉檢測中的應用 | CSDN 博文精選

目前主要的人臉檢測方法分類

當前,人臉檢測方法主要包含兩個區域:傳統人臉檢測算法和基於深度學習的人臉檢測算法。傳統人臉檢測算法主要可以分為 4 類:

  • 基於知識的人臉檢測方法;

  • 基於模型的人臉檢測方法;

  • 基於特徵的人臉檢測方法;

  • 基於外觀的人臉檢測方法。

2006 年,Hinton 首次提出深度學習(Deep Learning)的概念,它是通過組合低層的特徵形成更高層的抽象特徵。隨後研究者將深度學習應用在人臉檢測領域,主要集中在基於卷積神經網絡(CNN)的人臉檢測研究,如基於級聯卷積神經網絡的人臉檢測(Cascade CNN)、基於多任務卷積神經網絡的人臉檢測(MTCNN)、Facebox 等,很大程度上提高了人臉檢測的魯棒性。

當然,像 Faster RCNN、YOLO、SSD 等通用目標檢測算法也有用在人臉檢測領域,也可以實現比較不錯的結果,但是和專門人臉檢測算法比還是有差別。

深度學習在人臉檢測中的應用 | CSDN 博文精選

如何檢測圖片中不同大小的人臉?

傳統人臉檢測算法中針對不同大小人臉主要有兩個策略:

  • 縮放圖片的大小(圖像金字塔如圖 1 所示);

深度學習在人臉檢測中的應用 | CSDN 博文精選

圖 1 圖像金字塔

  • 縮放滑動窗的大小(如圖 2 所示)。

深度學習在人臉檢測中的應用 | CSDN 博文精選

圖 2 縮放滑動窗口

基於深度學習的人臉檢測算法中,針對不同大小人臉主要也有兩個策略,但和傳統人臉檢測算法有點區別,主要包括:

  • 縮放圖片大小:不過也可以通過縮放滑動窗的方式,基於深度學習的滑動窗人臉檢測方式效率會很慢存在多次重複卷積,所以要採用全卷積神經網絡(FCN),用 FCN 將不能用滑動窗的方法。

  • 通過 anchor box 的方法:如圖 3 所示,不要和圖 2 混淆,這裡是通過特徵圖預測原圖的 anchorbox 區域,具體在 Facebox 中有描述。

深度學習在人臉檢測中的應用 | CSDN 博文精選

圖 3 anchor box

深度學習在人臉檢測中的應用 | CSDN 博文精選

如何設定算法檢測最小人臉尺寸?

主要是看滑動窗的最小窗口和 anchorbox 的最小窗口。

  • 滑動窗的方法

假設通過 12×12 的滑動窗,不對原圖做縮放的話,就可以檢測原圖中 12×12 的最小人臉。

但是往往通常給定最小人臉 a=40、或者 a=80,以這麼大的輸入訓練 CNN 進行人臉檢測不太現實,速度會很慢,並且下一次需求最小人臉 a=30*30 又要去重新訓練,通常還會是 12×12 的輸入,為滿足最小人臉框 a,只需要在檢測的時候對原圖進行縮放即可:w=w×12/a。

  • anchorbox 的方法

原理類似,這裡主要看 anchorbox 的最小 box,通過可以通過縮放輸入圖片實現最小人臉的設定。

深度學習在人臉檢測中的應用 | CSDN 博文精選

如何定位人臉的位置

  • 滑動窗的方式:

滑動窗的方式是基於分類器識別為人臉的框的位置確定最終的人臉。

深度學習在人臉檢測中的應用 | CSDN 博文精選

圖 4 滑動窗

  • FCN 的方式:

通過特徵圖映射到原圖的方式確定最終識別為人臉的位置,特徵圖映射到原圖人臉框是要看特徵圖相比較於原圖有多少次縮放(縮放主要查看卷積的步長和池化層)。

假設特徵圖上(2,3)的點,可粗略計算縮放比例為 8 倍,原圖中的點應該是(16,24);如果訓練的 FCN 為 12*12 的輸入,對於原圖框位置應該是(16,24,12,12)。

當然這只是估計位置,具體的在構建網絡時要加入迴歸框的預測,主要是相對於原圖框的一個平移與縮放。

  • 通過 anchor box 的方式:

通過特徵圖映射到圖的窗口,通過特徵圖映射到原圖到多個框的方式確定最終識別為人臉的位置。

深度學習在人臉檢測中的應用 | CSDN 博文精選

如何通過一個人臉的多個框確定最終人臉框位置?

深度學習在人臉檢測中的應用 | CSDN 博文精選

圖 5 通過 NMS 得到最終的人臉位置

NMS 改進版本有很多,最原始的 NMS 就是判斷兩個框的交集。如果交集大於設定的閾值,將刪除其中一個框。

那麼兩個框應該怎麼選擇刪除哪一個呢? 因為模型輸出有概率值,一般會優選選擇概率小的框刪除。

深度學習在人臉檢測中的應用 | CSDN 博文精選

基於級聯卷積神經網絡的人臉檢測(Cascade CNN)

  • Cascade CNN 的框架結構是什麼?

深度學習在人臉檢測中的應用 | CSDN 博文精選

級聯結構中有 6 個 CNN,3 個 CNN 用於人臉非人臉二分類,另外 3 個 CNN 用於人臉區域的邊框校正。

給定一幅圖像,12-net 密集掃描整幅圖片,拒絕 90% 以上的窗口。剩餘的窗口輸入到 12-calibration-net 中調整大小和位置,以接近真實目標。接著輸入到 NMS 中,消除高度重疊窗口。下面網絡與上面類似。

  • Cascade CNN 人臉校驗模塊原理是什麼?

該網絡用於窗口校正,使用三個偏移變量:

Xn:水平平移量,Yn:垂直平移量,Sn:寬高比縮放。

候選框口(x,y,w,h)中,(x,y)表示左上點座標,(w,h)表示寬和高。

我們要將窗口的控制座標調整為:

深度學習在人臉檢測中的應用 | CSDN 博文精選

這項工作中,我們有種模式。偏移向量三個參數包括以下值:

深度學習在人臉檢測中的應用 | CSDN 博文精選

同時對偏移向量三個參數進行校正。

深度學習在人臉檢測中的應用 | CSDN 博文精選
  • 訓練樣本應該如何準備?

人臉樣本;

非人臉樣本。

  • 級聯的好處

最初階段的網絡可以比較簡單,判別閾值可以設得寬鬆一點,這樣就可以在保持較高召回率的同時排除掉大量的非人臉窗口;

最後階段網絡為了保證足夠的性能,因此一般設計的比較複雜,但由於只需要處理前面剩下的窗口,因此可以保證足夠的效率;

級聯的思想可以幫助我們去組合利用性能較差的分類器,同時又可以獲得一定的效率保證。

深度學習在人臉檢測中的應用 | CSDN 博文精選

基於多任務卷積神經網絡的人臉檢測(MTCNN)

深度學習在人臉檢測中的應用 | CSDN 博文精選

MTCNN 模型有三個子網絡,分別是 P-Net,R-Net,O-Net。

深度學習在人臉檢測中的應用 | CSDN 博文精選深度學習在人臉檢測中的應用 | CSDN 博文精選深度學習在人臉檢測中的應用 | CSDN 博文精選

為了檢測不同大小的人臉,開始需要構建圖像金字塔,先經過 PNet 模型,輸出人臉類別和邊界框(邊界框的預測為了對特徵圖映射到原圖的框平移和縮放得到更準確的框),將識別為人臉的框映射到原圖框位置可以獲取 patch,之後每一個 patch 通過 resize 的方式輸入到 RNet,識別為人臉的框並且預測更準確的人臉框,最後 RNet 識別為人臉的的每一個 patch 通過 resize 的方式輸入到 ONet,跟 RNet 類似,關鍵點是為了在訓練集有限情況下使模型更魯棒。

還要注意一點:構建圖像金字塔的的縮放比例要保留,為了將邊界框映射到最開始原圖上。

深度學習在人臉檢測中的應用 | CSDN 博文精選

Facebox

深度學習在人臉檢測中的應用 | CSDN 博文精選

(1)Rapidly Digested Convolutional Layers(RDCL)

在網絡前期,使用 RDCL 快速的縮小 feature map 的大小。 主要設計原則如下:

  • Conv1, Pool1, Conv2 和 Pool2 的 stride 分別是 4, 2, 2 和 2。這樣整個 RDCL 的 stride 就是 32,可以很快把 feature map 的尺寸變小。

  • 卷積(或 pooling)核太大速度就慢,太小覆蓋信息又不足。權衡之後,將 Conv1, Pool1, Conv2 和 Pool2 的核大小分別設為 7x7,3x3,5x5,3x3。

  • 使用 CReLU 來保證輸出維度不變的情況下,減少卷積核數量。

(2)Multiple Scale Convolutional Layers(MSCL)

在網絡後期,使用 MSCL 更好地檢測不同尺度的人臉。 主要設計原則有:

  • 類似於 SSD,在網絡的不同層進行檢測;

  • 採用 Inception 模塊。由於 Inception 包含多個不同的卷積分支,因此可以進一步使得感受野多樣化。

(3)Anchor densification strategy

為了 anchor 密度均衡,可以對密度不足的 anchor 以中心進行偏移加倍,如下圖所示:

深度學習在人臉檢測中的應用 | CSDN 博文精選

作者簡介:

樑志成,全球 AI 挑戰賽百強選手,《深度學習 500 問》作譯者,CSDN 博客專家及簽約講師。

劉鵬,稿定科技計算機視覺工程師,《深度學習 500 問》作譯者。

陳方傑,上海大學碩士,《深度學習 500 問》作譯者。

CSDN 博客原文:

https://blog.csdn.net/lzc4869/article/details/94666784

歡迎所有開發者朋友入駐 CSDN 博客,技術之路,共同進步。

【END】

相關推薦

推薦中...