MAX78000應用:人臉辨識

摘要:MAX78000是一款超低功耗卷積神經網路(CNN)推理引擎,用於在物聯網的微小邊緣上運行人工智慧(AI)計算。然而,該設備可以執行許多複雜的網路,以實現關鍵和受歡迎的應用程式。本文介紹了一種在MAX78000上運行的人臉辨識(FaceID)方法,該模型採用Maxim在PyTorch上的開發流程構建,使用不同的開放數據集進行訓練,並部署在MAX78000評估板上。

 

介紹

 

40多年來,人臉辨識系統一直是研究的主題。機器學習的最新進展促成研究的急遽增加,和許多成功方法的出現。臉部辨識、識別科技在今天比過去任何時候都重要,因為它非常普遍,並且引入了如何捕獲和共用臉部信息的隱私問題。除了隱私問題外,這些應用程式的延遲和功耗對於許多行動或物聯網設備也很重要。

 

本應用筆記探討了使用MAX78000 CNN推理引擎在邊緣運行人臉辨識(FaceID),其延遲最小化,功耗優化。該應用面臨的挑戰是設計一種高性能的CNN架構,同時保持網路中的係數數量比許多尖端的深度人臉辨識網路(即DeepFace [1])少300倍。

 

卷積神經網路(CNN)非常有用,因為它們允許從輸入數據中學習位置和縮放獨立特徵。卷積核的長度一般較小,即3 x 3,7 x 7等,這提供了很大的記憶體效率。對這些網路的利益增加了,因為許多不同的研究表明,所提供的性能提高了,並且模型尺寸減小了。過去這種架構的缺點是計算負載較高,可能會產生高能耗和延遲。本研究通過MAX78000的獨特設計克服了這些問題。

 

本文簡要介紹MAX78000 CNN推理引擎,並提出一種開發模組的方法,將以識別可以放入晶片之臉孔資料。然後介紹所開發模型的合成,並解釋MAX78000評估板的應用軟體。

 

CNN推理引擎 – MAX78000

 

MAX78000 [2]是一款新型人工智慧(AI)微控制器,旨在使神經網路能夠以超低功耗執行,並導入物聯網的邊緣運算。該產品將最節能的AI處理與Maxim久經考驗的超低功耗微控制器相結合。基於硬體的CNN加速器使電池供電的應用程式能夠執行AI推理,同時僅消耗微焦耳的能量,以成為能源關鍵型應用的理想架構。MAX78000具有Arm® Cortex-M4®和浮點單元(FPU)CPU,可通過超低功耗深度神經網路加速器實現高效的系統控制。圖 1.MAX78000的架構。顯示了MAX78000的頂級架構。

圖 1.MAX78000的架構。

 

MAX78000評估板[3]提供了一個平臺,利用MAX78000的功能構建新一代AI器件。評估板具有板載硬體,如數字麥克風、串行埠、攝像頭模組支援和3.5英寸觸摸彩色薄膜晶體管(TFT)顯示幕。

 

MAX78000開發流程

 

yTorch或TensorFlow-Keras工具鏈可用於開發MAX78000的模型。該模型是使用一系列表示硬體的已定義子類創建的。一些操作(如池化或啟動)融合到 1D 或 2D 捲積層以及完全連接的層。還添加了捨入和削波以匹配硬體。該模型使用浮點權重和訓練數據進行訓練。權重可以在訓練期間(量化感知訓練)或訓練后(訓練後量化)進行量化。量化的結果可以在評估數據集上進行評估,以檢查由於權重量化而導致的精度下降。MAX78000頻率合成器工具(ai8xize)接受PyTorch檢查點或TensorFlow導出的ONNX檔作為輸入,以及YAML格式的模型描述。還向合成器提供輸入樣本數據檔(.npy 檔),以驗證硬體上的綜合模型。將此數據檔的推理結果與預合成模型的預期輸出進行比較。MAX78000頻率合成器自動生成C碼,可在MAX78000上編譯和執行。C 代碼包括應用程式程式設計介面 (API) 調用,用於將權重和提供的範例數據載入到硬體,對示例數據執行推理,並將分類結果與預期結果進行比較,作為通過/失敗的健全性測試。此生成的 C 代碼可用作創建自訂應用程式的範例。圖2顯示了MAX78000的整體開發流程。

圖 2.MAX78000的開發流程

 

面容ID模型開發方法

 

