基於深度學習的人員跟蹤


點擊上方小白學視覺」,選擇加"星標"或「置頂python

重磅乾貨,第一時間送達git



在不斷進步的現代科技中,我認爲最偉大的是咱們在使計算機具備相似於人的感知能力方面取得了進步。之前訓練計算機使它像人同樣學習、作出像人同樣的行爲是很遙遠的夢想。但如今隨着神經網絡和計算能力的進步,夢想逐漸成爲現實。github


CNN算法


視覺智能是CNN(卷積神經網絡)提供給計算機的。卷積神經網絡是一種優雅的計算機制能夠在圖像或視頻上運行,以便從圖像或視頻中提取一些信息。提取的信息容許用來進行機器學習任務,例如圖像分類和目標定位。微信


目標檢測經過在目標周圍繪製邊界框來定位視頻幀或圖像中的目標。咱們能夠將人員跟蹤視爲目標檢測的一種形式——目標是人!在開始以前,先概述一下基本概念及原理。網絡


1 基礎知識app


人員跟蹤的工做原理:機器學習

1.在視頻的第一幀中檢測到每一個人周圍的邊界框,圖像的每一個邊界框區域生成一個128維向量。該步驟可視爲將邊界框區域編碼爲一個128個維的向量。ide

2.爲圖像中的全部人員生成這種向量以及邊界框座標。存儲這些向量,並對視頻的下一幀執行上述向量生成步驟。函數

3.比較全部向量,在「下一幀」中找到類似的向量,並相應地標記邊界框。


這裏深刻研究的論文是:A Simple Baseline for Multi-Object Tracking. 這篇出色的論文改變了咱們解決目標跟蹤問題的方式。早期人們使用兩階段檢測器(TSD)方法來解決相似問題。但本文針對此問題加強了單階段檢測(SSD)技術,提升了推理速度和準確性。


兩階段檢測器:

在這種類型的檢測器中,須要兩個處理階段:模型的一部分檢測到邊界框,提取邊界框區域發送到模型的另外一部分,利用CNN生成128維特徵向量。


階段檢測器:

這種類型的檢測器,僅包含一個處理階段:圖像被送到模型中,僅經過一次便可生成輸出。在TSD中,必須先產生候選邊界框區域,以後剪切邊界框區域進行特徵提取處理。


鳥瞰圖:

詳細信息能夠參考https://www.reddit.com/r/MachineLearning/comments/e9nm6b/d_what_is_the_definition_of_onestage_vs_twostage/


頭部:

頭部是CNN結構中負責特定任務的一部分。簡而言之一個頭部經過執行各類計算(涉及圖像的卷積)來生成一些數字,如何解釋和使用這些數字取決於咱們。例如,咱們有一個生成四個數字(x,y,w,h)集合的頭部,那麼這四個數字能夠表示邊界框座標。與此相似不一樣的頭部產生不一樣的數字,咱們將根據本身的任務對數字進行解釋。


邊界框:

邊界框由4個座標(x,y,w,h)組成,(x,y)一般表明一箇中心點,(w,h)表明寬度和高度。所以對圖像執行一些計算,頭部輸出一組4維座標那麼表明邊界框座標。


錨框:

是一組預約義的數字(四個數字),相似於邊界框座標。咱們從新縮放或移動的它以即可以更接近圖像中的實際邊界框。

放大後,錨框看起來像上面的圖像,但它們數量龐大,幾乎覆蓋了全部圖像的區域。想了解更多有關錨框的信息,請查看這篇文章:https://medium.com/@andersasac/anchor-boxes-the-key-to-quality-object-detection-ddf9d612d4f9


2 實現


利用深度學習跟蹤人分爲兩個分支:1)目標檢測分支;2)身份嵌入分支




2.1目標檢測分支


模型的這一部分負責檢測圖像中的目標,輸出三組數字,將其組合以檢測圖像中存在的目標


1. 熱圖信息:生成表明對象熱圖的數字目標熱圖將經過如下公式生成:

目標熱圖的公式

其中N表明圖像中的物體數量,而σc表明標準誤差。爲簡單起見,假設咱們根據全部地面真框的中心建立目標熱圖地面真值框的中心將具備很高的值,而且隨着遠離中心數值呈指數衰減。它將相似於下圖

根據真值框產生的熱圖爲目標圖像,該分支預測的目標熱圖爲預測圖像,咱們能夠根據此來定義損失使用隨機梯度降低進行優化神經網絡的關鍵。更多有關SGD的信息參考https://towardsdatascience.com/stochastic-gradient-descent-clearly-explained-53d239905d31它能幫助訓練咱們的網絡,使實際輸出與目標輸出類似。


2. 中心偏移信息:預測邊界框的中心它輸出一個數字解釋目標邊界框的中心在哪裏。


3. 邊界框尺寸信息:預測邊界框的大小。經過組合中心偏移信息和框大小信息,能夠生成預測的邊界框。而後將該預測邊界框與目標邊界框進行比較,並使用SGD計算和優化損失,如前所述。


