您的位置:首頁>正文

一種用於人臉檢測的設備上的深度神經網路

更多騰訊海量技術文章, 請關注雲加社區:https://cloud.tencent.com/developer

譯者:QiqiHe

蘋果公司開始在iOS 10中使用深度學習進行人臉檢測。 隨著Vision框架的發佈, 開發人員現在可以在他們的應用程式中使用這種技術和許多其他電腦視覺演算法。 本文討論這些挑戰並描述了人臉檢測演算法。

引言

蘋果首先通過CIDetector類在Core Image框架的公共API中發佈了人臉檢測。 這個API也被Apple應用程式內部使用, 例如Photos。 CIDetector的最早版本使用了基於Viola-Jones檢測演算法的方法[1]。 我們根據CIDetector對傳統電腦視覺方面的進展進行了後續改進。

隨著深度學習的出現, 以及其在電腦視覺問題中的應用,

人臉檢測精度的最新進展發生了巨大的飛躍。 我們必須徹底重新思考我們的方法, 以便我們能夠利用這種模式轉變。 與傳統的電腦視覺相比, 深度學習的學習模型需要更多的記憶體, 更多的磁片存儲以及更多的計算資源。

像今天的手機一樣, 典型的高端手機並不是一個可行的深度學習視覺模型平臺。 大多數行業通過基於雲的API提供深度學習解決方案來解決這個問題。 在基於雲的解決方案中, 使用深度學習推理將圖像發送到伺服器進行分析以檢測人臉。 基於雲的服務通常使用功能強大的桌面級GPU, 並提供大量記憶體。 非常大的網路模型以及潛在的大型模型可以在伺服器端運行, 從而允許用戶端(可能是手機)利用大型深度學習體系結構,

這在本地運行是不切實際的。

蘋果的iCloud照片庫是一個基於雲的照片和視頻存儲解決方案。 但是, 由於蘋果對用戶隱私的強烈承諾, 我們無法將iCloud伺服器用於電腦視覺計算。 發送到iCloud照片庫的每張照片和視頻在發送到雲存放裝置之前都會在設備上進行加密, 並且只能通過註冊到iCloud帳戶的設備進行解密。 因此, 為了給我們的客戶提供基於深度學習的電腦視覺解決方案, 我們必須直接解決在iPhone上運行深度學習演算法所面臨的挑戰。

我們面臨著幾個挑戰。 深度學習模式需要作為作業系統的一部分, 佔用寶貴的NAND存儲空間。 它們還需要載入到RAM中, 並且在GPU和/或CPU上需要大量的計算時間。 與基於雲計算的服務不同,

雲計算的資源只能專注於視覺問題, 設備上的計算必須與其他正在運行的應用程式共用這些系統資源。 最後, 計算必須足夠高效, 以在相當短的時間內處理一個大的照片庫, 但沒有顯著的功耗或熱量增加。

蘋果的iCloud照片庫是一個基於雲的照片和視頻存儲解決方案。 但是, 由於蘋果對用戶隱私的強烈承諾, 我們無法將iCloud伺服器用於電腦視覺計算。 發送到iCloud照片庫的每張照片和視頻在發送到雲存放裝置之前都會在設備上進行加密, 並且只能通過註冊到iCloud帳戶的設備進行解密。 因此, 為了給我們的客戶提供基於深度學習的電腦視覺解決方案, 我們必須直接解決在iPhone上運行深度學習演算法所面臨的挑戰。

我們面臨著幾個挑戰。 深度學習模式需要作為作業系統的一部分, 佔用寶貴的NAND存儲空間。 它們還需要載入到RAM中, 並且在GPU和/或CPU上需要大量的計算時間。 與基於雲計算的服務不同, 雲計算的資源只能專注於視覺問題, 設備上的計算必須與其他正在運行的應用程式共用這些系統資源。 最後, 計算必須足夠高效, 以在相當短的時間內處理一個大的照片庫, 但沒有顯著的功耗或熱量增加。

本文的其餘部分討論了我們的基於深度學習的人臉檢測的演算法, 以及我們如何成功地應對挑戰, 以實現最新的精度。 我們討論:

我們如何充分利用我們的GPU和CPU(使用BNNS和金屬)

用於網路推理、圖像載入和緩存的記憶體優化

我們如何以不妨礙iPhone預期的其他同時執行任務的方式來實現網路。

從Viola-Jones走向深度學習

在2014年, 當我們開始研究深度學習方法來檢測圖像中的人臉時, 深度卷積網路(DCN)剛剛開始在物體檢測任務上產生有希望的結果。 其中最突出的是一種名為“OverFeat”的方法[2], 該方法推廣了一些簡單的想法, 這些想法表明DCN在為物件掃描圖像方面非常有效。