人臉辨識問題主要通過三個步驟解決:

  1. 人臉提取:檢測圖像中的人臉以提取僅包含一張人臉的矩形子圖像。
  2. 人臉對齊:確定子圖像中人臉的旋轉角度(3D),以通過仿射變換補償其效果。
  3. 人臉辨識:使用提取和對齊的子圖像識別人。

 

前兩個步驟有不同的方法。多任務級聯卷積神經網路 (MTCNN) [4] 解決了人臉檢測和對齊步驟。人臉辨識通常被研究為一個不同的問題,這是本次演示的重點。MAX78000評估板用於識別未裁剪的肖像人臉,每個人臉僅包含一張人臉。所採用的方法基於為每個臉部圖像學習簽名,即嵌入,其與另一個嵌入的距離可以測量臉部的相似性。預計同一人的臉之間的距離很小,而不同人的面孔之間的距離很遠。FaceNet [5]是為基於嵌入的人臉辨識方法開發的最流行的基於CNN的模型之一。三胞胎損失是其成功背後的關鍵。此損失函數採用三個輸入樣本:錨點、來自與錨點相同恆等式的正樣本和來自不同恆等式的負樣本。當錨點的距離接近正樣本而遠離負樣本時,三重態損耗函數給出低值(圖3)。

 

圖 3.三重損耗最小化錨點和正錨點之間的距離,並最大化錨點和負錨點之間的距離[2]。

 

然而,該型號有750萬個參數,對於MAX78000來說太大了。它還需要1.6G浮點運算,這使得該模型很難在許多移動或物聯網設備上運行。因此,設計了一種新的模型架構,參數小於450k,以適應MAX78000。採用網路知識蒸餾方法來開發FaceNet的這種更小的CNN模型,因為它是FaceID應用程式廣泛讚賞的神經網路。機器學習中的知識提煉是將知識從大模型轉移到小模型的過程[6]。大型模型比小型模型具有更高的知識容量。然而,容量可能沒有得到充分利用。因此,這裡的目的是將大網路的確切行為傳授給較小的網路。

 

圖 4.模型開發的方法。

 

圖 4.模型開發方法總結了如何利用預訓練的MTCNN和FaceNet模型來開發緊湊的FaceID模型AI85FaceIdNet。嵌入FaceNet模型被用作AI85FaceIdNet的目標。沒有中心損耗,三重損耗等,因為這些假設被FaceNet模型覆蓋。模型開發中使用的損耗是目標和預測嵌入之間的均方誤差(MSE),這也是定義人臉相似度的距離。

 

數據

 

模型的訓練是使用以下數據集完成的:

 

  1. VGGFace-2 [7]:大規模的人臉辨識數據集。
  2. YouTubeFaces [8]:一個臉部視頻資料庫,旨在研究無約束的人臉辨識問題。

根據在 Web 上找到的 15 位女性名人和 15 位男性名人(圖 5  和圖 6)中的每張圖像創建一個數據集,以測試模型。在本文檔的其餘部分,此數據集稱為 MaximCeleb。

圖 5.MaximCeleb數據集中的女性名人圖像。

圖 6.MaximCeleb數據集中的男性名人圖像。

 

對於數據集中的每個圖像,將隨機裁剪 120 x 160 x 3(寬 x 高 x 深)子圖像。通過預訓練的 MTCNN 模型在子圖像中檢測到並對齊的人臉被饋送到預訓練的 FaceNet 模型以創建嵌入。請注意,兩個重新訓練的模型都取自 [9]。因此,生成的嵌入的長度為512。最後,120 x 160 RGB臉部圖像與其擁有者一起存儲並嵌入以在訓練期間使用。新圖像中人臉的位置和方向各不相同。預計它將具有針對圖像中頭部的少量變換的強大模型。

 

美國有線電視新聞網模型培訓

 

MAX78000 FaceID模型AI85FaceIdNet由8個順序卷積塊組成。圖 7.AI85FaceIdNet網路結構顯示了CNN模型。某些層包括池化操作以減小輸入的大小。類似地,使用(5 x 3)核平均512 x 5 x 3大小的張量,在最後一層獲得512大小的嵌入。

 

圖 7.AI85FaceIdNet網路結構。

 

使用以下命令使用Maxim工具訓練模型:

 

train.py –epochs 100 –optimizer Adam –lr 0.001 –deterministic –compress schedule-faceid.yaml –model ai85faceidnet –dataset FaceID --batch-size 100 –device MAX78000 –regression

 

該腳本在訓練過程結束時創建模型的檢查點檔,該檔在驗證集上得分最高。然後,量化浮點權重,因為MAX78000是整數算術器件. The conversion is also trivial with Maxim tools using the following command:

 

