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