OverFeat在一個神經網路和卷積層之間的完全連通的層之間的等價性, 與輸入的同樣的空間維度的篩檢程式的有效卷積是相等的。 這項工作表明, 一個固定的接受領域的二元分類網路(例如32x32, 自然跨度為16圖元)可以有效地應用於任意大小的圖像(例如, 320x320), 以產生適當大小的輸出映射(在這個例子中是20x20)。 OverFeat檔還提供了巧妙的配方, 通過有效地減少網路步幅來產生更密集的輸出映射。

我們基於OverFeat論文的一些見解構建了我們的初始架構,從而形成了一個完整的卷積網路(參見圖1),其中包含以下多工目標:

二進位分類來預測輸入中面部的存在與否,以及

預測邊界框參數的回歸,以最佳地定位輸入中的面部。

我們嘗試了幾種培訓這種網路的方法。例如,簡單的訓練過程是創建一個固定大小的圖像塊的大資料集,該圖像塊對應於網路的最小有效輸入,使得每個塊產生來自網路的單個輸出。訓練資料集是理想的平衡,所以一半的圖塊包含一個面(正類),另一半不包含面(負類)。對於每個正圖塊,我們提供了真正的位置(x,y,w,h)。我們訓練網路來優化前面描述的多工目標。一旦訓練完畢,網路就能夠預測一個圖塊是否包含一個人臉,如果是的話,它還提供該圖塊中人臉的座標和比例。

圖1.修改後的面部檢測DCN體系結構

由於網路是完全卷積的,因此可以高效地處理任意大小的圖像並生成2D輸出圖。地圖上的每個點對應於輸入圖像中的圖塊,並且包含來自網路的關於該圖塊中是否存在人臉以及其在輸入圖塊內的位置/比例的預測(參見圖中的DCN的輸入和輸出1)。

給定這樣一個網路,我們可以建立一個相當標準的處理流水線來執行人臉檢測,包括一個多尺度圖像金字塔,人臉檢測器網路和一個後期處理模組。我們需要一個多尺度的金字塔來處理各種尺寸的面孔。我們將網路應用到金字塔的每個級別,並從每一層收集候選檢測。 (見圖2)。後處理模組然後將這些候選檢測結果跨度進行組合,以產生對應於網路對圖像中的臉部的最終預測的邊界框的列表。

圖2.人臉檢測工作流程

這一策略使我們更接近於在設備上運行深度卷積網路,以徹底掃描圖像。但網路複雜性和規模仍然是性能的關鍵瓶頸。克服這一挑戰不僅意味著將網路限制在一個簡單的拓撲結構中,而且還要限制網路層數,每層通道數量和卷積濾波器的內核大小。這些限制提出了一個至關重要的問題:我們生產可接受的準確性的網路不是什麼簡單的東西,大多數都超過20層,由幾個網路中的網路模組組成。在前面描述的圖像掃描框架中使用這樣的網路將是完全不可行的。他們導致了不可接受的性能和用電量。事實上,我們甚至無法將網路載入到記憶體中。當時的挑戰是如何訓練一個簡單而緊湊的網路,以類比準確但複雜的網路的行為。

我們決定採用一種非正式的“師生”培訓方式[4]。這種方法為我們提供了一個機制來訓練第二個薄而深的網路(“學生”),使得它非常接近我們已經培訓的大型複雜網路(“老師”),即如前所述的輸出。學生網路由一個簡單的3x3卷積和層疊重複結構組成,其架構經過精心設計,可以最好地利用我們的神經網路推斷引擎。 (見圖1)

現在,最後,我們有一個用於面部檢測的深度神經網路的演算法,對於設備上的執行是可行的。我們反覆運算了幾輪訓練,以獲得足夠精確的網路模型來啟用所需的應用程式。雖然這個網路是準確可行的,但仍然有大量的工作要做,以便在數百萬使用者設備上部署。

優化圖像管道

對深度學習的實際考慮因素深深地影響了我們為開發人員設計的易於使用的框架,我們稱之為Vision。很明顯,偉大的演算法不足以創建一個偉大的框架。我們必須有一個高度優化的成像管道。

我們不希望開發人員考慮縮放,顏色轉換或圖像源。無論是用於即時相機捕捉流,視頻處理還是從光碟或網路處理圖像,人臉檢測都應該運行良好。它應該工作,不管圖像的表示和格式。