2.2身份嵌入分支


此分支負責生成與預測邊界框相對應的圖像塊的向量表示,一般將圖像補丁(區域塊)的信息編碼爲128維向量128維向量僅是模型的此分支爲每一個邊界框預測生成的一組數字向量是相應幀中跟蹤人物的關鍵。


2.3結合



咱們研究了人員跟蹤難題的每一個部分,並對這些部分有了基本的瞭解。讓咱們將每一個部分鏈接以得到最終的結果


從視頻的第一幀開始視頻第一幀傳遞到網絡(CNN)並得到4個輸出。

1.熱圖輸出;

2.中心偏移輸出;

3.邊界框尺寸輸出;

4.Re-ID(128維重識別特徵向量)


前三個輸出負責獲取圖像中目標(人員)的邊界框第四個輸出表示對象的標識由前三個輸出生成的邊界框表示產生。若是從前三個輸出預測有n個邊界框,則將有n個表示全部邊界框的128維向量標識。


如今,從第一幀開始預測n個框及其對應的Re-ID。咱們將再次爲下一幀生成Re-ID和邊界框,而後經過一些類似性函數比較全部Re-ID,若是類似度很高,能夠將其標記爲與前一幀相同的人。經過這種方式能夠處理整個視頻並逐幀進行操做。


2.4訓練方式


多種損失相結合來訓練網絡。網絡訓練是使用SGD的變體完成的。我將提供一些困難公式的高級詳細信息,將其組合起來用做損失函數來訓練模型。注意:模型訓練是使用稱爲反向傳播的方法完成的,即簡單地使用微積分朝函數的最小值移動——SGD的基本步驟)。


不一樣的損失是:


基本上,將全部這些損失綜合起來並進行優化,從而得到訓練有素的網絡。


2.5總結理論


總之,咱們爲檢測到的每一個邊界框使用網絡產生向量,而後把這些向量與下一幀產生的向量進行匹配,並根據高度類似性進行過濾,以跨多個幀跟蹤同一我的。


2 人員跟蹤-代碼實現


要從用於跟蹤的視頻生成輸出,您必須執行如下5個簡單步驟:


第1步

克隆git倉庫到所需文件夾

https://github.com/harsh2912/people-tracking

存儲庫的原始代碼是:

https://github.com/ifzhang/FairMOT

對其進行了一些更改,使其適合咱們當前的視頻人員跟蹤的任務


第2步

下載預訓練模型

https://github.com/harsh2912/people-tracking

這將幫助咱們生成所需的輸出將下載的模型放在models /文件夾中。


3

安裝依賴項安裝所需的依賴項,以便腳本能夠運行。請確保具備支持CUDA的GPU,以便此過程能夠正常進行執行如下操做:


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


在這裏,您只需建立一個稱爲FairMOT的conda環境,便可在其中使用pip和conda管理器安裝全部Python依賴項。requirements.txt是包含全部必需庫的文件,pip安裝程序注意該文件。不要忘記運行DCNv2的make文件。


4

開始追蹤已完成全部設置,只須要運行適用於給定視頻的Python腳本,而後生成輸出並將其保存在上述路徑中便可。我已將Python腳本命名爲script.py,您能夠根據須要對其進行調用。


該腳本具備三個輸入參數:

1.model_path(mp):保存模型的路徑

2.video_path(vp):加載視頻的路徑

3.output_directory(od)保存輸出的路徑輸出保存名稱「 output.avi」

轉到src文件夾並運行下面命令,其中mp,vp和od是參數名稱。


cd srcpython script.py -mp ../models/all_dla34.pth -vp path_to_video -od path_to_save_video



第5

休息一下,等待模型輸出結果。這段時間中,輸出保存在相應的目錄中。



額外事項

我上傳了一個名爲Experiment.ipynb的iPython文件,您能夠在其中調整不一樣的參數以發揮更多做用。它位於主存儲庫的src文件夾中。要了解不一樣參數的調整,請瀏覽原始存儲庫。請不要忘記在使用該文件時使用相同的conda環境



參考


1.論文:https://arxiv.org/abs/2004.01888

2.原始倉庫:https://github.com/ifzhang/FairMOT


流羣


歡迎加入公衆號讀者羣一塊兒和同行交流,目前有SLAM、三維視覺、傳感器自動駕駛、計算攝影、檢測、分割、識別、醫學影像、GAN算法競賽等微信羣(之後會逐漸細分),請掃描下面微信號加羣,備註:」暱稱+學校/公司+研究方向「,例如:」張三 + 上海交大 + 視覺SLAM「。請按照格式備註,不然不予經過。添加成功後會根據研究方向邀請進入相關微信羣。請勿在羣內發送廣告,不然會請出羣,謝謝理解~


本文分享自微信公衆號 - 小白學視覺(NoobCV)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索