---
# System prepended metadata

title: Tracking - LSST
tags: [IVA, paper, track]

---

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