我們關心的是功耗和記憶體使用情況,尤其是流媒體和圖像捕獲。我們擔心記憶體佔用,比如64兆圖元全景所需的大記憶體。我們通過使用部分二次採樣解碼技術和自動平鋪技術來解決這些擔憂,即使在非典型的高寬比下,也可以在大圖像上執行電腦視覺任務。

另一個挑戰是色彩空間匹配。蘋果公司擁有廣泛的色彩空間API,但我們不希望讓開發人員承擔色彩匹配任務。視覺框架處理顏色匹配,從而降低成功採用電腦視覺到任何應用程式的門檻。

Vision還通過有效處理和重複使用中間體來優化。人臉檢測,人臉標誌檢測以及其他一些電腦視覺任務可以從相同的縮放中間圖像中工作。通過將演算法的介面抽象出來,找到要處理的圖像或緩衝區的所有權位置,Vision可以創建和緩存中間圖像,以提高多個電腦視覺任務的性能,而無需開發人員進行任何工作。

另一面也是如此。從中心介面的角度來看,我們可以將演算法開發推向方向,以便更好地重用或共用中間體。 Vision承載了幾種不同的,獨立的電腦視覺演算法。為了使各種演算法能夠很好地協同工作,實現使用輸入解析度和顏色空間,盡可能多的演算法共用。

優化設備上的性能

如果我們的人臉檢測API無法在即時應用程式和後臺系統進程中使用,那麼易用性的快感將很快消失。用戶希望在處理照片庫進行人臉識別或在拍攝後立即分析照片時,能夠流暢地運行人臉檢測。他們不希望電池耗盡或系統的性能緩慢爬行。蘋果的移動設備是多工設備。因此背景電腦視覺處理不應該顯著地影響系統的其餘部分的特徵。

我們實施了幾種策略來最大限度地減少記憶體佔用和GPU使用。為了減少記憶體佔用,我們通過分析計算圖來分配神經網路的中間層。這允許我們將多個圖層別名到同一個緩衝區。雖然是完全確定性的,但這種技術可以減少記憶體佔用,而不會影響性能或分配碎片,並且可以在CPU或GPU上使用。

對於Vision,檢測器運行5個網路(每個圖像金字塔比例一個,如圖2所示)。這5個網路共用相同的權重和參數,但其輸入,輸出和中間層具有不同的形狀。為了進一步減少佔用空間,我們在由這5個網路組成的聯合圖上運行基於活性的記憶體優化演算法,大大減少了佔用空間。此外,多個網路重複使用相同的權重和參數緩衝區,從而減少記憶體需求。

為了獲得更好的性能,我們利用了網路的完全卷積性:所有的尺度都被動態調整大小以匹配輸入圖像的解析度。與將圖像擬合在方形網路視網膜(由空白帶填充)相比,將網路適合圖像的大小允許我們大大減少總操作的數量。由於操作的拓撲結構並沒有因分配器其餘部分的重構和高性能而改變,所以動態整形不會引入與分配有關的性能開銷。

為了確保在深層神經網路在後臺運行時的UI響應性和流暢性,我們為網路的每一層分割GPU工作項,直到每個單獨時間少於一毫秒。這使驅動器能夠及時將情境切換到更高優先順序的任務,如UI動畫,從而減少並有時消除丟幀。

綜合起來,所有這些策略確保我們的用戶可以享受本地,低延遲,私密的深度學習推斷,而不必意識到他們的手機每秒鐘運行數百億次浮點運算的神經網路。

使用視覺框架

我們是否已經完成了我們設定的目標,即開發一個高性能,易於使用的人臉檢測API?你可以試試Vision框架並為自己判斷。以下是如何開始:

觀看WWDC演示:Vision Framework: Building on Core ML.

閱讀Vision Framework Reference.

在iOS 11教程中試用Core ML和Vision:機器學習。 [5]

引用文獻

[1] Viola, P. and Jones, M.J. Robust Real-time Object Detection Using a Boosted Cascade of Simple Features. In Proceedings of the Computer Vision and Pattern Recognition Conference, 2001.

[2] Sermanet, Pierre, David Eigen, Xiang Zhang, Michael Mathieu, Rob Fergus, and Yann LeCun. OverFeat: Integrated Recognition, Localization and Detection Using Convolutional Networks. arXiv:1312.6229 [Cs], December, 2013.

[3] Lin, Min, Qiang Chen, and Shuicheng Yan. Network In Network. arXiv:1312.4400 [Cs], December, 2013.

[4] Romero, Adriana, Nicolas Ballas, Samira Ebrahimi Kahou, Antoine Chassang, Carlo Gatta, and Yoshua Bengio. FitNets: Hints for Thin Deep Nets. arXiv:1412.6550 [Cs], December, 2014.

