**本文恐怕不是徹底的標題黨**html
視頻多目標跟蹤須要解決的關鍵點是先後兩幀之間的Target Association,這是最難的環節(沒有之一)。第T幀檢測到M個目標,第T+S(S>=1)幀檢測到N個目標,怎樣將這M*N對目標正確地關聯起來,是「跟蹤算法」最難的環節。(注意這裏提到的是多目標,單目標跟蹤很簡單)git
一般的跟蹤方式是根據目標中心點距離、IOU(目標區域的交併比)等這些純物理指標進行關聯,中心點距離越小、IOU越大(區域重合面積越大),則認爲是同一個目標。這種方式優勢就是簡單、匹配速度快,而缺點就是當碰到目標被遮擋、目標過於密集、視頻跳幀太大檢測等狀況時,跟蹤就會失敗。github
高級的跟蹤方式(本文主要講述的方式)不只會考慮上面提到的目標物理特性,還會計算先後兩幀中目標的外觀特徵(Appearance Feature)類似度。這裏的外觀特徵不是傳統的提取圖像特徵,更不是經過比較兩張圖的顏色直方圖來進行對比分析。而是須要訓練單獨的模型(區分於目標檢測階段),經過該模型計算每一個目標的外觀特徵值,而後計算特徵值之間的「餘弦距離」來比較兩個目標的類似度。這種方式能夠有效地解決**目標被遮擋**、**目標過於密集**、**視頻跳幀檢測分析**等問題,缺點就是引入了另一個特徵提取模型,速度相對來講要慢一些。對於那些每秒處理幀數要求不高的場合,此種方式尤爲有效。下圖是經過該方法進行目標跟蹤的效果(模型效果通常,目標容易跟丟):算法
能夠看到,目標消失後再出現時,仍然可以準確跟蹤到。目標很是密集,可是也並不影響最終跟蹤效果。機器學習
多目標跟蹤通常流程學習
在**Tracking By Detecting**的模式下,要想跟蹤目標,先要將視頻中的目標檢測出來,這一步稱爲「目標檢測」,而後根據檢測獲得的結果,將每幀中的目標關聯起來。目標檢測算法不少,SSD和YOLO等,網上開源實現版本也有不少。編碼
如上圖,通過檢測算法處理以後獲得的結果只有物理上的特性,幀與幀之間不存在任何關聯,只有經過跟蹤算法處理以後,才能加入時序的特性。spa
跟蹤算法初級版本視頻
該方式只考慮先後兩幀中每一個目標的物理特性,中心點位置以及IOU,經過分析這兩個特性來關聯先後幀中的目標。htm
如上圖所示,實線方框表明目標在前一幀中的實際位置和下一幀中的預測位置,虛線框表明目標在下一幀中的實際位置,經過計算下一幀實際位置與前一幀的預測位置的IOU,來關聯目標。IOU越到,表明重合度越高,越高則表明爲同一目標,賦予惟一TrackId。關於該部分的詳細內容,能夠參見上一篇博客。
跟蹤算法高級版本
該方式會引入另一個外觀特徵提取模型(網上搜Person Re-Id,或參見本文末尾),對於每一個檢測到的目標,先利用該模型計算它的特徵(能夠理解爲該目標的一種特徵編碼),而後計算每一個目標特徵之間的餘弦距離。餘弦距離越小(注意:這裏指1-餘弦距離,參見後面關於距離的說明),表明目標越類似,經過它能夠做爲關聯目標的一種指標。
如上圖,除了在目標檢測環節須要提早訓練模型以外,跟蹤環節也須要訓練相應的模型。所以,該方式不但會增長前期準備工做,還會增長算法運行時間。
該方式的詳細執行流程以下:
邏輯至關簡單,難的是找到計算Appearance Feature的模型,github上有相應的算法實現:https://github.com/nwojke/cosine_metric_learning,該算法能夠訓練提取特徵的模型。注意,若是訓練數據只包含行人,那麼訓練出來的模型只適合計算行人的Appearance Feature(其餘物體也能計算,可是不許確)。
該倉庫中給出的示例代碼是用來訓練行人數據集的,因此對於行人特別有效。目前我正嘗試訓練車輛的數據集,待結果出來以後再更新此博客。
關於機器學習中的各類距離
歐幾里得距離(歐氏距離)
該距離很簡單,就是咱們從小到大接觸到的N維空間中兩點的直線距離,對於最多見的2/3維空間兩點的距離計算公式爲:
Distance = numpy.sqrt((x1-x2)**2 + (y1-y2)**2 + (z1-z2)**2) (三維空間兩點距離)
歐式距離越小,表明二者越接近相同,當距離爲零時,表明二者徹底相同。
餘弦距離
餘弦距離表示N維空間中兩點與原點鏈接線段之間夾角的餘弦值。餘弦距離越大,表示夾角越小,那麼兩點越類似。若是餘弦距離爲1(最大值),那麼表示二者很是類似。注意這裏只能說明兩點很是類似,並不必定相同。摘自網上的一幅圖:
餘弦距離的意義:
當兩點夾角爲零時,表示兩點的各個維度的值所佔的比例相同。好比(2,2,2)和(6,6,6),(1,2,3)和(3,6,9)。對應本文中計算Appearance Feature特徵值之間的餘弦距離,實際意義就是比較特徵值(好比128維)中每個維度值所佔的比例是否相等,越接近相等,說明特徵值對應的圖片越類似。
Person Re-Id/ Vehicle Re-Id也是一個值得研究的方向,經過給定query target,能夠在多個視頻中搜索該目標,通常能夠用於公安罪犯抓捕、違法車輛搜索等領域。雖然傳統的人臉識別方式已經很成熟了,用人臉識別技術能夠在城市監控攝像頭中準肯定位犯罪分子,可是一般狀況下,監控攝像機拍攝到的人臉並不清晰,因此人臉識別準確率不高。而Person Re-Id(或者Vehicle Re-Id或者其餘什麼ReId)是基於總體輪廓進行特徵提取的,它不要求看到犯罪份子詳細的臉部圖片,只須要全身輪廓圖片(同時也忽略衣着、拍攝方位、光線、姿態等因素)就能夠定位該目標。
本文沒有源代碼。有問題能夠留言。