0
本文作者: AI研習(xí)社-譯站 | 2019-02-15 10:23 |
本文為 AI 研習(xí)社編譯的技術(shù)博客,原標(biāo)題 :
Object detection with Raspberry Pi and Python
作者 | Quantum
翻譯 | leogle97、謝玄xx 校對 | 鄧普斯?杰弗
審核 | 醬番梨 整理 | Pita
原文鏈接:
https://medium.com/@Quantum_inc/object-detection-with-raspberry-pi-and-python-bc6b3a1d4972
今天我們將討論如何建立一個簡單、便宜的移動目標(biāo)探測器。
這項(xiàng)研究的目的是確定在一個便宜的移動設(shè)備上的對象檢測模型是否可以用于現(xiàn)實(shí)世界的任務(wù)。
作為一個移動平臺,我們使用的是樹莓派3B。樹莓派是一款售價35美元的單板機(jī),這意味著微處理器、內(nèi)存、無線收音機(jī)和端口都在一塊電路板上。它是一臺Linux計算機(jī),所以從技術(shù)上講,它可以做Linux計算機(jī)能做的一切事情,比如運(yùn)行電子郵件和網(wǎng)絡(luò)服務(wù)器,充當(dāng)網(wǎng)絡(luò)存儲,或者用于對象檢測。與大多數(shù)具有內(nèi)置硬盤或SSD存儲選項(xiàng)的計算機(jī)不同,樹莓派的操作系統(tǒng)安裝在microSD卡上,而microSD卡是存放所有文件的地方,因?yàn)檫@塊板不包含任何內(nèi)置存儲(不過,你可以添加USB硬盤驅(qū)動器)。通過交換microSD卡,這種結(jié)構(gòu)可以方便地擴(kuò)展存儲空間并在不同操作系統(tǒng)之間切換。
(圖)樹莓派3
作為目標(biāo)探測器的硬件部分,我們使用了樹莓派3B和樹莓派助學(xué)金V2。我們需要安裝Raspbian Stretch 9,因?yàn)樵谶\(yùn)行Raspbian 9時,TensorFlow 1.9正式支持樹莓派。我們還需要一個至少16GB內(nèi)存的microSD卡,因?yàn)闃?gòu)建OpenCV可能是一個非常消耗內(nèi)存的過程。
(圖)樹莓派及照相機(jī)模塊V2
目標(biāo)檢測模型
針對本實(shí)驗(yàn),我們選擇了以下型號:小型YOLO和SSD MobileNet lite。
YOLO(You Only Look Once)是在Darknet上實(shí)現(xiàn)的最先進(jìn)的實(shí)時物體檢測系統(tǒng)。先前的檢測系統(tǒng)是重新利用分類器或定位器來執(zhí)行檢測的,而這些檢測系統(tǒng)將模型應(yīng)用于多位置和規(guī)模的圖像。圖像的高評分區(qū)域被視為檢測結(jié)果。與基于分類器的系統(tǒng)相比,該模型具備幾大優(yōu)點(diǎn)。這個模型在測試時查看整個圖像,因此它的預(yù)測是通過圖像中的全局背景來實(shí)現(xiàn)的。除此之外,不像需要數(shù)千個單個圖像才可進(jìn)行預(yù)測的R-CNN系統(tǒng)一樣,它也可以使用單一網(wǎng)絡(luò)的評估進(jìn)行預(yù)測。
為了執(zhí)行檢測,圖像就劃分為SxS網(wǎng)格(如左圖所示)。每個單元將預(yù)測N個可能的“邊界框”以及它們中的每一個的確定性(或概率)水平(圖像在中心),這意味著需要計算SxSxN個正方形。絕大多數(shù)這些方形的預(yù)測率都非常低,這就是算法持續(xù)刪除預(yù)測率低于特定最小閾值方塊的原因。剩余的盒子通過“非極大值抑制”來消除可能的重復(fù)檢測,因此只留下最精確的方塊(如右圖所示)。
SSD(Single Shot MultiBox Detector)是一種流行的物體檢測算法。SSD通過消除對區(qū)域生成網(wǎng)絡(luò)的需求來加速該過程。為了防止精度下降,SSD采用了包括多尺度功能和默認(rèn)框在內(nèi)的一些改進(jìn)方法。這些改進(jìn)使SSD能夠以較低分辨率的圖像匹配更快的R-CNN精度,從而進(jìn)一步提高檢測速度。帶有MobileNet的SSD是一種針對移動設(shè)備推理進(jìn)行了優(yōu)化的對象檢測模型。
這里的關(guān)鍵思想是采用單個網(wǎng)絡(luò)(速度)而不需要區(qū)域提議。相反,它使用不同的邊界框,然后作為預(yù)測的一部分調(diào)整邊界框。網(wǎng)絡(luò)的最后幾層中的每一層都負(fù)責(zé)預(yù)測逐漸變小的邊界框,并且最終預(yù)測是所有這些預(yù)測的并集,從而實(shí)現(xiàn)不同的邊界框預(yù)測。
SSD - (a) 含有GT框的圖像 (b)8*8特征圖 (c)4*4特征圖
對于對象檢測,我們使用OpencCV,Tensorflow Object Detection API和Darkflow。 TensorFlow的Object Detection API是一個非常強(qiáng)大的工具,任何人(特別是那些沒有真正的機(jī)器學(xué)習(xí)背景的人)都可以快速構(gòu)建和部署功能強(qiáng)大的圖像識別軟件。API為終端用戶提供培訓(xùn)和在OCO數(shù)據(jù)集中運(yùn)行檢測模型和模型的儀器,如Faster R-CNN,SSD Mobile等。由于YOLO是在基于C ++的深度學(xué)習(xí)框架上實(shí)現(xiàn)的,所以我們使用Darknet的TensorFlow就翻譯為為Darkflow。
環(huán)境設(shè)置
接下來,我們將設(shè)置環(huán)境。首先,在具有所有依賴項(xiàng)的Raspberry Pi 3上安裝OpenCV。你可以在下面這個網(wǎng)站中找到一個不錯的安裝途徑:
https://www.pyimagesearch.com/2017/09/04/raspbian-stretch-install-opencv-3-python-on-your-raspberry-pi/。
下一步是設(shè)置并啟用相機(jī)。我們還需要安裝一個名為picamera [array]的python模塊。該模塊提供了一個界面,用于將來自攝像機(jī)的圖像表示為NumPy陣列。下面的網(wǎng)站是另一個不錯的安裝指南:
https://www.pyimagesearch.com/2015/03/30/accessing-the-raspberry-pi-camera-with-opencv-and-python/。
如上所述,TF 1.9+全面支持Raspberry Pi,但這并不意味著我們可以僅使用pip來進(jìn)行安裝。Pip僅能在0.11.0版本下安裝,不滿足目標(biāo)檢測API的要求。我們應(yīng)該從源代碼構(gòu)建Tensorflow,但由于處理器速度慢且RAM有限,因此不建議在Raspberry Pi上構(gòu)建。這需要很多時間。在更強(qiáng)大的主機(jī)上構(gòu)建TensorFlow .whl包更容易,然后將其安裝在Raspberry上。我們可以使用官方安裝指南來構(gòu)建軟件包或下載已經(jīng)構(gòu)建的軟件包。之后,將wheel文件復(fù)制到Raspberry Pi并使用pip安裝它。
接下來,我們需要為YOLO配置環(huán)境。 YOLO在基于C的深度學(xué)習(xí)框架中實(shí)現(xiàn),稱為Darknet。為了避免在Raspberry Pi上構(gòu)建Darknet,我們使用Darkflow作為Darknet轉(zhuǎn)換來運(yùn)行TensorFlow(這里is聽譯有誤)。 Darkflow易于安裝,因?yàn)槠渚哂泄俜酱鎯斓陌惭b教程。此外,我們使用了來自Darkflow
(https://drive.google.com/drive/folders/0B1tW_VtY7onidEwyQ2FtQVplWEU)作者的YOLO預(yù)訓(xùn)練權(quán)重tiny-yolo-voc.weights 和來自Darkflow源存儲庫的網(wǎng)絡(luò)配置tiny-yolo-voc.cfg。
現(xiàn)在,我們需要從TensorFlow檢測模型表下載MobileNet SSDLite模型。所謂“模型表”,是Google的預(yù)訓(xùn)練對象檢測模型集合,具有不同級別的處理速度和準(zhǔn)確性。 Raspberry Pi具有弱處理器(weak聽譯有誤)和有限的RAM,因此我們需要使用處理能力較低的模型。盡管該模型運(yùn)行得更快,但它的精確度較低。我們嘗試使用SSD MobileNet模型但是在加載模型圖時它會導(dǎo)致內(nèi)存分配異常,而Raspberry Pi并沒有為此任務(wù)提供所需的內(nèi)存量。然后,下載SSDLite-MobileNet模型并將其解壓縮。我們需要唯一的frozen_inference_graph.pb文件。
model ZOO
部分代碼如下
首先,為探測器定義一個抽象類別:
接下來,實(shí)現(xiàn)SSD和YOLO模型界面。對于SSD,我們使用來自目標(biāo)檢測API的代碼。而YOLO對象檢測器只是Darkflow TFNet類的包裝。
現(xiàn)在我們實(shí)現(xiàn)一個檢測腳本。首先初始化camera:
接下來,從stream中獲取圖像并對其進(jìn)行檢測。對結(jié)果可視化如下:
總結(jié)
我們運(yùn)行了兩個模型并得到了這些結(jié)果:
- YOLO tiny - 0.32 FPS;
- SSD MobileNet Light - 1.07 FPS。
因此,結(jié)合以上結(jié)果,我們可以得出結(jié)論——我們可以使用帶有SSD MobileNet的移動探測器進(jìn)行真實(shí)的簡單行人跟蹤,或者用于檢測草坪上的貓的房屋安全系統(tǒng)?;蛘叱叽绾凸β适褂酶鼮殛P(guān)鍵的情況(1 FPS就足夠了)。
此外,我們嘗試使用MXNet網(wǎng)絡(luò),但在模塊導(dǎo)入期間,我們遇到了../libmxnet.soon Raspberry Pi問題。
下方為可視化結(jié)果:
該文章最早于2018年11月26日在www.quantumobile.com上發(fā)布。
想要繼續(xù)查看該篇文章相關(guān)鏈接和參考文獻(xiàn)?
長按鏈接點(diǎn)擊打開或點(diǎn)擊【使用樹莓派和Python實(shí)現(xiàn)目標(biāo)檢測】:
https://ai.yanxishe.com/page/TextTranslation/1384
AI研習(xí)社每日更新精彩內(nèi)容,觀看更多精彩內(nèi)容:雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)
等你來譯:
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。