[5] Tam, A. Core ML and Vision: Machine learning in iOS Tutorial. Retrieved from https://www.raywenderlich.com, September, 2017.

原文連結:https://machinelearning.apple.com/2017/11/16/face-detection.html

原文作者:Computer Vision Machine Learning Team

通過有效地減少網路步幅來產生更密集的輸出映射。

我們基於OverFeat論文的一些見解構建了我們的初始架構,從而形成了一個完整的卷積網路(參見圖1),其中包含以下多工目標:

二進位分類來預測輸入中面部的存在與否,以及

預測邊界框參數的回歸,以最佳地定位輸入中的面部。

我們嘗試了幾種培訓這種網路的方法。例如,簡單的訓練過程是創建一個固定大小的圖像塊的大資料集,該圖像塊對應於網路的最小有效輸入,使得每個塊產生來自網路的單個輸出。訓練資料集是理想的平衡,所以一半的圖塊包含一個面(正類),另一半不包含面(負類)。對於每個正圖塊,我們提供了真正的位置(x,y,w,h)。我們訓練網路來優化前面描述的多工目標。一旦訓練完畢,網路就能夠預測一個圖塊是否包含一個人臉,如果是的話,它還提供該圖塊中人臉的座標和比例。

圖1.修改後的面部檢測DCN體系結構

由於網路是完全卷積的,因此可以高效地處理任意大小的圖像並生成2D輸出圖。地圖上的每個點對應於輸入圖像中的圖塊,並且包含來自網路的關於該圖塊中是否存在人臉以及其在輸入圖塊內的位置/比例的預測(參見圖中的DCN的輸入和輸出1)。

給定這樣一個網路,我們可以建立一個相當標準的處理流水線來執行人臉檢測,包括一個多尺度圖像金字塔,人臉檢測器網路和一個後期處理模組。我們需要一個多尺度的金字塔來處理各種尺寸的面孔。我們將網路應用到金字塔的每個級別,並從每一層收集候選檢測。 (見圖2)。後處理模組然後將這些候選檢測結果跨度進行組合,以產生對應於網路對圖像中的臉部的最終預測的邊界框的列表。

圖2.人臉檢測工作流程

這一策略使我們更接近於在設備上運行深度卷積網路,以徹底掃描圖像。但網路複雜性和規模仍然是性能的關鍵瓶頸。克服這一挑戰不僅意味著將網路限制在一個簡單的拓撲結構中,而且還要限制網路層數,每層通道數量和卷積濾波器的內核大小。這些限制提出了一個至關重要的問題:我們生產可接受的準確性的網路不是什麼簡單的東西,大多數都超過20層,由幾個網路中的網路模組組成。在前面描述的圖像掃描框架中使用這樣的網路將是完全不可行的。他們導致了不可接受的性能和用電量。事實上,我們甚至無法將網路載入到記憶體中。當時的挑戰是如何訓練一個簡單而緊湊的網路,以類比準確但複雜的網路的行為。

我們決定採用一種非正式的“師生”培訓方式[4]。這種方法為我們提供了一個機制來訓練第二個薄而深的網路(“學生”),使得它非常接近我們已經培訓的大型複雜網路(“老師”),即如前所述的輸出。學生網路由一個簡單的3x3卷積和層疊重複結構組成,其架構經過精心設計,可以最好地利用我們的神經網路推斷引擎。 (見圖1)

現在,最後,我們有一個用於面部檢測的深度神經網路的演算法,對於設備上的執行是可行的。我們反覆運算了幾輪訓練,以獲得足夠精確的網路模型來啟用所需的應用程式。雖然這個網路是準確可行的,但仍然有大量的工作要做,以便在數百萬使用者設備上部署。

優化圖像管道

對深度學習的實際考慮因素深深地影響了我們為開發人員設計的易於使用的框架,我們稱之為Vision。很明顯,偉大的演算法不足以創建一個偉大的框架。我們必須有一個高度優化的成像管道。

我們不希望開發人員考慮縮放,顏色轉換或圖像源。無論是用於即時相機捕捉流,視頻處理還是從光碟或網路處理圖像,人臉檢測都應該運行良好。它應該工作,不管圖像的表示和格式。

我們關心的是功耗和記憶體使用情況,尤其是流媒體和圖像捕獲。我們擔心記憶體佔用,比如64兆圖元全景所需的大記憶體。我們通過使用部分二次採樣解碼技術和自動平鋪技術來解決這些擔憂,即使在非典型的高寬比下,也可以在大圖像上執行電腦視覺任務。

