1. 程式人生 > >【蜂口 | AI人工智慧】人臉檢測(下)——龍鵬 深度學習與人臉影象應用連載(二)

【蜂口 | AI人工智慧】人臉檢測(下)——龍鵬 深度學習與人臉影象應用連載(二)

我們接著上一節的分享,繼續分享人臉檢測的下半部分。這次的分享主要是深度學習相關的。我們會主要講述當前深度學習在人臉檢測這個領域的發展水平。主要從以下幾個方向進行分享:

首先,我們會講講當前主流的基於深度學習的一個人臉檢測的框架,包括兩個框架,一個是級聯CNN框架,一個是RCNN框架。

然後,我們會對深度學習的方法做一個簡單的總結。

最後我們對整個的人臉檢測這一領域做一個展望。對人臉檢測現在面臨的挑戰以及未來的研究方向做一個全域性的把握。

下面開始我們第一部分的分享,

1)級連CNN框架。 級連CNN框架是第一個用深度學習來進行人臉檢測的一個框架。 在這裡插入圖片描述 我們首先看上面的一個流程圖,可以看到,首先我們有一張測試圖片,然後經過了一個12-net的這樣的一個網路,這是一個人臉檢測的網路,然後又經過了一個12-calibration-net的這樣一個網路。他是一個對邊框進行精細調整的一個網路。隨後我們又經過了24-net 24-calibration-net,48-net 48-calibration-net,直到最後得到我們最終的檢測結果。

從以上的圖我們可以看出來,它有幾個特點:

a.這是一個級連CNN網路結構。它與我們在上一次分享的VJ演算法有類似的思想,也就是通過多個網路的一個串接,從粗到精,最後得到我們最終的檢測結果。

b.這是一個多尺度的網路結構。我們看到上面有12-net,24-net,48-net網路,實際上它在訓練的時候,他們是採用了不同解析度的圖片進行訓練的,這是一個多尺度的網路結構。

c.添加了一個邊界改進網路,也就是我們上面的三個calibration-net。這三個calibration-net,是與他們初級的人臉檢測網路對應的的人臉檢測,比如說12-calibration-net,它就是針對12-net這個人臉檢測網路,用於改進它的邊界的位置,這是深度學習的方法與傳統方法的一個比較大的區別,因為深度學習的方法可以非常方便地去改善它的邊緣,這也是深度學習方法的精度高於傳統方法的一個比較重要的原因。

如果大家對這個文章更多的細節感興趣,可以去看一下這篇論文:

Li H, Lin Z, Shen X, et al. A convolutional neural network cascade for face detection[C]// Computer Vision and Pattern Recognition. IEEE, 2015:5325-5334. 接下來我們對下面的三個網路的流程圖給大家做一個簡單的分析。 在這裡插入圖片描述

首先,我們看12-net。12-net我們可以看到它的輸入是一張12×12×3這樣的一個彩色圖。這就是被稱為12-net原因,它的解析度是12×12。同樣24-net ,48-net,它們的輸入解析度分別是24×48。

這三個網路分別起到什麼樣的作用呢?

因為我們前面可以看到整個網路的框架的流程是12-net,然後串接24-net,最後串接48-net這樣的一個流程。他們這麼設計的原因主要是首先我們利用前端也就是12-net這樣的一個網路,它可以過濾掉大部分非人臉的區域,同時它也能夠保證一個較高的召回率,但是它的精度會稍微的低一些,相應地,它的計算量也會小一些。隨著24-net,48-net這樣的一個解析度的提升,它的分類器會更加的複雜,它的檢測也會更加的精細。

總結一下,級聯CNN它通過一個分類網路加定位網路串接以及多解析度多尺度的這樣一個設計思想,它真正的將CNN用於人臉檢測,並取得了比較大的突破。當然,級連CNN是比較早期的一個框架了,它有它的一個弱點,就是他們採用的六個網路都需要分別單獨進行訓練,這實際上在使用過程中是非常麻煩的。

2)RCNN系列的發展。 到現在主流的人臉檢測,魯棒性最好的一個系列就是RCNN系列。實際上RCNN自身的發展就是一個人臉檢測的方法,從非end to end的方法到end to end的方法這樣的一個發展歷史。

所謂end to end就是一個網路輸入一張圖片直接得到了我們最終的結果,而非end to end可能要包含了好幾步,這幾步在訓練的過程中都是需要分別進行訓練的。

最開始出現的是RCNN這樣的一個網路。RCNN它實際上與傳統的方法有很大的類似之處。比較不同的地方是RCNN採用的selective影象塊,採用了selective的方法來提取了很多候選的影象塊,然後利用CNN來進行影象特徵的提取。這兩塊與傳統方法不同,剩下的它仍然是通過一個SVM分類器來對候選的人臉區域進行分類,判斷他是不是有人臉。RCNN這樣的一個框架,它的計算量非常大,因為selective提取影象塊是一個計算量很大的過程,同時對提取這麼多的候選區域要分別用CNN的進行特徵提取,又是一個非常大的計算量,所以限制了這個方法的實際的使用。

隨後提出了Fast R-CNN這樣的一個升級版本。Fast R-CNN相對RCNN的改進之處在於CNN提取影象塊特徵,他提出了一個RoIPooling的框架,RoIPooling這樣的一個方法可以從整圖對應的一個卷積特徵圖反投影回原圖。也就是說我們只要得到了卷積特徵圖,我們就可以反投影回到原圖中,獲得任意區域的特徵。所以它實現的只需要網路前向傳播一次,就能夠獲得任意影象區域的一個特徵。

