基于深度學(xué)習(xí)的人員跟蹤
點(diǎn)擊上方“小白學(xué)視覺(jué)”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時(shí)間送達(dá)

在不斷進(jìn)步的現(xiàn)代科技中,我認(rèn)為最偉大的是我們?cè)谑褂?jì)算機(jī)具有類(lèi)似于人的感知能力方面取得了進(jìn)步。以前訓(xùn)練計(jì)算機(jī)使它像人一樣學(xué)習(xí)、做出像人一樣的行為是很遙遠(yuǎn)的夢(mèng)想。但現(xiàn)在隨著神經(jīng)網(wǎng)絡(luò)和計(jì)算能力的進(jìn)步,夢(mèng)想逐漸成為現(xiàn)實(shí)。

CNN
視覺(jué)智能是CNN(卷積神經(jīng)網(wǎng)絡(luò))提供給計(jì)算機(jī)的。卷積神經(jīng)網(wǎng)絡(luò)是一種優(yōu)雅的計(jì)算機(jī)制可以在圖像或視頻上運(yùn)行,以便從圖像或視頻中提取一些信息。提取的信息允許用來(lái)進(jìn)行機(jī)器學(xué)習(xí)任務(wù),例如圖像分類(lèi)和目標(biāo)定位。
目標(biāo)檢測(cè)通過(guò)在目標(biāo)周?chē)L制邊界框來(lái)定位視頻幀或圖像中的目標(biāo)。我們可以將人員跟蹤視為目標(biāo)檢測(cè)的一種形式——目標(biāo)是人!在開(kāi)始之前,先概述一下基本概念及原理。
1 基礎(chǔ)知識(shí)
人員跟蹤的工作原理:
1.在視頻的第一幀中檢測(cè)到每個(gè)人周?chē)倪吔缈颍瑘D像的每個(gè)邊界框區(qū)域生成一個(gè)128維向量。該步驟可視為將邊界框區(qū)域編碼為一個(gè)128個(gè)維的向量。
2.為圖像中的所有人員生成這種向量以及邊界框坐標(biāo)。存儲(chǔ)這些向量,并對(duì)視頻的下一幀執(zhí)行上述向量生成步驟。
3.比較所有向量,在“下一幀”中找到相似的向量,并相應(yīng)地標(biāo)記邊界框。

這里深入研究的論文是:A Simple Baseline for Multi-Object Tracking. 這篇出色的論文改變了我們解決目標(biāo)跟蹤問(wèn)題的方式。早期人們使用兩階段檢測(cè)器(TSD)方法來(lái)解決類(lèi)似問(wèn)題。但本文針對(duì)此問(wèn)題增強(qiáng)了單階段檢測(cè)(SSD)技術(shù),提高了推理速度和準(zhǔn)確性。
兩階段檢測(cè)器:
在這種類(lèi)型的檢測(cè)器中,需要兩個(gè)處理階段:模型的一部分檢測(cè)到邊界框,提取邊界框區(qū)域發(fā)送到模型的另一部分,利用CNN生成128維特征向量。
單階段檢測(cè)器:
這種類(lèi)型的檢測(cè)器,僅包含一個(gè)處理階段:圖像被送到模型中,僅通過(guò)一次即可生成輸出。在TSD中,必須先產(chǎn)生候選邊界框區(qū)域,之后剪切邊界框區(qū)域進(jìn)行特征提取處理。
鳥(niǎo)瞰圖:
詳細(xì)信息可以參考https://www.reddit.com/r/MachineLearning/comments/e9nm6b/d_what_is_the_definition_of_onestage_vs_twostage/
頭部:
頭部是CNN結(jié)構(gòu)中負(fù)責(zé)特定任務(wù)的一部分。簡(jiǎn)而言之一個(gè)頭部通過(guò)執(zhí)行各種計(jì)算(涉及圖像的卷積)來(lái)生成一些數(shù)字,如何解釋和使用這些數(shù)字取決于我們。例如,我們有一個(gè)生成四個(gè)數(shù)字(x,y,w,h)集合的頭部,那么這四個(gè)數(shù)字可以表示邊界框坐標(biāo)。與此類(lèi)似不同的頭部產(chǎn)生不同的數(shù)字,我們將根據(jù)自己的任務(wù)對(duì)數(shù)字進(jìn)行解釋。
邊界框:
邊界框由4個(gè)坐標(biāo)(x,y,w,h)組成,(x,y)通常代表一個(gè)中心點(diǎn),(w,h)代表寬度和高度。因此對(duì)圖像執(zhí)行一些計(jì)算,頭部輸出一組4維坐標(biāo)那么代表邊界框坐標(biāo)。
錨框:
是一組預(yù)定義的數(shù)字(四個(gè)數(shù)字),類(lèi)似于邊界框坐標(biāo)。我們重新縮放或移動(dòng)的它以便可以更接近圖像中的實(shí)際邊界框。