./quantize.py   --device MAX78000 -v -c networks/faceid.yaml –scale 1.05

 

模型性能

使用包含30名名人(15名女性和15名男性)的面孔的MaximCeleb數據集分析了模型的性能。

 

對於女性和男性數據集,模型的性能分別評估了每個圖像的識別精度,方法是使用其自身嵌入到其餘89個圖像嵌入的距離。用於定義最近嵌入的距離度量和演算法也是應用程式中的演算法。

 

在此分析中,選擇 L2(歐幾里得)範數作為嵌入之間的距離。提取所有拍攝物件與給定圖像嵌入的平均距離,以確定最近的拍攝物件。然後,該演算法返回其嵌入在平均值上最接近給定嵌入的主體。表1顯示了MTCNN和FaceNet的組合以及MAX78000上運行的AI85FaceIdNet的性能。圖 8 和圖 9 顯示了每個數據集的混淆矩陣。

 

表 1. MaximCeleb女性和男性受試者的演示

 

 

Maximceleb Dataset

Female

Male

MTCNN+FACENET

AI85FACEID

MTCNN+FACENET

AI85FACEID

ACCURACY (%)

94.4

78.9

94.4

88.9

 

圖 8.(a) MTCNN+FaceNet (b) AI85FaceIdNet 模型的混淆矩陣,用於女性 MaximCeleb 數據集。

 

d2169465-8e24-48c3-b03d-7d7843547ddb.jpg

圖 8.(a) MTCNN+FaceNet (b) AI85FaceIdNet 模型的混淆矩陣,用於女性 MaximCeleb 數據集。

 

識別未知主題

 

所開發模型的接收器工作特性(ROC)曲線用於識別未知受試者。ROC曲線是一個圖形圖,說明瞭二元分類器系統在其判別閾值變化時的診斷能力[10]。上一節將人臉到主體的距離定義為人臉嵌入到為每個主體存儲的整個嵌入的平均 L2 距離。在確定其與人臉嵌入的距離最小的主體時做出決定。可以使用模型的 ROC 確定最小距離的閾值,因為每個圖像都被標識為資料庫中的主體之一。ROC 曲線是通過將真陽性 (TP) 速率與各種閾值下的假陽性 (FP) 速率繪製出來創建的。因此,當它在 ROC 曲線上移動時,閾值設置會發生變化,並且閾值可以根據所選性能來確定。30個受試者的Maxim Celebrity數據集用於生成ROC曲線,其中資料庫中僅假設15個女性(或男性)受試者。其餘的被確定為未知的受試者。正確分類的樣本會增加 TP 速率,而其他樣本會增加 FP 速率。圖 10 顯示了 AI85FaceId 模型的男性和女性數據集的 ROC 曲線。

 

461c3a31-2d0c-4ece-8d4e-f6268d930fa6.jpg

圖 10.AI85FaceIdNet的ROC曲線用於(a)女性和(b)男性MaximCeleb數據集。

 

有不同的方法可以確定最佳閾值。選擇 ROC 曲線上最接近該點的點 (TP = 1.0, FP = 0.0) 作為閾值(圖 10)。兩組的最佳值都非常接近 560。因此,FaceID 應用程式的未知主題閾值設置為 560。

美國有線電視新聞網模型合成

通過CNN模型訓練部分給出的步驟獲得的量化模型是使用Maxim工具中的python腳本為MAX78000合成的。此文稿生成 C 代碼,其中包括用於初始化 CNN 加速器、載入量化 CNN 權重、執行給定示例輸入範例的模型以及準備以下三個專案後從設備獲取模型輸出的函數:

  • Quantized PyTorch checkpoint file or TensorFlow model exported to ONNX format.
  • Network model YAML description.
  • A sample input with the expected result to include in the generated C code for verification.

執行以下文稿以產生合成代碼:

 

./ai8xize.py -e --verbose --top-level cnn -L --test-dir  --prefix faceid --checkpoint-file  --config-file networks/faceid.yaml --device MAX78000 --fifo --compact-data --mexpress --display-checkpoint --unload

 

準系統 C 代碼用作構建 FaceID 演示應用程式的基礎,以初始化設備、載入權重(內核)、推送範例輸入並獲取結果。

 

生成嵌入集

 

