# 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 的外觀描述。
### 整體設計

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

#### 基礎 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 解釋的更清楚。
:::


#### 短期特徵生成
* 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 的小架構。


#### Quality-aware long term tracklet history construction
* 為了獲得高品質的的 long term 線索,我們使用 quality 過濾器在 $K$ 段時期內選擇 $K$ 張最佳影像,所選的 K 張影像構成 target 追蹤歷史紀錄,其索引為 $\mathcal{H}=\{t_1...,t_K\}$。
 (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$ 的長期特徵:
 (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

##### Batch Mode

:::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 訓練集。

:::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%。

:::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%。我們發現,對於如此小的輸入特徵,神經網絡在這種小規模數據集上表現不佳。