放大后,錨框看起來(lái)像上面的圖像,但它們數(shù)量龐大,幾乎覆蓋了所有圖像的區(qū)域。想了解更多有關(guān)錨框的信息,請(qǐng)查看這篇文章:https://medium.com/@andersasac/anchor-boxes-the-key-to-quality-object-detection-ddf9d612d4f9
2 實(shí)現(xiàn)
利用深度學(xué)習(xí)跟蹤人分為兩個(gè)分支:1)目標(biāo)檢測(cè)分支;2)身份嵌入分支

2.1目標(biāo)檢測(cè)分支
模型的這一部分負(fù)責(zé)檢測(cè)圖像中的目標(biāo),輸出三組數(shù)字,將其組合以檢測(cè)圖像中存在的目標(biāo)。
1. 熱圖信息:生成代表對(duì)象熱圖的數(shù)字,目標(biāo)熱圖將通過(guò)以下公式生成:

目標(biāo)熱圖的公式
其中N代表圖像中的物體數(shù)量,而σc代表標(biāo)準(zhǔn)偏差。為簡(jiǎn)單起見(jiàn),假設(shè)我們根據(jù)所有地面真值框的中心創(chuàng)建目標(biāo)熱圖,地面真值框的中心將具有很高的數(shù)值,并且隨著遠(yuǎn)離中心,數(shù)值呈指數(shù)衰減。它將類(lèi)似于下圖:

根據(jù)真值框產(chǎn)生的熱圖為目標(biāo)圖像,該分支預(yù)測(cè)的目標(biāo)熱圖為預(yù)測(cè)圖像,我們可以根據(jù)此來(lái)定義損失,并使用隨機(jī)梯度下降進(jìn)行優(yōu)化(神經(jīng)網(wǎng)絡(luò)的關(guān)鍵)。更多有關(guān)SGD的信息參考https://towardsdatascience.com/stochastic-gradient-descent-clearly-explained-53d239905d31它能幫助訓(xùn)練我們的網(wǎng)絡(luò),使實(shí)際輸出與目標(biāo)輸出相似。
2. 中心偏移信息:預(yù)測(cè)邊界框的中心,它輸出一個(gè)數(shù)字解釋目標(biāo)邊界框的中心在哪里。
3. 邊界框尺寸信息:預(yù)測(cè)邊界框的大小。通過(guò)組合中心偏移信息和框大小信息,可以生成預(yù)測(cè)的邊界框。然后將該預(yù)測(cè)邊界框與目標(biāo)邊界框進(jìn)行比較,并使用SGD計(jì)算和優(yōu)化損失,如前所述。
2.2身份嵌入分支
此分支負(fù)責(zé)生成與預(yù)測(cè)邊界框相對(duì)應(yīng)的圖像塊的向量表示,通常將圖像補(bǔ)丁(區(qū)域塊)的信息編碼為128維向量,128維向量?jī)H是模型的此分支為每個(gè)邊界框預(yù)測(cè)生成的一組數(shù)字,該向量是相應(yīng)幀中跟蹤人物的關(guān)鍵。
2.3結(jié)合

我們研究了人員跟蹤難題的每個(gè)部分,并對(duì)這些部分有了基本的了解。讓我們將每個(gè)部分連接以獲得最終的結(jié)果。
從視頻的第一幀開(kāi)始,將視頻第一幀傳遞到網(wǎng)絡(luò)(CNN)并獲得4個(gè)輸出。
1.熱圖輸出;
2.中心偏移輸出;
3.邊界框尺寸輸出;
4.Re-ID(128維重識(shí)別特征向量)
前三個(gè)輸出負(fù)責(zé)獲取圖像中目標(biāo)(人員)的邊界框,第四個(gè)輸出表示對(duì)象的標(biāo)識(shí),由前三個(gè)輸出生成的邊界框表示產(chǎn)生。如果從前三個(gè)輸出預(yù)測(cè)有n個(gè)邊界框,則將有n個(gè)表示所有邊界框的128維向量標(biāo)識(shí)。
現(xiàn)在,從第一幀開(kāi)始預(yù)測(cè)n個(gè)框及其對(duì)應(yīng)的Re-ID。我們將再次為下一幀生成Re-ID和邊界框,然后通過(guò)一些相似性函數(shù)比較所有Re-ID,如果相似度很高,可以將其標(biāo)記為與前一幀相同的人。通過(guò)這種方式可以處理整個(gè)視頻并逐幀進(jìn)行操作。
2.4訓(xùn)練方式
多種損失相結(jié)合來(lái)訓(xùn)練網(wǎng)絡(luò)。網(wǎng)絡(luò)訓(xùn)練是使用SGD的變體完成的。我將提供一些困難公式的高級(jí)詳細(xì)信息,將其組合起來(lái)用作損失函數(shù)來(lái)訓(xùn)練模型。(注意:模型訓(xùn)練是使用稱(chēng)為反向傳播的方法完成的,即簡(jiǎn)單地使用微積分朝函數(shù)的最小值移動(dòng)——SGD的基本步驟)。
不同的損失是:



基本上,將所有這些損失綜合起來(lái)并進(jìn)行優(yōu)化,從而獲得訓(xùn)練有素的網(wǎng)絡(luò)。
2.5總結(jié)理論
總之,我們?yōu)闄z測(cè)到的每個(gè)邊界框使用網(wǎng)絡(luò)產(chǎn)生向量,然后把這些向量與下一幀產(chǎn)生的向量進(jìn)行匹配,并根據(jù)高度相似性進(jìn)行過(guò)濾,以跨多個(gè)幀跟蹤同一個(gè)人。
2 人員跟蹤-代碼實(shí)現(xiàn)
要從用于跟蹤的視頻中生成輸出,您必須執(zhí)行以下5個(gè)簡(jiǎn)單步驟:
第1步
克隆git倉(cāng)庫(kù)到所需文件夾:
https://github.com/harsh2912/people-tracking
存儲(chǔ)庫(kù)的原始代碼是:
https://github.com/ifzhang/FairMOT
我對(duì)其進(jìn)行了一些更改,使其適合我們當(dāng)前的視頻人員跟蹤的任務(wù)。
第2步
下載預(yù)訓(xùn)練模型:
https://github.com/harsh2912/people-tracking
這將幫助我們生成所需的輸出,將下載的模型放在models /文件夾中。
第3步
安裝依賴(lài)項(xiàng):安裝所需的依賴(lài)項(xiàng),以便腳本可以運(yùn)行。請(qǐng)確保具有支持CUDA的GPU,以便此過(guò)程可以正常進(jìn)行,執(zhí)行以下操作:
conda create -n FairMOTconda activate FairMOTconda install pytorch==1.2.0 torchvision==0.4.0 cudatoolkit=10.0 -c pytorchcd ${FAIRMOT_ROOT}pip install -r requirements.txtcd src/lib/models/networks/DCNv2_new sh make.sh
在這里,您只需創(chuàng)建一個(gè)稱(chēng)為FairMOT的conda環(huán)境,即可在其中使用pip和conda管理器安裝所有Python依賴(lài)項(xiàng)。requirements.txt是包含所有必需庫(kù)的文件,pip安裝程序注意該文件。不要忘記運(yùn)行DCNv2的make文件。
第4步
開(kāi)始追蹤:已完成所有設(shè)置,只需要運(yùn)行適用于給定視頻的Python腳本,然后生成輸出并將其保存在上述路徑中即可。我已將Python腳本命名為script.py,您可以根據(jù)需要對(duì)其進(jìn)行調(diào)用。
該腳本具有三個(gè)輸入?yún)?shù):
1.model_path(mp):保存模型的路徑
2.video_path(vp):加載視頻的路徑
3.output_directory(od):保存輸出的路徑,輸出保存的名稱(chēng)為“ output.avi”
轉(zhuǎn)到src文件夾并運(yùn)行下面命令,其中mp,vp和od是參數(shù)名稱(chēng)。
cd srcpython script.py -mp ../models/all_dla34.pth -vp path_to_video -od path_to_save_video
第5步
休息一下,等待模型輸出結(jié)果。在這段時(shí)間中,輸出將保存在相應(yīng)的目錄中。

額外事項(xiàng)
我上傳了一個(gè)名為Experiment.ipynb的iPython文件,您可以在其中調(diào)整不同的參數(shù)以發(fā)揮更多作用。它位于主存儲(chǔ)庫(kù)的src文件夾中。要了解不同參數(shù)的調(diào)整,請(qǐng)瀏覽原始存儲(chǔ)庫(kù)。請(qǐng)不要忘記在使用該文件時(shí)使用相同的conda環(huán)境

參考
1.論文:https://arxiv.org/abs/2004.01888
2.原始倉(cāng)庫(kù):https://github.com/ifzhang/FairMOT
交流群
歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺(jué)、傳感器、自動(dòng)駕駛、計(jì)算攝影、檢測(cè)、分割、識(shí)別、醫(yī)學(xué)影像、GAN、算法競(jìng)賽等微信群(以后會(huì)逐漸細(xì)分),請(qǐng)掃描下面微信號(hào)加群,備注:”昵稱(chēng)+學(xué)校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺(jué)SLAM“。請(qǐng)按照格式備注,否則不予通過(guò)。添加成功后會(huì)根據(jù)研究方向邀請(qǐng)進(jìn)入相關(guān)微信群。請(qǐng)勿在群內(nèi)發(fā)送廣告,否則會(huì)請(qǐng)出群,謝謝理解~
