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