1
本文作者: AI研習(xí)社-譯站 | 2018-07-27 10:46 |
雷鋒網(wǎng)按:本文為雷鋒字幕組編譯的技術(shù)博客,原標(biāo)題 Detecting People in Real-time Using Deep Learning,作者為 Schuman Zhang。
翻譯 | 京鵬 王飛 整理 | 余杭 凡江
實(shí)時(shí)對(duì)象檢測(cè)是一個(gè)非常有趣的話題。 我們應(yīng)如何可靠地檢測(cè)視頻輸入中的人和其他現(xiàn)實(shí)生活中的物體? 最近我設(shè)法構(gòu)建了一個(gè)非常簡(jiǎn)單的應(yīng)用程序,只需連接到用戶的電腦網(wǎng)絡(luò)攝像頭就可自動(dòng)檢測(cè)對(duì)象。 我想與大家分享一下我是如何構(gòu)建這個(gè)應(yīng)用程序以及我在此過(guò)程中遇到的一些有趣的問(wèn)題和挑戰(zhàn)。
項(xiàng)目的源代碼可以在這里找到(https://github.com/schumanzhang/object_detection_real_time )。
對(duì)象檢測(cè)是計(jì)算機(jī)視覺(jué)領(lǐng)域非?;钴S的研究課題。 在圖像中檢測(cè)和定位對(duì)象(可理解為在對(duì)象周圍放置邊界框)最有效的方法是使用深度學(xué)習(xí)技術(shù)。有幾種特意為此目的設(shè)計(jì)的神經(jīng)網(wǎng)絡(luò)架構(gòu),例如 R-CNN, 快速 R-CNN,單次檢測(cè)(SSD)和 YOLO(You Only Look Once)。
Tensorflow 對(duì)象檢測(cè)模型
你可以在 tensorflow 庫(kù)中輕松找到上述神經(jīng)網(wǎng)絡(luò)架構(gòu)的預(yù)訓(xùn)練模型。它們統(tǒng)稱為 tensorflow 檢測(cè)模型集合。這些預(yù)訓(xùn)練模型在 COCO 數(shù)據(jù)集上進(jìn)行訓(xùn)練(https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md),包含總共90類標(biāo)簽(現(xiàn)實(shí)世界的對(duì)象,如人,貓和狗等)。在這個(gè)簡(jiǎn)單的應(yīng)用程序中,我們將使用被稱為 mobilenet 的單次檢測(cè)方法。這種架構(gòu)更緊湊并可以獲得額外的速度提升,這對(duì)分析每秒30-50幀圖像來(lái)說(shuō)很重要。
我不會(huì)詳細(xì)介紹這些神經(jīng)網(wǎng)絡(luò)如何工作(這是另一個(gè)獨(dú)立而有趣的話題)。 在我們的應(yīng)用程序中,我們的重點(diǎn)是檢測(cè)人員,我們正試圖回答房間里是否有人的問(wèn)題,如果是,有多少人? 但它也應(yīng)該能檢測(cè)多達(dá)90個(gè)現(xiàn)實(shí)世界的對(duì)象類別,包括手機(jī),書籍,筆記本電腦等普通物體。理論上,我們可以使用遷移學(xué)習(xí)方法來(lái)重新訓(xùn)練這些神經(jīng)網(wǎng)絡(luò)架構(gòu)的最后幾層,以便檢測(cè)更多種類的物體,但是這需要額外的訓(xùn)練數(shù)據(jù),以及大量的計(jì)算能力和時(shí)間。
簡(jiǎn)單來(lái)說(shuō),我們的視頻流分析將使用 tensorflow,open-cv 和 Python 檢測(cè)房間中的人員。
構(gòu)建對(duì)象檢測(cè)應(yīng)用程序
該應(yīng)用程序的整體流程如下:
我們將使用 open-cv Python 庫(kù)從筆記本電腦的網(wǎng)絡(luò)攝像頭中讀取幀數(shù)據(jù)。這將通過(guò) open-cv 中的 VideoCapture 函數(shù)完成。
然后我們將這些幀傳遞到 mobilenet ssd 模型中以檢測(cè)對(duì)象。置信水平高于0.5的任何檢測(cè)都將被返回并繪制到幀圖像中。
任何檢測(cè)到的對(duì)象都將通過(guò)可視化模塊,在圖像中檢測(cè)到的對(duì)象周圍放置彩色邊界框。
我們還添加了一個(gè)跟蹤模塊,用于顯示房間是否為空以及房間內(nèi)的人數(shù)。這些數(shù)據(jù)將被存儲(chǔ)在單獨(dú)的.csv 文件中。
處理后的幀數(shù)據(jù)回傳后,我們可以使用 open-cv 中的 imshow 函數(shù)向用戶顯示帶邊界框的幀圖像。
最后,視頻流的輸出將以每秒20幀的速率寫入單獨(dú)的.mp4 文件中,以便后期可以欣賞我們的工作 :)
在上面的代碼中,'while' 循環(huán)用于從網(wǎng)絡(luò)攝像頭讀取幀數(shù)據(jù),之后將未處理的幀數(shù)據(jù)放入輸入隊(duì)列以傳遞給我們的深度學(xué)習(xí)模型。 一旦我們得到 tensorflow 的預(yù)測(cè)結(jié)果,這些預(yù)測(cè)/檢測(cè)值將被插入到輸出隊(duì)列中,然后通過(guò) object_tracker 類的可視化模塊,最后我們將處理后的幀寫入單獨(dú)的文件并將結(jié)果顯示給用戶。
我們將利用 Python 中的多線程來(lái)提高處理視頻幀的速度。 下面的 worker 函數(shù)將從輸入隊(duì)列中獲取幀數(shù)據(jù),加載 tensorflow 模型并將任何檢測(cè)結(jié)果傳回輸出隊(duì)列。 這是與主線程分開(kāi)運(yùn)行的。
當(dāng)然,為了可視化檢測(cè),我們需要傳遞檢測(cè)到的類標(biāo)簽,它們各自的置信度,邊界框顏色和坐標(biāo),并將它們繪制到幀圖像上。
測(cè)試及評(píng)估應(yīng)用程序
接下來(lái)的問(wèn)題是這個(gè)簡(jiǎn)單的應(yīng)用程序表現(xiàn)如何? 在我的筆記本電腦上運(yùn)行應(yīng)用程序我覺(jué)得檢測(cè)人員功能表現(xiàn)還不錯(cuò)。 我沒(méi)有將這些應(yīng)用程序置于嚴(yán)格的測(cè)試環(huán)境中。 但是,我也看到了很多表現(xiàn)相當(dāng)脆弱的情況。 首先,當(dāng)我把史蒂夫·喬布斯的傳記放在鏡頭前時(shí),它會(huì)檢測(cè)成另一個(gè)人,而不是一本書(因此無(wú)法區(qū)分真人或某人的圖像)。 其次,我覺(jué)得在檢測(cè)人員表現(xiàn)良好的同時(shí),檢測(cè)其他類別的表現(xiàn)并不是特別好,比如經(jīng)常會(huì)將我的手機(jī)誤認(rèn)為是電視或筆記本電腦。 在檢測(cè)現(xiàn)實(shí)世界的其他物體時(shí)還有很大的改進(jìn)空間。
潛在的現(xiàn)實(shí)應(yīng)用案例?
我們可以很容易地想到許多有趣的現(xiàn)實(shí)應(yīng)用案例,用于分析和檢測(cè)實(shí)時(shí)視頻流中的人員或其他物體。 我們可以在監(jiān)控?cái)z像頭中檢測(cè)到人員的存在,畢竟我們有大量的被忽視的安防攝像頭。我們可以讓攝像機(jī)跟蹤人員,計(jì)算人流量,甚至可以實(shí)時(shí)識(shí)別特定的行為。 自動(dòng)運(yùn)輸也即將出現(xiàn),這種技術(shù)對(duì)于幫助我們的車輛看到道路和探測(cè)行人至關(guān)重要。
原文鏈接:https://medium.com/@schuman.zhang/detecting-people-in-real-time-using-deep-learning-84859c9682d2
號(hào)外號(hào)外~
一個(gè)專注于
AI技術(shù)發(fā)展和AI工程師成長(zhǎng)的求知求職社區(qū)
誕生啦!
歡迎大家訪問(wèn)以下鏈接或者掃碼體驗(yàn)
https://club.leiphone.com/page/home
雷鋒網(wǎng)雷鋒網(wǎng)
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。