包含主題嵌入的頭檔embeddings.h將被更改,以創建自定義資料集以運行FaceID演示。db_gen資料夾中的 Python 腳本(generate_face_db.py)用於此目的。腳本的示例用法在 gen_db.sh 中給出。該文稿將存儲主題圖像的資料夾名稱作為參數。此資料夾必須包含每個主題的單獨子資料夾,並且這些子資料夾必須使用主題的名稱或識別元命名。圖 11 顯示了範例 db 資料夾結構。主題的圖像放置在關聯的資料夾中。

圖 11.用於生成自定義嵌入集的範例資料庫資料夾結構。

 

使用gen_db.sh和generate_face_db.py中的參數進行調用會自動生成 embeddings.h,其中包含 db 資料夾中的圖像和主題。更改檔后,下一個生成將成為具有更新的嵌入清單的自定義版本。

$ ./gen_db.sh

使用MTCNN進行人臉辨識,用檢測到的人臉裁剪120 x 160幀,並在generate_face_db.py中進行照明校正。圖像必須大於 120 x 160,並且只能包含一個面向相機的拍攝物件。建議每個受試者至少拍攝五張圖像,以提高識別準確性。

 

FaceID演示平臺

 

人臉辨識在MAX78000評估板上使用FaceID固件進行演示。評估板(圖12.MAX78000上的FaceID應用程式的螢幕截圖以及圖11所示的主題資料庫)由一個TFT螢幕和一個視頻圖形陣列(VGA)攝像頭組成,兩者都向上定向以在自拍模式下工作。演示應用程式持續運行,併為每個幀報告一個預測。如果提取的嵌入與資料庫中主題的接近程度不超過預定義的閾值,則報告未知類。閾值按照前幾節中所述獲得,並且可以在embedding_process.h中更新(變數thresh_for_unknown_subject)。可以使用L1(曼哈頓)距離代替L2範數,因為它需要較少的計算。但必須相應地重複未知閾值確定步驟。

圖 12.MAX78000上FaceID應用程式的螢幕截圖,主題資料庫如圖11所示。

 

MAX78000評估板的演示以縱向位置運行,因為它更適合拍攝和顯示自拍照。面必須位於藍色矩形中,因為此部分是要裁剪以進行處理的區域的中心。從原始捕獲中裁剪三張 120 x 160 圖像,具有不同的 X 和 Y 偏移量。這些被饋送到CNN模型,以提高準確性作為增強方法。在報告預測之前,通過向CNN發送多個覆蓋臉部的圖像來測試預測的一致性。同樣,還測試了連續時間樣本中預測的一致性。這可能會給識別速度帶來一些滯後,但會增加 應用程式的穩健性。圖 13 顯示了應用程式的流程圖。

圖 13.MAX78000上FaceID演示應用的流程。

 

結論

 

本應用筆記演示了MAX78000中人臉辨識模型的實現,以及該模型在超低功耗MAX78000平臺上的部署,適用於資源受限的邊緣或物聯網應用。本應用採用基於知識蒸餾的模型開發方法,以滿足MAX78000的要求。因此,本文檔也可以作為將高性能大型網路遷移到邊緣設備的指南。應用筆記介紹了模型的性能分析,以及綜合模型以部署MAX78000所需的步驟。

 

引用

 

[1] Y. Taigman, M. Yang, M. Ranzato and L. Wolf, “DeepFace: Close the Gap to Human-level Performance in Face Verification”, 2014 IEEE Conference on Computer Vision and Pattern Recognition, Columbus, OH, 2014, pp. 1701-1708, doi: 10.1109/CVPR.2014.220.[2] MAX78000數據資料

[3] MAX78000評估板數據資料

[4] 張凱鵬等:“使用多任務級聯卷積網络進行聯合人臉檢測和對準”。IEEE信號處理快報 23.10 (2016):1499–1503。[5]施羅夫、弗洛裡安、德米特裡·卡列尼琴科和詹姆斯·菲爾賓。“FaceNet:人臉辨識和聚類的統一嵌入。2015 IEEE計算機視覺和模式識別會議(CVPR)(2015

[6] https://en.wikipedia.org/wiki/Knowledge_distillation

[7] 曹志強,沈磊,謝文,O.M.派克希,A.齊瑟曼VGGFace2:跨姿勢和年齡識別人臉的數據集自動人臉和手勢識別國際會議,2018

[8] https://www.cs.tau.ac.il/~wolf/ytfaces/

[9] https://github.com/timesler/facenet-pytorch

[10] https://en.wikipedia.org/wiki/Receiver_operating_characteristic

 

原文網站: https://www.maximintegrated.com/en/design/technical-documents/app-notes/7/7364.html