# Tracking - LSST > [name=謝朋諺(Adam Hsieh)] > [time=Mon, Aug 12, 2019 3:52 PM] ###### tags: `paper`,`IVA`,`track` --- ## Reference > [Multi-Object Tracking with Multiple Cues and Switcher-Aware Classification 论文笔记](https://blog.csdn.net/yiran103/article/details/87904416) > [统一多目标追踪框架:Multi-Object Tracking with Multiple Cues and Switcher-Aware Classification](https://blog.csdn.net/wen775768646/article/details/86590619) > [超实时性单目标跟踪网络——Siamese RPN(CVPR2018 spotlight论文)](https://blog.csdn.net/leviopku/article/details/81068487) > [SiamRPN阅读笔记:High Performance Visual Tracking with Siamese Region Proposal Network](https://blog.csdn.net/fzp95/article/details/80982201) --- # Multi-Object Tracking with Multiple Cues and Switcher-Aware Classification [論文連結](https://arxiv.org/pdf/1901.06129.pdf) {%pdf https://arxiv.org/pdf/1901.06129.pdf %} --- ## 摘要 * 使用 Long term 與 Short term 來混合實現追蹤。 * 使用單物件追蹤 (SOT,Single Object Tracking) 的子網路來獲取 Short term 的資訊。 * 使用 ReID 的子網路來獲取 Long term 的資訊。 * 使用 Switcher-Aware Classification (SAC) 提取特徵進行匹配決策以考慮身分切換的問題。 * Short term 可以幫出 False Negative 的下降,Long term 可以避免遮擋的問題,並且透過 SAC 學會如何有效率的合併多個資訊以提高穩健性。 ## The Proposed Framework ### 變量定義: * $t$ 是這個 frame 的 ID。 * 一個被追蹤物件的軌跡可以用 $X=\{X_t\}$ 表示,其中 $X_t=[X_t^x, X_t^y,X_t^w,X_t^h]$。 * $X_t^x, X_t^y$ 是 Bounding Box 左上角的座標、$X_t^w, X_t^h$ 是 Bounding Box 寬跟長。 * $q_X$ 是物件 $X$ 的追蹤品質。 * $I_t^X$ 是物件 $X$ 在第 $t$ 個 frame 的外觀描述。 ### 整體設計 ![](https://i.imgur.com/gf0HGzf.png) 1. Tracked targets 集合 $S$ 設置為空且 $t=1$。 2. 在 Frame $t$ 對於 target $X$ 使用 SOT 子網路在下一個 Frame $I_{t+1}$ 中搜索物件模板 $E_x$,然後輸出最可能的位置 $D_{track}$。 3. 對於在 $I_{t+1}$ 的偵測結果 $D_{det}$,其對應的影像檢測區域 $I_{t+1,D_{det}}$ 和 target $\{I_{t_i}^X\}, i=1,2,...,K$ 過去的所有外觀,將會被使用在 ReID 的子網路中去擷取 Long-term 特徵。 4. SOT 在步驟 2. 中找到目標 $D_{track}$ 的位置,檢測器找到的位置 $D_{det}$ 將會與步驟 3. 中獲得的 ReID 特徵組合為物件的匹配特徵。 5. 找到物件 $\Lambda$ 的潛在 switcher,即最有可能的身份切換引起者,並提取其 SOT 和 ReID 特徵。 6. 借助 Switcher 的匹配特徵,使用物件的匹配特徵來生成關於檢測結果是否與目標物件匹配,並是藉由 Switcher-Aware Classifier (SAC) 來產生匹配分數,對於 $I_{t+1}$ frame 中的每個檢測結果重複該步驟,以便獲得他們與被跟蹤目標的匹配分數。 7. 利用追蹤到的 targets 與步驟 6. 中找到的檢測結果之間的匹配分數,構建已跟蹤 targets 和檢測結果的二分 graph。使用 minimum-cost-network-flow 找到 graph 的匹配結果。 8. 不同 target 有不同處理方式: * 對於匹配的 target,使用匹配的檢測資訊更新位置和模板。 * 對於不匹配的 target,使用 SOT 結果更新 tracker 的位置,並丟棄認為不可靠或丟失的 target。 * 對於孤立的檢測結果,如果他們信心分數滿足新 target 的條件,則將他們添加到追蹤 target 集合 $S$ 中。 9. 在 $t=t+1$ 的 frame 設定裡,不斷重複步驟 2~8 直到不再有下一個 frame 出現。 ```mermaid graph TB st(Frame)--Detector-->det[D_det] st--SOT-->track[D_track] det-->iou[IoU score] det--IQA-->kf[K frames] track-->iou iou--SAC-->ms[matching scores] kf--ReID-->hcs[history cosine similarity] hcs--SAC-->ms ms--MCF-->BG[Bipartite Graph] ``` :::success :+1: 系统组成: Detector、SOT、IQA(Image Quality Assessment)、ReID、SAC、MCF、Kalman Filter。 * Detector: MOT16 中使用與 POI 相同的檢測器,MOT17 中使用更嚴格的 NMS 和質量過濾器調整結果。 * SOT:SiamRPN,修改了 anchor,使用私有行人數據(100分鐘)調整網絡,根據匹配情況計算追蹤質量。方形輸入導致圖像拉伸? * IQA:Resnet-18,使用 MOT16 中的 7 段視頻訓練。輸入尺寸未提及。 * ReID:修改版 Inception-v4,使用私有行人數據(100分鐘),輸入為 224x224。 * SAC:基於 XGBoost,使用 MOT16 中的 7 段視頻訓練。 * MCF:最小費用流算法。 * Kalman Filter:平滑軌跡。 ::: ### Short Term Cues - SOT Tracker ![](https://i.imgur.com/d66pOSk.png) #### 基礎 tracker * 框架是使用 Siamese-RPN tracker 來提取短期線索。 * 當前 Frame 的模板 $E_x$ 也叫做 Exemplar,並調整為 $127 \times 127$。 * 在下一個 frame 中搜尋 target,Search Region $R$ 是根據 $X$ 的位置從 Frame $I_{t+1}$ 中裁減出來的,然後調整為 $255 \times 255$。 * 具體來說,Search Region 的影像比例與 Examplar 一樣。 * 如上圖所示 Search Region 與 Examplar 共享權重的孿生 CNN 傳遞,並在擷取特徵後街兩個分支,每個分支由兩個 CNN 組成,一個分支用於得到 score maps,另一個是追求 Bounding box regression。 * 假設搜索區域中 Examplar 的正確位置對應於 score map 上的分數最高,在每個不同位置的 Bounding Box 回歸應指向這個正確位置。 :::info :memo: 下面這兩張圖是補充說明,來自原做 SOT 的 *[論文](http://openaccess.thecvf.com/content_cvpr_2018/CameraReady/2951.pdf)*,將Siamese Network 解釋的更清楚。 ::: ![](https://i.imgur.com/VPWMzrf.png) ![](https://i.imgur.com/b0EMo6u.png) #### 短期特徵生成 * SOT 的子網路會輸出一個分數和預測的 Bounding Box,我們稱做 SOT Box。 * 要匹配的檢測框我們稱做 Detection Box。 * 我們表示 SOT 的分數為 $p$, SOT Box 為 $D_{track}$, Detection Box 為 $D_{det}$ 所以短期特徵 $f_s$ 的計算公式為:==$f_s(D_{track},D_{det})=IoU(D_{track},D_{det})$== (1)。 #### Distractor-aware SOT tracker forMOT tracking * 為了最大化 Siamese-RPN 的效果,我們更改 anchors 以適應行人的大小,並使用行人數據來改進網路。 * SOT tracker 如果目標遺失很難判斷何時停止追蹤,當 tracker 飄移到背景的干擾者時, tracker 可能無法停止追蹤干擾者,因此為了讓 tracker score 可以感知選錯目標了,本文使用前面步驟 7. 的匹配結果來細化 tracker score。 * 對於目標 $X$,重新定義 tracking 的品質 $q_X$: $q_{X,t+1}=\begin{cases} \dfrac{q_{X,t}+IoU(D_{track},D_{det})\cdot p}{2},\ if \ matched, \\q_{X,t}\cdot decay\cdot p^k,\ otherwise, \end{cases}$ (2) 其中 $deacy$ 和 $k$ 是超參數用來處理不一致的 target,$D_{det}$ 是檢測框,如果追蹤品質 $q_X$ 低於閾值 $ζt$,我們就會丟棄不可靠的目標。 ### Long Term Cues - ReID Network * 本文使用 GoogleNet Inception-v4 作為 CNN 骨幹當 ReID 的子網路,從分類之前的最後一層 FC layer 去擷取 feature。下方兩個表額的上面是整體 model 的架構,下面則是一個 inception-A block 的小架構。 ![](https://i.imgur.com/TeAyjqw.png) ![](https://i.imgur.com/g5WEylZ.png) #### Quality-aware long term tracklet history construction * 為了獲得高品質的的 long term 線索,我們使用 quality 過濾器在 $K$ 段時期內選擇 $K$ 張最佳影像,所選的 K 張影像構成 target 追蹤歷史紀錄,其索引為 $\mathcal{H}=\{t_1...,t_K\}$。 ![](https://i.imgur.com/1UhW6bO.png) (3) * $Q$ 是網路輸出的 quality score,使用的是 ResNet-18。 * $I_t^X$ 是第 $t$ 個 frame 上 target $X$ 的影像區域,超參數 $\delta$ 決定選擇間隔。 * 例如:當 $i=1$ 時,從 Frame $t,t-1,...,t-\delta +1$ 中選擇品質得分最高的作為 $t_1$,當 $i=2$ 時,從 Frame $t-\delta,t-\delta -1,...,t-2\delta +1$ 中選擇品質得分最高的作為 $t_2$,因此 $t_i$ 中的 $i$ 對應於不同的步幅和搜索範圍。 #### Long-term 特徵產生 * 選擇 $K$ 張影像後,將所有這些影像和需匹配的檢測結果送到 ReID 子網路並輸出其 ReID 特徵,然後我們可以獲得 target $K$ 的長期特徵: ![](https://i.imgur.com/xUNmK45.png) (4) * $A_{t_i}^X$ 是從 target $X$ 的追蹤紀錄中選擇的第 $i$ 張影像的 ReID 特徵向量,$A_{det}$ 是檢測結果的 ReID 特徵。 * 為了減少計算,對於 tracklet 中的每個影像,ReID 網路提取一次特徵就會保存以備後續使用。 ### Switcher-Aware Classifier -> SAC #### Switcher retrieval * 我們發現大量的身份轉換(Identity Switchers, IDS)時機都是發生在兩個 targets 彼此相遇並發生較大重疊的時候。 * 由上一點可推論大部分 targets 最大重疊另一個 target ==可以被標記為最可能的潛在切換者==。 * 數學上的表示,對於第 $t$ 個 frame 中的每個 tracklet $X$,其位置用 $X_t$ 表示,並且可能的切換者如下:==$\Lambda = \displaystyle argmax_{Y\in S\ s.t.\ Y\neq X}IoU(X_t,Y_t)$== (5) * $S$ 是追蹤 targets 的集合。 #### Input Features * 我們將兩個子網路視為特徵提取運算符 $\phi$,並將兩者的輸入:Target $X$ 和 Detection 結果 $D$ 表示為: ==$\Gamma_{X,D}$==,Switcher 也一樣。 * 而分類器的輸入特徵由兩部分組成: 1. 首要考慮 Target 的特徵,由 $\phi(\Gamma_{X,D})$ 表示。 2. 而 Switcher 的特徵由 $\phi(\Gamma_{\Lambda,D})$ 表示。 * 而 $\phi$ 的定義公式為:==$\phi(\Gamma_{X,D})=\{f_s(D_{track},D_{det})\}\cup F_l^X$== (6) * $\phi(X,t)$ 的維度是 $K+1$ 而且 Switcher 也一樣,然後我們透過連接這兩個部分來獲得分類氣的輸入。 #### Classification * 本文使用有==加權分位數 sketch==的==正規牛頓 boosting 決策樹 (XGBoost)==。 * 如果分類結果 $y$ 大於閾值 $\zeta_m$,那麼將成本 $1-y$ 的相應邊添加到 graph 中。 ## 訓練 ### 訓練數據生成 * SOT 跟 ReID 都是獨立訓練的。 * ==對於 SOT 子網路==,我們根據影片的真實答案生成一些 target 影像對,並根據 SiamRPN 的訓練模式擴展影像對以包含一部份背景。並且只考慮與真實答案 Target 的 IoU 值**大於 0.65 的框作為正樣本**,且**小於 0.45 的作為負樣本**。 * ==對於 ReID 子網路==,對每個 target 都視為一個類別,訓練網路來預測輸入 target 的類別。輸入是 target 影像的區域,標籤是其類號。 * 為了 SAC 生成訓練樣本和相應的標記,我們首先要生成兩個子網路的輸入。 1. 首先,我們運行基線 MOT 演算法並生成所有假設的訓練影片軌跡。 2. 然後使用 IoU 閾值 0.6 將他們與真實答案關聯起來,即只考慮 IoU 大於 0.6 的預測真實答案對。並用匈牙利算法最大化 IoU 的總和。 3. 對於 Frame $t$ 的 target $X$,如果真實答案 $X_t,X_{t-\delta},...,X_{t-(k-1)\delta}$ 屬於相同 target 或最多其中一個與 target 無關,那麼我們將其視為有效的追蹤。 4. 對於每個有效的軌跡,我們在 Frame $t+1$ 中隨機採樣檢測結果,連同前面公式 (5) 定義的潛在 ID 切換者,組成 MOT 框架的輸入,並根據公式 (1), (4), (6) 生成分類器的輸入,根據檢測的標注訊息我們可以獲得 SAC 得標籤。 5. 此外對於正樣本,我們可以交換 switcher 和主要考慮的目標,以生成用於 SAC 的另一個訓練負樣本。 * 對於==Quality Filter==,我們將與真實目標 IoU 大於 0.6 的影像區域作為正樣本,其餘作為負樣本。 ### Loss Function 1. SOT 的 Loss 為: ==$L_{sot}=L_{sot}^{cls}+\lambda_{sot}L_{sot}^{reg}$== (7) * 其中 $\lambda_{sot}$ 是平衡其他兩個 Loss 的超參數。 * $\lambda_{sot}^{cls}$ 是 class-entropy 的分類 loss。 * $\lambda_{sot}^{reg}$ 則是 regression 的 loss。 2. 我們考慮到 ReID 是一個多分類的問題,因此會增加一個線性分類器在骨幹網路後面,並且每個類別的機率是由 Softmax 來計算,最終我們使用 cross-entropy 來優化:==$L_{reid}(x,y)=-\displaystyle\sum_{i=0}^{N-1}y[i]log(x[i])$== (8) * 其中 $N$ 代表有幾個類別。 * $x,y$ 分別是網路輸出和正確答案。 3. 對於 Newton boosting tree 分類器和 Quality Filter,我們使用的 Loss Function 為 ==$L_{cls}(x,y)=-(1-y)log(1-x)-ylog(x)$==。 ## 預處理和離線聚類 ### Detection 分數過濾策略 * 有時候檢測結果的有很多 noisy,帶有奇怪的 False Positive 而且信心指數也不高。我們提租兩種解決方案並重新定義這些檢測結果。 1. 第一種是更嚴格的 NMS 方法。 2. 第二種是訓練一個信心指數提煉器。 * 在這裡我們使用 Long Term Cues Selection 作為信心指數提煉器。 ### Long Tracklets Clustering 基於在線模式的輸出結果,我們設計了一個簡單的 Batch Cluster 後處理程序。 * 第一步是由軌跡構建子圖,對於每個 tracklet: 1. 首先我們將每個 Frame 視為一個孤立節點。 2. 然後如果有兩個節點有相似的 ReID 特徵,也就是他們餘弦距離小於閾值,我們將在兩個節點之間加一條邊。 3. 最後我們可以得到一些切片,每個切片是一個已連接的子圖。 * 第二步是合併這些切片到不同的 target 之間: * 如果兩個切片的 Frame 索引中具有小重疊,小的空間距離和類似的 ReID 特徵(計算兩個切片的平均特徵距離),就合併兩者。 * 如果合併了兩個切片,則原始位置中的切片將成為新的 ID。 * 此外,在拆分和合併操作之後,我們在每個 tracklet 中進行插值以便修復更多的 False Negatives。 ## Experiments ### Implement Details * 這個框架是用 PyTorch。 * 所有 CNN 都在 ImageNet 資料集上進行了預訓練,然後接受了 MOT 任務的培訓。 * 此外,我們使用額外的 Private Data 訓練兩個子網路,但只有 Public Data 使用在訓練分類器和 Quality Filter。 * 我們使用的 Public Data 是來自 MOT16 的 7 個影片。 * Private Data 包含行人的標記影片,這些影片與所有測試集影片完全不同。 * 用於訓練的 Private Data 約為 100 分鐘的 25 fps 影片,不同行人的數量約為 1000。 #### Tracklet status update * 對於匹配的 tracklets,它們的位置將隨著匹配的檢測結果的位置和 SOT 模板的更新而更新。否則,位置保持不變,模板也是如此。 * 卡爾曼濾波器用於平滑軌跡。Quality decay value 為 0.95,指數 k = 16。 * 當總體 Quality Score 低於 0.5 時,不會輸出 Target。匹配閾值 $ζm= 0.05$,丟棄的閾值 $ζt = 0.1$。 #### Training * **SOT**: 我們使用與 SOT 子網路中原始作法類似的方法,但將錨點更改為 [1.0,1.6,2.2,2.8,3.4]。 * **ReID**: * 使用隨機梯度下降(SGD)優化器並將初始 Learning Rate 設置為 0.1,每 8 個 epochs 衰減 0.5,共 96 個 epochs。 * ReID 子網的訓練 weight decay 設為 $5\times 10^{-4}$。 * mini-batch 設為 32。 * **SAC**: * 我們在 xgboost 框架下訓練了 SAC。 * Tree 的數量設置為 410。 * 最大深度為 5,學習率為 0.05,最小 Leaf 節點權重設置為 1。 * **Long Term Cues**: 可以將軌跡歷史的選擇間隔設置為 10 到 20。我們只是簡單地採樣 $K = 3$ 並設置 $δ=15$。 ### Evaluation on MOT Benchmarks #### Datasets * 我們提出的框架會根據 MOT16 和 MOT17 進行評估。 * 它們共享相同的測試影片,但提供不同的 Detection 輸入。 * MOT17 修復了 Ground Truth 並使其更加準確。 * 測試影片序列包括各種複雜的場景,仍然是一個很大的挑戰。 #### Evaluate Metrics * 在測試之後,我們使用 CLEAR MOT Metrics 評估我們的結果。在這些指標中,MOTA 和 IDF1 被認為是最重要的。 * MOTA 總結了 Recall、Precision 和 ID-Switch 的數量。 * IDF1 表示平均最大一致追蹤率。 * 在 MOT Tracker 的評估中,MOTA 的規範與 Detector 的 Recall 和 Precision 密切相關,而 ID-Switch 的影響遠遠小於它們。但是 IDF1 可以表明一致性。強大的 Tracking 系統應具有高MOTA 和 IDF1 分數。 #### Results ##### Online Mode ![](https://i.imgur.com/pRmEAKH.png) ##### Batch Mode ![](https://i.imgur.com/8Wed9wv.png) :::info :mag_right: * 上兩表是主要幾個在 MOT16 和 MOT17 的 SOTA 方法比較。 * 'with filter' 表示檢測器分數有被 refined。 * 'MOT16p' 表示有使用 Private Detection。 * 紅色表示是最好的結果。 ::: * 在具有 Private Detector 的 MOT16 的任務中,我們的 Tracker 與其他 KDNT、LMP_p、HT_SJTUZTE 和 POI trackers 皆使用由 POI tracker 的作者提出的相同 Detector。 * 結果表明,我們的框架在 MOT16 和 MOT17 測試中都優於許多以前最先進的 Tracker。 * Online / Batch 算法中,MOTA 和 IDF1 分數在 MOT16 / MOT17 中處於領先地位。我們的批處理算法在 MOT17 測試中還達到了最高的 MOTA。 ### Ablation Study and Discussion #### How do different cues influence the tracking quality? * 在 MOT16 訓練集上評估消融研究。 * 由於我們使用了訓練集進行驗證,因此我們在訓練子網路、SAC 和 Quality Filter 時,從訓練資料中排除了 MOT16 的訓練集,用於下圖中的所有消融研究結果。 * 對於分類器和 Quality Filter,我們在消融研究中使用額外 Private 訓練集。 ![](https://i.imgur.com/nZHdBTT.png) :::info :mag_right: (A) Baseline (手動) (B) 只有 Long-term cues \(C\) 只有 Short-term cues (D) Long-term, Short-term cues (E) Long-term, Short-term cues 加上 SAC ::: #### How does SAC work? * 我們還分析了對影片的真實影響。下圖顯示,通過 SAC,跟踪更加穩健。 * SAC 的主要貢獻在於它修復了許多 id-switch 問題。 * 使用 SAC 後,在 MOT16 Private Data 中,id-switch 數量從 642 減少到 569,IDF1 增加1.1%。 ![](https://i.imgur.com/B2V8ZoH.jpg) :::info :mag_right: * 上面那列為 ID Switch 的錯位狀況。 * 下面那列則是用 SAC 對相鄰 Frame 修正後的結果。 * 虛線就表示發生 ID-Switch 的情況。 ::: #### Can multiple cues been handle in one network? * 我們嘗試從 SOT 主幹 CNN 中提取一些特徵,並通過 ROI-Pooling 層與 ReID 分支相結合。實驗表明,ReID 和 SOT 任務的多任務訓練導致 SOT 和 ReID 準確度下降。 * 在 MOT 任務中通過多任務訓練網絡取代 Siamese-RPN,MOTA 減少 0.6%,IDF1 減少 2.5%。 * 原因是 SOT 任務需要背景知識,而 ReID 任務是不需要它,如果單個網絡用於兩個任務,則會在特徵學習期間引起衝突。 #### Why do we need small feature dimension? * 我們使用小維度的輸入特徵來平衡不同信息的特徵長度。由於運動和位置特徵通常很短。如果我們將它們與長外觀特徵相結合,則很難充分利用位置和運動特徵。 * 我們嘗試直接連接原始 ReID 特徵和短位置特徵,實驗結果表明,不平衡的輸入特徵使 IDF1 降低1.3%,MOTA降低 0.1%,IDS 數量增加 88。 * 我們認為位置和運動資訊很重要,應該通過減少外觀特徵的維度來強調它們。 * 另一個不可避免的問題是資料關聯的複雜性。簡短的特徵可以使程式更快。 #### Why we use boosting trees for classification? * 本文嘗試過其他不同的分類器,如 Neural Network of linear layers(NN)、Support Vector Machine(SVM),但是 Boosting Decision Tree(BDT) 是最好的。 * NN、SVM 和 BDT 的 MOTA 分別為 67.0%、67.6% 和 67.8%。我們發現,對於如此小的輸入特徵,神經網絡在這種小規模數據集上表現不佳。