Skip to main content
Select a menu in the customizer

Android 爛裝置想跑人臉辨識1 – 糟糕的環境才能練習效能優化

爛裝置是啥?

Qualcomm Sanpdragon QM215  armv8a + 2GB Memory

A215是一款高通於 2019年發售的低效能CPU,主要針對低價智慧型手機和物聯網設備,優點是功耗較低,支援雙鏡頭,為 64bit 架構,但缺點是最多只支援 2GB ram,此外 A215 沒有NPU 但具有 GPU and CPU(1.3G)

以上是你身爲技術負責人於2023年拿到的一個裝置,要想想這是一個4年前發售的入門級處理器,但是身為專業的你不能馬上開始找老闆算帳,畢竟公司找你來是解決問題,而在新創公司,要花錢改硬體通常是老闆最不願意做的事情。重點是不管是啥爛裝置,只要應用的情況適當,就是可以用

應用場景-人臉辨識裝置且能通過 BCTC 增強級認證(辨識時間<1秒,辨識精度高達99.99%,活體安全認證(增強級),達到金融級支付標準)

Android 10 – 主要是因為 QM215 官方只針對 android 9 提供BSP,為了降低可能出現的非預期情況,然而代價就是 android 9 system service 跑起來就會消耗 1.3 GB memory used

雙鏡頭 RGB and TOF Streaming – 人臉辨識只靠單個 RGB 鏡頭是無法達到活體辨識 Liveness Check,所以必須利用TOF(Time of Flight),這部分有好幾種實作方式,但我們是採用IR,這部分我們等同於需要同時處理兩個鏡頭的資料流,這意味者 cpu 運算資源跟 memory 都會高速消耗.這部分經過測試約使用950mb

人臉辨識 AI Model – 在大部分的情況下,就算針對 EDGE device 去優化模型,也只是相對大型server上的差異,沒辦法真的壓到很低的運算資源去跑,經過多方評估採用 tensorflow lite, ncnn (想當年還用 caffe2),加上一個完整的人臉識別流程,並非一個單一模型就可以完成,以下是最基本的流程

Face Detect → Face Align → Liveness Detection → Image Quality Check → Feature Extraction → Feature Matching.

可能並非每個都需要ai infer,有些使用傳統影像處理方始就很夠了,但綜合評估下來約化使用 300 MB 的記憶體,以及大量的 CPU 運算資源

背景交代完畢了,接下我們馬上就發現

memory爆炸 -> 鏡頭 950 mb + ai model 280 mb + system 1300 mb > 2000 mb RAM

CPU 負荷幾乎隨時都在 90 Percent,而目前整個辨識流程跑完需要1.5s

節省記憶體+優化計算速度變成我們的第一項工作,針對記憶體可以先從系統下手,畢竟我們擁有整個 AOSP 的修改權利,這部分開始在下一章開始談