目標檢測技術在Android中的應用
作者 | 陳磊,單位:中國移動智慧家庭運營中心
Labs 導讀
無論在車水馬龍中搜尋罪犯,還是通過刷臉進出小區門禁,生活中的點點滴滴都離不開目標檢測技術的支持。目標檢測任務旨在確定圖像中是否包含有給定類別的對象實例(如人、汽車、貓、杯子等),如果所監控的對象存在,則返回每個對象實例在攝像頭視野中的空間位置與范圍。
Part 01 目標檢測簡介
圖1展示了一個典型的目標檢測場景。近年來,由于深度學習技術能夠使計算模型從數據中獲取極其復雜、抽象的特征表示,因此為目標檢測任務的發展帶來了突破。依照檢測流程的差異,目前流行的檢測算法可以被分為兩階段式和單階段式方法。以R-CNN、SPP-Net、OHEM等為代表的兩階段模型將檢測任務分為兩部分工作,一個模型用于提取對象區域,第二個模型用于目標分類和進一步細化對象的定位,這種識別方法相對較慢,但檢測精度非常高。而單階段式方法(YOLO、SSD等)通過直接預測圖像的對象邊界識別物品,具有相對模型架構相對簡單、運算較為快速的優勢。
圖1 在獲取的圖像中提取區域并識別物體類型
Part 02 Android端進行目標檢測推理
現有面向企業用戶的目標檢測方案多數依賴于本地或云端的高性能GPU提供模型參數訓練和推理的支持。出于隱私安全需求和成本需求的多重考量,基于移動端設備或IOT設備進行離線推理的應用需求方興未艾。由于家庭接入終端等邊緣設備在存儲和計算能力方面的算力資源非常有限,Google針對這一市場發布了輕量級、快速和跨平臺的機器學習框架TensorFlow Lite(TFLite)。作為TensorFlow的一部分,TFLite支持Android、iOS、嵌入式Linux、MCU等多種平臺,對開發人員非常友好,極大加速了設備端機器學習(ODML)的開發。圖2描述了使用TFLite在移動端部署目標檢測模型的流程,下面對此進行簡要介紹。
圖2 典型的TFLite應用開發工作流
1.選擇和訓練模型:這一過程和傳統的機器學習過程一致,開發者們選用基于Keras或TensorFlow支持庫,構建能夠處理實際任務的模型,并基于訓練/測試數據集對模型參數進行優化與分析。以目標檢測任務為例,在計算機上訓練一個識別車輛類型的模型需要為每種車型提供數千張訓練圖片以及數小時乃至數天的訓練時間。
本文采用了MobileNet-SSD算法來演示目標檢測的模型訓練過程。該算法是面向移動端的輕量級深度學習模型,相比原有的SSD算法,MobileNet-SSD通過將SSD方法中所涉及的部分標準卷積計算替換為由一個深度卷積和逐點卷積共同構成的MoblieNet卷積層,在性能類似的同時降低了計算量。從圖3中可以認識到,若將K*K尺寸的標準卷積核替換為MobileNet卷積,模型的計算復雜度會降低為前者的。
圖3 標準卷積與MobileNet提出的深度可分離卷積的計算過程對比
2.使用轉換器轉換模型:將龐大的計算過程遷移到移動端所需的時間和成本是難以想象的。因此,TFLite繼承了第1步中已在大量相關數據上訓練過的模型的權重設置,用以完成相類似的任務,這一過程需要使用TFLite轉換器完成。由于在轉換過程中會對原始模型進行壓縮,用戶可以選擇通過權衡模型的執行速度來控制文件的大小。常用的TFLite轉換過程主要涉及下列三種方法:
- tf.lite.TFLiteConverter.from_keras_model(),將實例化的Keras模型轉換為TFlite平面緩沖區文件(.tflite)
- tf.lite.TFLiteConverter.from_saved_model(),轉換TensorFlow所存儲的模型文件為tflite文件
- tf.lite.TFLiteConverter.from_concrete_functions(),轉換具體的函數為tflite文件
實際的轉換過程非常簡單,下面以TensorFlow的savedModel文件為例進行轉換演示:
3.使用TFLite解釋器進行模型推理:在將模型遷移到相應的邊緣設備中后,TFLite解釋器(TensorFlow Interpreter)利用設備的CPU/GPU來執行模型,在某些受支持的Android設備中,還能夠使用神經網絡API對推斷過程進行加速。基于已導入的tflite文件,可以方便地使用解釋器加載模型并讓用戶運行以輸出推斷結果。
用戶若想對目標圖像進行分類,只需要從相機中獲取圖像,并基于現有的Interpeter實例調用run方法或runForMultipleInputsOutputs方法(用于圖像組),并傳入圖像數據(組)和輸出標簽數組作為參數即可,返回的值即為圖像分類為各個物體的概率,實踐結果如圖4所示。
圖4 利用TFLite在Android端實現的目標檢測應用
Part 03 其他目標檢測方法
除了MobileNet-SSD算法外,還有眾多的目標檢測方法可供使用,我們在本節對此進行一個簡單的介紹。
R-CNN: R-CNN于2014年被提出,該模型利用selective search方法從待檢測圖像中提取候選圖像,然后將候選區轉換為統一的大小;再利用卷積神經網絡計算各個區域的特征;最后經過全連接層并使用SVM方法對特征進行分類并輸出多目標檢測結果。
SPP-Net:該方法提出使用空間金字塔池化層,轉化任意大小的候選圖像并將信息輸入全連接層,以提取固定長度的特征向量。SPP-Net能夠從各種分辨率的圖像中獲得信息,擁有更強的泛化性能,但是固定的卷積層限制了網絡的準確性。
Fast R-CNN:該模型直接對整張圖像進行卷積計算以加快訓練速度并節省緩存特征的時間,減少了對各候選區分別提取特征所帶來的重復計算。此外,Fast R-CNN改進了損失函數,通過聯合訓練分類器和邊框提取器,優化了模型的性能表現。
Part 04 小結與展望
作為圖像理解和計算機視覺的基石,目標檢測方法是解決復雜的計算機視覺任務的基礎,并在圖像分割、場景理解、目標跟蹤、自動字幕和活動識別等任務中得到了廣泛的應用。目前,隨著消費電子產業的發展,自動駕駛、無人機避障、智能視頻監控等場景在生活中也越發常見,而這些技術的實現都需要低時延、高準確率的目標檢測方法作為支撐,這也給計算機視覺和嵌入式的相關從業者提出了更高挑戰。