另一個挑戰是色彩空間匹配。蘋果公司擁有廣泛的色彩空間API,但我們不希望讓開發人員承擔色彩匹配任務。視覺框架處理顏色匹配,從而降低成功採用電腦視覺到任何應用程式的門檻。

Vision還通過有效處理和重複使用中間體來優化。人臉檢測,人臉標誌檢測以及其他一些電腦視覺任務可以從相同的縮放中間圖像中工作。通過將演算法的介面抽象出來,找到要處理的圖像或緩衝區的所有權位置,Vision可以創建和緩存中間圖像,以提高多個電腦視覺任務的性能,而無需開發人員進行任何工作。

另一面也是如此。從中心介面的角度來看,我們可以將演算法開發推向方向,以便更好地重用或共用中間體。 Vision承載了幾種不同的,獨立的電腦視覺演算法。為了使各種演算法能夠很好地協同工作,實現使用輸入解析度和顏色空間,盡可能多的演算法共用。

優化設備上的性能

如果我們的人臉檢測API無法在即時應用程式和後臺系統進程中使用,那麼易用性的快感將很快消失。用戶希望在處理照片庫進行人臉識別或在拍攝後立即分析照片時,能夠流暢地運行人臉檢測。他們不希望電池耗盡或系統的性能緩慢爬行。蘋果的移動設備是多工設備。因此背景電腦視覺處理不應該顯著地影響系統的其餘部分的特徵。

我們實施了幾種策略來最大限度地減少記憶體佔用和GPU使用。為了減少記憶體佔用,我們通過分析計算圖來分配神經網路的中間層。這允許我們將多個圖層別名到同一個緩衝區。雖然是完全確定性的,但這種技術可以減少記憶體佔用,而不會影響性能或分配碎片,並且可以在CPU或GPU上使用。

對於Vision,檢測器運行5個網路(每個圖像金字塔比例一個,如圖2所示)。這5個網路共用相同的權重和參數,但其輸入,輸出和中間層具有不同的形狀。為了進一步減少佔用空間,我們在由這5個網路組成的聯合圖上運行基於活性的記憶體優化演算法,大大減少了佔用空間。此外,多個網路重複使用相同的權重和參數緩衝區,從而減少記憶體需求。

為了獲得更好的性能,我們利用了網路的完全卷積性:所有的尺度都被動態調整大小以匹配輸入圖像的解析度。與將圖像擬合在方形網路視網膜(由空白帶填充)相比,將網路適合圖像的大小允許我們大大減少總操作的數量。由於操作的拓撲結構並沒有因分配器其餘部分的重構和高性能而改變,所以動態整形不會引入與分配有關的性能開銷。

為了確保在深層神經網路在後臺運行時的UI響應性和流暢性,我們為網路的每一層分割GPU工作項,直到每個單獨時間少於一毫秒。這使驅動器能夠及時將情境切換到更高優先順序的任務,如UI動畫,從而減少並有時消除丟幀。

綜合起來,所有這些策略確保我們的用戶可以享受本地,低延遲,私密的深度學習推斷,而不必意識到他們的手機每秒鐘運行數百億次浮點運算的神經網路。

使用視覺框架

我們是否已經完成了我們設定的目標,即開發一個高性能,易於使用的人臉檢測API?你可以試試Vision框架並為自己判斷。以下是如何開始:

觀看WWDC演示:Vision Framework: Building on Core ML.

閱讀Vision Framework Reference.

在iOS 11教程中試用Core ML和Vision:機器學習。 [5]

引用文獻

[1] Viola, P. and Jones, M.J. Robust Real-time Object Detection Using a Boosted Cascade of Simple Features. In Proceedings of the Computer Vision and Pattern Recognition Conference, 2001.

[2] Sermanet, Pierre, David Eigen, Xiang Zhang, Michael Mathieu, Rob Fergus, and Yann LeCun. OverFeat: Integrated Recognition, Localization and Detection Using Convolutional Networks. arXiv:1312.6229 [Cs], December, 2013.

[3] Lin, Min, Qiang Chen, and Shuicheng Yan. Network In Network. arXiv:1312.4400 [Cs], December, 2013.

[4] Romero, Adriana, Nicolas Ballas, Samira Ebrahimi Kahou, Antoine Chassang, Carlo Gatta, and Yoshua Bengio. FitNets: Hints for Thin Deep Nets. arXiv:1412.6550 [Cs], December, 2014.

[5] Tam, A. Core ML and Vision: Machine learning in iOS Tutorial. Retrieved from https://www.raywenderlich.com, September, 2017.

原文連結:https://machinelearning.apple.com/2017/11/16/face-detection.html

原文作者:Computer Vision Machine Learning Team

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示