這一點有點類似於傳統方法中,前面我們所說的VJ方法中的積分圖,積分圖也是一樣的,它只需要一次積分圖的計算,就可以得到任意的候選區域的特徵,它這樣的思想,就可以大大地減少RCNN裡面的CNN對大量重複影象區域和大量重疊影象區域進行特徵提取的計算量。但是由於Fast R-CNN仍然免不了selective影象塊的候選區域的選擇,這個方法是非常耗時的,所以最終又出現了Faster R-CNN。

Faster R-CNN的貢獻就是提出了Region Proposal框架。Region Proposal利用了很多的anchors,把一張圖片劃分成了n*n這樣的區域,然後基於每個區域提出了ratio和scale不同的proposal。他的提出就已經完全地取消了selective方法,實現了用CNN來提取候選區域,由此大大地降低了計算量,達到Faster R-CNN這樣的一個框架之後,它的實時性就得到了保證。真正的將這樣一個系列方法用於人臉檢測就有了可行性。

最後我們對深度學習的方法做一個簡單的總結。

深度學習的方法實際上可以分為這麼幾大類:One-stage、Two-stage、Multi-stage。

One-stage這樣的方法,包括YOLO系列、SSD系列等等。它的特點就是:

a)沒有Region Proposal的過程,它直接回歸出了一個影象目標的位置。它的特點就是它的檢測精度相對來說會比較低。

b)它的檢測速度是最快的。目前像YOLO系列、SSD系列都是非常具有競爭性的,它也在很多的工業應用中進行了落地。

不過綜合效果最好的還是Faster R-CNN系列。也就是我們前面介紹的系列,它的特點就是它的檢測精度是這幾個方法裡面是最高的,但是它的檢測速度會稍微的慢一些。

最後是Multi-stage,就是最開始我們的R-CNN框架,包括SPPNet,它們基本上已經被淘汰了,因為它們包含了像利用傳統的方法來提取候選區域這樣一些非常耗時的操作。他們的檢測精度也是這幾個方法裡面最低的,檢測速度也是極慢的。

那深度學習與傳統方法相比有什麼特徵呢?

1)深度學習的方法比傳統方法總體來說是要慢一些。不過人臉檢測的問題,它的速度實際上取決於我們輸入網路進行檢測的影象的大小,以及與我們最小檢測的人臉尺寸有關係。當我們要求最小檢測的人臉的尺度越小,那我們一般要求輸入的影象就會越大,這樣一來它的計算量就會越大。因為現在的網路都是基於全卷積的網路,然後深度學習的方法它的召回率是遠高於傳統方法的。

2)因為深度學習方法一般都會有專門一個定位的過程,所以它的定位精度也是遠遠高於傳統方法,這是深度學習方法的一個比較大的優勢。

接下來我們對人臉檢測所面臨的一些挑戰,給大家做一個總結:

首先,是多尺度問題。 在這裡插入圖片描述

我們看這樣一張圖,這張圖包含了各種各樣的人臉,從離攝像頭比較近的大的人臉到離攝像頭非常遠的人臉。我們如果想檢測這樣的一張圖的話,它就面臨多尺度的問題。

多尺度需要我們設計一個比較精巧的anchors機制。一般解決多尺度的問題是有兩個思路:

a.)採用大尺度的輸入。

當我們使用越大尺寸的一個圖片,那麼我們最後對應回小臉的那個feature map的區域也會越大,這樣就能夠保證召回。

b.)使用多尺度特徵的融合。

這是兩篇參考文獻,大家有興趣可以去參考: Li H, Lin Z, Shen X, et al. A convolutional neural network cascade for face detection[C]// Computer Vision and Pattern Recognition. IEEE, 2015:5325-5334. Hu P, Ramanan D. Finding Tiny Faces[J]. 2016. 其次,遮擋問題。

這種問題在現實生活中是廣泛存在的,因為我們的人臉檢測演算法,很多時候我們應用這個演算法的時候,它是一個被動式的,也就是人不會主動去配合一個攝像頭來進行人臉的檢測與識別。這個時候我們演算法又要能夠識別到這些遮擋,又要識別到一個遮擋的人臉。

他現在也包含了兩個主要的思想:一個是我們對遮擋空間進行補全,另外一個是採用了Attention的機制。

同樣我們提供兩篇主流參考論文,大家可以去參考:

Ge S, Li J, Ye Q, et al. Detecting masked faces in the wild with lle-cnns[C]//The IEEE Conference on Computer Vision and Pattern Recognition (CVPR). 2017: 2682-2690. Wang J, Yuan Y, Yu G. Face Attention Network: An effective Face Detector for the Occluded Faces[J]. arXiv preprint arXiv:1711.07246, 2017.

最後是大姿態問題。

大姿態是困擾人臉檢測識別一個比較大的方向,因為我們的人臉在日常生活中,我們會有各種各樣的角度,各種各樣的側臉,低頭,擡頭等等。由於大姿態會導致人臉的一些特徵的缺失,所以我們對大姿態人臉檢測也面臨了很多困難。

現在對大姿態人臉的檢測有一個主流的,或者非常有前景的方向,是利用三維人臉檢測方法。

我們利用這樣的一個三維人臉的重建,重建回一個影象的三維的模型,然後我們對三維的模型進行旋轉矯正,從而實現我們的人臉檢測問題。

好了,我們人臉檢測的分享就到此為止,我們利用了兩節的內容,來給大家對人臉檢測的傳統方法和深度學習的方法做了一個全面的總結。人臉檢測現在仍然面臨很多的問題,仍然在現實場景中有很多的可以改進的地方。

免費領取 技術大咖分享課,加蜂口V信: fengkou-IT 蜂口小程式將持續為你帶來最新技術的落地方法,歡迎隨時關注瞭解~