华东15选5不开奖

為了讓iPhone實時運行人臉檢測算法,蘋果原來做了這么多努力

雷鋒網AI科技評論按:蘋果從iOS11開始正式在系統中帶有機器學習API,同步提供了許多基于機器學習/深度學習的手機功能。其實這之前蘋果就已經做了很多研究和開發,但當他們決定在手機上運行深度神經網絡、提供好用的功能同時還不要干擾正常的用戶體驗的時候,重大的挑戰同樣也等待蘋果解決。 ...
發布時間:2017/11/22 16:58:20  關鍵字:iPhone X

  雷鋒網 AI 科技評論按:蘋果從 iOS11 開始正式在系統中帶有機器學習 API,同步提供了許多基于機器學習/深度學習的手機功能。其實這之前蘋果就已經做了很多研究和開發,但當他們決定在手機上運行深度神經網絡、提供好用的功能同時還不要干擾正常的用戶體驗的時候,重大的挑戰同樣也等待蘋果解決。

  近日蘋果機器學習博客的一篇新文章就介紹了蘋果是如何設計、實現在 iPhone 上運行的人臉檢測系統的,不僅模型設計花了功夫,運行環境的優化也用了多種技巧。結合蘋果機器學習博客往期的幾篇文章,我們也繼續感受到許多企業、許多創業者所說過的,有創新只是第一步,把創新變成實實在在的產品還有很長的路要走、還有很多的困難要克服。

  雷鋒網 AI 科技評論把這篇文章全文翻譯如下:

  自 iOS10 以來,蘋果開始把基于深度學習的人臉檢測方法融入系統中。隨著蘋果的 Vision 框架的發布,開發者們可以在自己的 app 中運用這項技術以及許多其它的計算機視覺算法。為了能夠保護用戶隱私以及高效地在本地設備上運行,蘋果在開發過程中也遇到了不小的困難。這篇文章中就討論了這些困難,并且介紹了蘋果的人臉檢測算法是如何解決這些困難的。

  簡介

  蘋果最初是通過 CIDdetector 類中 Core Image 框架的一個公有 API 提供人臉檢測功能的。蘋果自己編寫的應用(比如照片)內部也在使用這個 API。最早版本的 CIDdetector 基于 Viola-Jones 檢測算法(雷鋒網 AI 科技評論注:Viola Jones Face Detector 是 Paul viola 和 Michael J Jones 在 CVPR2001 論文中共同提出的一種人臉檢測框架。它極大地提高了人臉檢測的速度和準確率,是第一個實時的人臉檢測算法,即便到現在也還有巨大影響力),然后蘋果又在 CIDdetector 中加入了一些基于傳統計算機視覺方法的優化。

  隨著深度學習逐步發展,以及深度學習在計算機視覺中的應用越來越多,頂級的人臉檢測算法準確率也有了大踏步的提升。蘋果的開發人員們意識到自己需要重新思考面部識別的做法,以便跟上這種新的范式。與傳統計算機視覺方法相比,深度學習學到的模型消耗的內存要多幾個數量級,更不用提需要更多的磁盤空間以及對計算資源的渴求。

  即便今天的智能手機已經有了長足的性能增長和豐富的功能支持,典型的高端手機仍然不足以讓基于深度學習的計算機視覺模型運行起來。業界內比較普遍的做法是繞過這個困難,通過云計算 API 提供深度學習功能。在基于云計算的方案中,移動設備需要把圖像發送到服務器,在服務器上運行深度學習推理,分析、檢測其中的人臉。云計算服務通常要使用性能強勁的、帶有大量可用顯存的桌面級 GPU。大規模的深度神經網絡模型,甚至多個大規模網絡的融合模型就可以在服務器端運行,讓客戶端(比如智能手機)享受到深度學習帶來的種種好處,而且無需在本地運行(實際上也無法在本地運行)。

  蘋果的 iClould Photo Library 就是一個視頻和圖像的云存儲解決方案,按理說可以方便地用服務器識別用戶已經上傳的內容。然而,由于蘋果對用戶隱私做出了很高的承諾、以高標準處理用戶信息,他們就無法在 iCloud 服務器上做計算機視覺的相關計算。每張上傳到 iClould Photo Library 的照片、每段上傳的視頻都是首先在設備上加密之后才上傳服務器的,要解密也只有這個 iCloud 賬戶下注冊的設備才可以解密。所以,如果要給客戶們帶來基于深度學習的計算機視覺解決方案的話,蘋果只能直接面對、嘗試解決這個困難:讓深度學習算法在 iPhone 本地運行。

  蘋果的開發人員們面對的困難有好幾個。

  首先,深度學習模型要作為操作系統的一部分,隨著手機一起來到用戶手中,這會占據珍貴的設備中的 NAND 閃存存儲空間;其次,模型需要加載到 RAM 中,并且需要消耗可觀的 GPU 和/或 CPU 計算時間;基于云的服務往往是專用服務器,其上的所有資源都可以集中提供給一個視覺問題使用,而在設備上本地進行的計算就需要和其它正在運行的應用一起共享系統資源;最后,計算過程必須足夠高效,在合理的短時間內就能處理完一個很大的照片庫,同時還不能有大幅度的功耗增加、不能有明顯的發熱。

  這篇文章余下的篇幅就介紹了蘋果是如何設計深度學習人臉檢測算法、如何克服困難達到頂級的準確率的。主要討論的內容有:

  • 如何全面利用 GPU 和 CPU(使用 BNNS 和 Metal)

  • 優化網絡推理、圖像加載和緩存時的內存使用

  • 如何在與 iPhone 的其它大量同時運行的功能時間不造成沖突的條件下實現這個網絡

  從 Viola-Jones 算法到深度學習

  當蘋果的開發人員們在 2014 年開始研究基于深度學習的圖像中的人臉檢測方法時,深度卷積網絡(deep convolutional networks,DCN)才剛剛開始在物體檢測任務中嶄露頭角。當時最突出的是一個名叫“OverFeat”的方法,它讓很多簡單的卷積神經網絡思想變得流行起來,也表明了深度卷積網絡掃描圖像尋找物體時的高效性。

  OverFeat 在神經網絡的全連接層和卷積網絡的卷積層之間找到了平衡,它的做法是把相同空間維度的過濾器的有效卷積作為輸入。這項研究清楚地表明,一個感受野大小固定(比如 32x32 大小,帶有 16 像素的自然步幅)的二分分類網絡可以高效地應用于任意大小的圖像(比如 320x320 的圖像),并且生成合適大小的輸出映射(這種情況下大小為 20x20)。OverFeat 這篇論文也提供了巧妙的做法,通過高效地降低網絡步幅產生更高密度的輸出映射。

  蘋果的開發人員們根據 OverFeat 論文中學到的新觀點構建了最初的模型架構,做出了一個全卷積網絡( 圖1),它可以執行如下兩個功能:

  • 一個預測輸入中是否包含人臉的二分類分類器

  • 一個回歸函數,預測一組參數,它們形成的邊界框能最好地框出輸入中的人臉

  為了訓練這樣的網絡,蘋果的開發人員們做了好幾種不同的實驗。比如,一種簡單的訓練方式就是建立一個數據集,其中包含大量固定大小的圖像塊,這些圖像塊的大小和模型允許的最小輸入大小相同;這樣,每個圖像塊在經過網絡之后都只得到一個輸出。訓練數據集是平衡到理想狀態的,也就是說一半的圖像塊里包含一張臉(正例),另一半圖像里不包含人臉(負例)。對于每一個正例,都會同步提供給模型這張臉的真實位置(x,y,w,h)。然后蘋果就以前述的兩條網絡功能為目標,訓練優化這個網絡。經過訓練后,網絡就可以預測圖像塊中是否包含有一張人臉;如果包含有人臉的話,它同時還會輸出圖像塊中人臉的位置坐標和大小。

