目標(biāo)檢測技術(shù)在Android中的應(yīng)用
作者 | 陳磊,單位:中國移動智慧家庭運營中心
Labs 導(dǎo)讀
無論在車水馬龍中搜尋罪犯,還是通過刷臉進出小區(qū)門禁,生活中的點點滴滴都離不開目標(biāo)檢測技術(shù)的支持。目標(biāo)檢測任務(wù)旨在確定圖像中是否包含有給定類別的對象實例(如人、汽車、貓、杯子等),如果所監(jiān)控的對象存在,則返回每個對象實例在攝像頭視野中的空間位置與范圍。
Part 01 目標(biāo)檢測簡介
圖1展示了一個典型的目標(biāo)檢測場景。近年來,由于深度學(xué)習(xí)技術(shù)能夠使計算模型從數(shù)據(jù)中獲取極其復(fù)雜、抽象的特征表示,因此為目標(biāo)檢測任務(wù)的發(fā)展帶來了突破。依照檢測流程的差異,目前流行的檢測算法可以被分為兩階段式和單階段式方法。以R-CNN、SPP-Net、OHEM等為代表的兩階段模型將檢測任務(wù)分為兩部分工作,一個模型用于提取對象區(qū)域,第二個模型用于目標(biāo)分類和進一步細化對象的定位,這種識別方法相對較慢,但檢測精度非常高。而單階段式方法(YOLO、SSD等)通過直接預(yù)測圖像的對象邊界識別物品,具有相對模型架構(gòu)相對簡單、運算較為快速的優(yōu)勢。

圖1 在獲取的圖像中提取區(qū)域并識別物體類型
Part 02 Android端進行目標(biāo)檢測推理
現(xiàn)有面向企業(yè)用戶的目標(biāo)檢測方案多數(shù)依賴于本地或云端的高性能GPU提供模型參數(shù)訓(xùn)練和推理的支持。出于隱私安全需求和成本需求的多重考量,基于移動端設(shè)備或IOT設(shè)備進行離線推理的應(yīng)用需求方興未艾。由于家庭接入終端等邊緣設(shè)備在存儲和計算能力方面的算力資源非常有限,Google針對這一市場發(fā)布了輕量級、快速和跨平臺的機器學(xué)習(xí)框架TensorFlow Lite(TFLite)。作為TensorFlow的一部分,TFLite支持Android、iOS、嵌入式Linux、MCU等多種平臺,對開發(fā)人員非常友好,極大加速了設(shè)備端機器學(xué)習(xí)(ODML)的開發(fā)。圖2描述了使用TFLite在移動端部署目標(biāo)檢測模型的流程,下面對此進行簡要介紹。

圖2 典型的TFLite應(yīng)用開發(fā)工作流
1.選擇和訓(xùn)練模型:這一過程和傳統(tǒng)的機器學(xué)習(xí)過程一致,開發(fā)者們選用基于Keras或TensorFlow支持庫,構(gòu)建能夠處理實際任務(wù)的模型,并基于訓(xùn)練/測試數(shù)據(jù)集對模型參數(shù)進行優(yōu)化與分析。以目標(biāo)檢測任務(wù)為例,在計算機上訓(xùn)練一個識別車輛類型的模型需要為每種車型提供數(shù)千張訓(xùn)練圖片以及數(shù)小時乃至數(shù)天的訓(xùn)練時間。
本文采用了MobileNet-SSD算法來演示目標(biāo)檢測的模型訓(xùn)練過程。該算法是面向移動端的輕量級深度學(xué)習(xí)模型,相比原有的SSD算法,MobileNet-SSD通過將SSD方法中所涉及的部分標(biāo)準卷積計算替換為由一個深度卷積和逐點卷積共同構(gòu)成的MoblieNet卷積層,在性能類似的同時降低了計算量。從圖3中可以認識到,若將K*K尺寸的標(biāo)準卷積核替換為MobileNet卷積,模型的計算復(fù)雜度會降低為前者的
。

圖3 標(biāo)準卷積與MobileNet提出的深度可分離卷積的計算過程對比
2.使用轉(zhuǎn)換器轉(zhuǎn)換模型:將龐大的計算過程遷移到移動端所需的時間和成本是難以想象的。因此,TFLite繼承了第1步中已在大量相關(guān)數(shù)據(jù)上訓(xùn)練過的模型的權(quán)重設(shè)置,用以完成相類似的任務(wù),這一過程需要使用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解釋器進行模型推理:在將模型遷移到相應(yīng)的邊緣設(shè)備中后,TFLite解釋器(TensorFlow Interpreter)利用設(shè)備的CPU/GPU來執(zhí)行模型,在某些受支持的Android設(shè)備中,還能夠使用神經(jīng)網(wǎng)絡(luò)API對推斷過程進行加速?;谝褜?dǎo)入的tflite文件,可以方便地使用解釋器加載模型并讓用戶運行以輸出推斷結(jié)果。
用戶若想對目標(biāo)圖像進行分類,只需要從相機中獲取圖像,并基于現(xiàn)有的Interpeter實例調(diào)用run方法或runForMultipleInputsOutputs方法(用于圖像組),并傳入圖像數(shù)據(jù)(組)和輸出標(biāo)簽數(shù)組作為參數(shù)即可,返回的值即為圖像分類為各個物體的概率,實踐結(jié)果如圖4所示。

圖4 利用TFLite在Android端實現(xiàn)的目標(biāo)檢測應(yīng)用
Part 03 其他目標(biāo)檢測方法
除了MobileNet-SSD算法外,還有眾多的目標(biāo)檢測方法可供使用,我們在本節(jié)對此進行一個簡單的介紹。
R-CNN: R-CNN于2014年被提出,該模型利用selective search方法從待檢測圖像中提取候選圖像,然后將候選區(qū)轉(zhuǎn)換為統(tǒng)一的大?。辉倮镁矸e神經(jīng)網(wǎng)絡(luò)計算各個區(qū)域的特征;最后經(jīng)過全連接層并使用SVM方法對特征進行分類并輸出多目標(biāo)檢測結(jié)果。
SPP-Net:該方法提出使用空間金字塔池化層,轉(zhuǎn)化任意大小的候選圖像并將信息輸入全連接層,以提取固定長度的特征向量。SPP-Net能夠從各種分辨率的圖像中獲得信息,擁有更強的泛化性能,但是固定的卷積層限制了網(wǎng)絡(luò)的準確性。
Fast R-CNN:該模型直接對整張圖像進行卷積計算以加快訓(xùn)練速度并節(jié)省緩存特征的時間,減少了對各候選區(qū)分別提取特征所帶來的重復(fù)計算。此外,F(xiàn)ast R-CNN改進了損失函數(shù),通過聯(lián)合訓(xùn)練分類器和邊框提取器,優(yōu)化了模型的性能表現(xiàn)。
Part 04 小結(jié)與展望
作為圖像理解和計算機視覺的基石,目標(biāo)檢測方法是解決復(fù)雜的計算機視覺任務(wù)的基礎(chǔ),并在圖像分割、場景理解、目標(biāo)跟蹤、自動字幕和活動識別等任務(wù)中得到了廣泛的應(yīng)用。目前,隨著消費電子產(chǎn)業(yè)的發(fā)展,自動駕駛、無人機避障、智能視頻監(jiān)控等場景在生活中也越發(fā)常見,而這些技術(shù)的實現(xiàn)都需要低時延、高準確率的目標(biāo)檢測方法作為支撐,這也給計算機視覺和嵌入式的相關(guān)從業(yè)者提出了更高挑戰(zhàn)。


