圖 1. 一個用于人臉識別的修改過的深度卷積網絡架構

  由于網絡是全卷積的,它可以高效地處理任意大小的圖像,并且產生二維輸出映射。映射中的每個點都對應著輸入圖像中的一個小塊,并且包含了網絡對圖像塊中是否包含人臉、輸入中的人臉位置和大小的預測結果。

  有了這樣的網絡以后,就可以在它的基礎上構建相對標準的圖像處理流水線進行人臉檢測。這個流水線由一個多尺度的圖像金字塔、人臉檢測網絡和后處理模塊組成。這里,為了處理各種不同大小的圖像需要一個多尺度的圖像金字塔。人臉識別網絡在圖像金字塔的每一個尺寸下都會執行,每個尺寸都要選出候選的檢測結果。接下來后處理模型就會把不同大小的候選檢測結果組合起來,生成一個邊界框列表,對應著整個網絡對圖像中人臉預測的最終結果。

圖 2. 面部檢測工作流程

  這種做法開始有點接近能夠在設備上運行、而且能詳盡地掃描整張圖像的深度卷積網絡了。不過網絡的復雜度和大小仍然是運行時的性能瓶頸。克服這個困難意味著不僅要把網絡限制、簡化為一個簡單的拓撲結構,同時還要限制網絡中的層的數量、每個層中通道的數量、以及卷積層的卷積核大小。這種種限制就凸顯出了一個嚴重的問題:產生的預測結果讓人覺得可以接受的網絡結構必然非常復雜,多數時候要超過 20 層,而且有數個一個網絡中嵌套另一個網絡的模塊。把這樣的網絡用在前述的圖像掃描框架中可以說是完全不可行的了,性能表現和電量消耗都無法接受。實際上,這樣規模的網絡都沒辦法加載到移動設備的內存中去。下面蘋果的開發人員們就面臨了一個巨大的挑戰:如何訓練一個簡單、緊湊的網絡,讓它能夠模仿高度復雜的網絡的行為,達到可比擬的準確率,同時還能高效、節省資源地運行。

  蘋果的開發人員們決定利用一種新的方法,它有個非正式的稱呼是“老師-學生”訓練(雷鋒網 AI 科技評論注: FitNets: Hints for Thin Deep Nets)。這種方法帶來了一種新的機制,它可以訓練第二個又窄又深的網絡(“學生”),過程里要讓它的輸出和上文描述的大的、復雜的網絡(“老師”)高度吻合。學生網絡是由簡單的多次重復的 3x3 卷積和池化層結構組成的;網絡架構經過了高度訂制,讓它能夠最好地利用蘋果在 iPhone 中搭載的神經網絡推理引擎的計算能力。

  這樣,蘋果終于找到了一個用于人臉識別的深度神經網絡算法,而且是可以直接在設備上執行的。蘋果的開發人員們進行了數次訓練迭代,最終得到了一個具有足夠精度的網絡模型,可以支持蘋果規劃的相關應用。雖然這個網絡現在已經足夠準確、也能夠運行了,但是在把它真正部署到上百萬用戶的設備中去之前,還有許許多多的工作要做。

  優化圖像處理流水線

  在產品設計的抉擇中,深度學習相關的實際考量也產生了深深的烙印,因為蘋果想要做的是開發者也可以方便使用的軟件框架,蘋果把它稱作 Vision。有一件事很快就變得明顯起來,那就是只靠優秀的算法還不足以建立一個優秀的軟件框架。蘋果還需要建立一個經過高度優化的圖像處理流水線。

  蘋果并不希望讓開發者考慮圖像縮放、圖像轉換以及圖像來源之類的問題。不管是處理攝像頭實時捕捉的視頻流、處理視頻、還是處理磁盤以及網上的圖像,人臉檢測都應當達到好的工作效果。它應當在各種圖像表示和格式下都能工作。

  蘋果也很在意電量消耗和內存使用,尤其是在視頻流傳輸和圖像捕捉的時候。內存消耗量有可能造成一些問題,比如在拍攝 6400 萬的全景照片時就需要消耗很多內存。為了消除這些風險,蘋果用了一些技巧,比如區域降采樣編碼、自動拼貼,以便能夠在大圖像上執行計算機視覺任務,即便是在非典型的寬高比下。

  另一個挑戰是顏色空間的匹配。蘋果有許多種不同的色彩空間 API,但是他們并不想讓開發者們為了色彩空間的事情費腦筋。Vision 框架就會自動處理色彩匹配的問題,這樣也就進一步降低了在任何應用中使用計算機視覺算法的門檻。

  Vision 框架還通過中間過程的高效處理和復用進行了一些優化。人臉檢測、面部關鍵點檢測以及其它一些計算機識別任務都可以在同一張縮放后的中間過程圖像上工作。通過算法接口抽象、為待處理的圖像或者緩沖找到歸屬地,Vision 可以創建、緩存中間過程圖像,無需開發者做任何操作就可以提高多種計算機視覺任務執行時的性能表現。

  反過來說也有很大好處。從中心接口的角度來看,算法開發的方向可以是更高的復用程度或者更多的中間過程共享。Vision 框架承載著幾個不同的、獨立的計算機視覺算法。為了讓不同的算法更好地協同工作,實現算法時設計的分辨率和色彩空間也應當盡可能多地在不同的算法之間共享。

  為設備的本地執行做優化

  如果面部檢測 API 既不能在實時應用中使用、又不能在系統后臺進程中工作,那么即便它設計得便于使用,也不會讓用戶感受到任何樂趣。對用戶來說,識別照片庫中的人臉應當運行得非常流暢,或者一張照片拍好以后馬上就能對它進行分析。但同時他們也不希望電量快速下降,或者讓系統的性能表現慢得像龜爬。蘋果的移動設備都是同時要執行多個任務的設備,要么在后臺執行的計算機視覺功能也就不應當顯著影響系統其它功能的執行速度。

  蘋果的開發人員采取了幾個策略來最小化內存消耗和 GPU 使用。為了減小內存消耗,iOS 中通過分析計算圖的方法為神經網絡的中間層分配地址;這樣可以把多個層通過假名指向同一塊緩沖區。雖然這個過程是完全確定性的,但這個技巧既對性能沒有造成什么影響、也沒造成地址的碎片化,就減小了內存消耗。CPU 和 GPU 上也都可以使用這個方法。

  在 Vision 框架中,面部檢測器下需要運行 5 個網絡(如前文圖2,每個網絡對應一種圖像金字塔中的圖像尺寸)。這 5 個網絡有同樣的權重和參數,但是輸入的形狀、輸出以及中間層有所區別。為了進一步減小內存消耗,蘋果在這 5 個網絡共同形成的計算圖上開啟了運行時的內存優化算法,也顯著減小了內存消耗。另外,多個網絡可以復用同一組權重和參數緩沖區,也降低了內存需求。

  為了達到更快的運行速度,蘋果的開發人員們利用了這個全卷積網絡的本質特點:為了匹配輸入圖像的分辨率,所有的大小都是動態縮放的。相比于把圖像規格化到方形網格的像素點中,讓網絡大小匹配圖像的大小則可以大幅度減少總的操作數目,由于操作的拓撲邏輯并不會被尺寸縮放改變,剩余的分配器還有很高的性能,動態尺寸縮放并不會帶來內存分配相關的性能開銷。

  為了保證后臺運行深度神經網絡的時候用戶界面仍有足夠的響應性和流暢性,蘋果的開發人員把網絡中每一層的 GPU 運算任務不斷拆分,直到每個子任務消耗的時間都不超過千分之一秒。這樣,當用戶界面動畫這樣的高優先級任務出現的時候驅動程序就可以先切換給它們執行,減輕、甚至有時候完全杜絕了幀率下降的問題。

  以上的所有方法結合起來就共同保證了用戶可以盡情享用本地計算的、低延遲的、隱私保護的深度學習推理功能,同時無需知道他們的手機正在以每秒數百 GFlops 的速度運行著神經網絡。

  如何使用 Vision 框架

  蘋果是否真的達到了自己設定的“開發一個高性能、便于使用的面部檢測 API”目標呢?開發者可以自己嘗試一下 Vision 軟件,自己做個判斷。以下是入門方法:

  (完)

  via Apple Machine Learning Journal

华东15选5不开奖
电子游艺网 天津快乐10分预测 永利游戏app 11选5彩票中心 体育彩票怎么玩法介绍 小区开两元店赚钱吗 天津快乐十分软件 江苏十一选五的开奖 新乐清十三水官方网站 血战麻将秘籍