---
# System prepended metadata

title: 'Person Recognition - MPLP, MMCL'
tags: [IVA, paper, PR]

---

# Person Recognition - MPLP, MMCL
> [name=謝朋諺(Adam Hsieh)]
> [time=Fri, Aug 7, 2020 11:04 AM]
###### tags: `paper`,`IVA`,`PR`

---

## Reference
> [Unsupervised Person Re-identification via Multi-label Classification](https://blog.csdn.net/sinat_42239797/article/details/105835002?utm_medium=distribute.pc_relevant.none-task-blog-title-2&spm=1001.2101.3001.4242)

---

# Unsupervised Person Re-identification via Multi-label Classification
[論文連結](https://arxiv.org/pdf/2004.09228.pdf)
{%pdf https://arxiv.org/pdf/2004.09228.pdf %}

## Outline
> [TOC]
 
## 摘要
- 無監督人員重新識別（ReID）的挑戰學習沒有真實 Label 的 Discriminative Features。
- 本文將 Unsupervised Person ReID 公式化為 multi-label classification 任務。
- 本文方法為每個人的影像分配一個單一類別的標籤，然後通過更新 ReID 模型進行標籤預測來發展為多標籤分類。
- 為了提高 ReID 模型在多標籤分類中的訓練效率，我們進一步提出了 **Memory-based Multi-label Classification Loss**（**MMCL**）。 
- MMCL 是使用 memory-based non-parametric classifier，並將==多標籤分類==和==單標籤分類==整合在一個統一的框架中。
- 在多個大型 ReID 資料集上進行的實驗證明了我們的方法在 Unsupervised Person ReID 中的優越性。

## 本文目標
### 1. 不利用任何標記資料的情況下提高 Unsupervised Person ReID
![](https://i.imgur.com/K5AmtQq.png)
:::info
:bulb: 無監督式 ReID 的多標籤分類
- 本文目標是對每個未標籤人的影像做多分類的標籤，以辨識此人的身份。
- 可透過多次迭代 MPLP 進行預測和 MMCL 進行 multi-label classification loss。
- 此過程會主導 CNN 來產生 ReID 的區別特徵。
:::
1. 將每個未標記的行人影像視為一個類，並訓練 ReID 模型為每個影像分配一個多類標籤，也就是說訓練模型將==多張影像分為同一類的能力==。
2. 多標籤分類可以有效地識別相同身份的影像，並將影像與不同身份區分開來，也就是==有助於優化類間和類內的距離==。

### 2. 迭代預測 multi-class labels 並使用 multi-label classification loss 更新網路
1. 本文提出了 **Memory-based Positive Label Predicition** (**MPLP**) 的方法，考慮了==視覺相似性==跟==循環一致性==，也就是說若兩個影像:
    - ==**具有很大的相似度**==
    - ==**或是很相似的鄰居**==

    這兩者就會有相同的分類標籤。
2. 為了進一步確保標籤預測的準確性，MPLP 會利用儲存在記憶體中的影像特徵，在每次迭代中使用 ==Augmented Features== 來進行更新，以提高他的穩定性。
3. 由於每個影像都視為一個類別，因此大量的類別使得難以訓練在像是 Fully Connected Layer 上。
4. 如上圖所示，本文採用儲存在記憶體中的每張影像特徵作為分類器，MMCL 通過:
    - ==放棄使用 Sigmoid function== 
    - ==分類的分數強制為 1 或 -1==
    
    從而加速了傳統多標籤分類 loss 的計算時間和解決梯度消失的問題。
5. MMCL 還涉及 ==Hard Negative== 類別挖掘的問題，以解決 Positive class 跟 Negative class 不平衡的問題。

## Methodology
### Formulation
- 對未被標記的行人影像資料集 $\chi=\{x_1,x_2,...,x_n\}$，對每個 query image $q$ 透過模型產生特徵向量，再從圖庫 $G$ 中檢索出同一個人的影像 $g$，換句話說就是要使得 ReID 模型確保 $q$ 與 $g$ 要比其他 $G$ 的任何影像有更多的相似特徵，公式如下：$$g^*=arg\ min_{g\in G}dist(f_g,f_q)$$
    - 其中 $f\in R^d$ 是藉由 ReID 模型產生的 $d$ 維 L2-normalized 特徵向量
    - $dist(.)$ 是距離矩陣，這邊是用 L2 距離公式計算。
- 為了訓練資料集 $\chi$ 我們先將每張影像視為一個單獨的類別並且分配 $x_i$ 有一個 $y_i$ 的 label 這個假 label，因此就將資料集 $\chi$ 轉換為帶 label 的資料集，$y_i$ 初始化為二元向量，其中只有指標 $i$ 的值設置為 1，其他值設為 -1，公式為：$$y_i[j]=\left\{\begin{array}{cc}1& j=i\\-1 & j\neq i\end{array}\right.$$
- 由於每個人可能都有多張影像在 $\chi$ 中，因此初始向量對表示行人的身份是沒有價值的，Label prediction 需要分配多類別的標籤給每個影像，這樣才可用於 multi-label classification loss，==可以藉由參考 $x_i$ 的特徵 $f_i$ 與其他影像的特徵來預測 $x_i$ 的 label，並找到擁有一致性的特徵群體==，但由於 $\chi$ 中的影像太多會產生過多的類別，因此很難訓練 multi-label classification，一個有效的解法是使用 $f_i$ 作為第 $i$ 類的分類器，因此他計算任何影像 $x_i$ 的分類分數就會為：$$c_j[i]=f_i^\top\times f_j$$
    - 其中 $c_j$ 代表 $x_j$ 的 multi-label classification score。
- label prediction 跟 multi-label classification 都需要影像特徵，因此我們引入了一個 $n \times d$ 的 memory bank $\mathcal{M}$ 來儲存這些特徵，其中 $M[i]=f_i$，有了 $\mathcal{M}$ 就可以使用我們提出的 MPLP 和 MMCL 來做 ReID 訓練。

![](https://i.imgur.com/K5AmtQq.png)

- 如上圖所示，**MPLP** 使用 single-class label 作為輸入並基於 memory bank $\mathcal{M}$ 輸出 multi-label 的預測結果 $\bar{y_i}$: $$\bar{y_i}=MPLP(y_i,\mathcal{M})$$
- **MMCL** 藉由影像特徵 $f$, label $\bar{y}$ 和 memory bank $\mathcal{M}$ 計算 **multi-label classification loss**：$$\mathcal{L}_{MMCL}=\sum_{i=1}^n\mathcal{D}(\mathcal{M}^\top\times f_i,\bar{y}_i)$$
    - $\mathcal{M}^\top\times f_i$ 計算分類分數
    - $\mathcal{D}(.)$ 藉由比較分類分數和預測的 label 來計算 loss
- 每次訓練迭代會對 $\mathcal{M}$ 更新：$$\mathcal{M}[i]^t=\alpha\cdot f_i+(1-\alpha)\cdot\mathcal{M}[i]^{t-1}$$
    - 其中上標 $t$ 代表第 $t$ 個 training epoch
    - $\alpha$ 是更新率
    - $\mathcal{M}$ 經過 L2-normalized 來標準化他 $\mathcal{M}[i]^t\leftarrow||\mathcal{M}[i]^t||_2$
- 本文使用 data augmentation 技術強化 $\mathcal{M}$，每個 $\mathcal{M}_i$ 結合了 $x_i$ 不同形式增強後的特徵，以此來增強他的穩定性。
- MPLP 同時考慮了相似性和 cycle consistency 來預測 $y_i$，從而使其比分類分數更準確，並在上述的 $\mathcal{L}_{MMCL}$ 公式裡計算 Loss 來有效地增強 ReID 模型，而後者又對 $\mathcal{M}_i$ 和 label 預測產生反饋，此循環因此可以讓 Unlabeled dataset 訓練得到好的結果。

### Memory-based Positive Label Prediction（MPLP）
- 如此式 $\bar{y_i}=MPLP(y_i,\mathcal{M})$ 必須對影像 $x_i$ 定二元初始值 $y_i$，==**MPLP** 目的是尋找 $x_i$ 可能屬於其他類別==，**MPLP** 首先根據 $x_i$ 與其他特徵之間的相似性計算 rank 列表 $R_i$：$$R_i=arg_jsort(s_{i,j}),j\in[1,n]$$ $$s_{i,j}=\mathcal{M}[i]^\top\times\mathcal{M}[j]$$
    - 其中 $s_{i,j}$ 表示為 $x_i$, $x_j$ 的相似性分數
- $R_i$ 可以找到 $x_i$ 可靠標籤的候選者，但有可能因為光照, 視角, 背景等等而降低候選者排名，為了確保 label 預測的品質，**MPLP** 會參考 **similarity score** 和 **cycle consistency** 來預測 label。

#### 透過 **Similarity Score** 過濾 Label
- 首先根據 $x_i$ 的排名列表為 $x_i$ 選擇 Positive label，並給定一個相似度分數閾值 $t$，==移除相似度小於 $t$ 的標籤生成 $k_i$ 個候選 label==：$$P_i=R_i[1:k_i]$$
    - 其中 $R_i[k_i]$ 是相似度得分高於 $t$ 的最後一個 label
    - $P_i$ 是 $x_i$ 候選 label 的集合
    - 這個部分決定了候選 label 的數量，且這種自適應的方式比選擇固定數量標籤的方式更好 (KNN)，如下圖所示。

![](https://i.imgur.com/cVNbl7d.jpg)
:::info
:bulb: 藉由 **MPLP** 做 Label 預測的說明。
(a) 說明了 **MPLP** 在尋找 True positive 時的 Precision, Recall 都優於 KNN。
(b) 說明了 **MPLP** 在處理 hard negative label 的時候也能有效地分辨出來。
:::

#### 透過 **Cycle Consistency** 過濾 Label
- 如果兩個影像屬於同一類，則他們的 neighbor 圖片集也應相似，憑此想法因此提出了 cycle consistency 來過濾在 $P_i$ 中的 hard negative labels，**MPLP** 從頭到尾計算 $P_i$ 中最接近的 $top-k_i$ label，公式就是之前提到過的：$$R_i=arg_jsort(s_{i,j}),j\in[1,n]$$ 
- 如果 label $i$ 也是 $j$ 的 $top-k_i$ 的 label 之一，則 $j$ 就被認為是 $x_i$ 的 Positive label，否則視為 hard negative label。
- 當發現第一個 hard negative label 時就停止繼續，這樣就可以產生一個 Positive label set $P_i^*$ 還有一個 hard negative label 影像 $x_i$，定義 Positive label set 為：$$P_i^*=P_i[1:l]$$
    - 其中 $l$ 滿足 $i\in R_{P_i[l]}[1:k_i]\ \&\ i\notin R_{P_i[l+1]}[1:k_i]$
    - 由於 $P_i$ 包含 $l$ 個 labels，因此 $x_i$ 將被分配一個有著 $l$ 個 Positive classes 的 multi-class label $\bar{y_i}$：$$\bar{y_i}[j]=\left\{\begin{array}{cc}1& j\in P_i^*\\-1 & j\notin P_i^*\end{array}\right.$$

### Memory-based Multi-label Classification Loss（MMCL）
#### 傳統 multi-label classification loss 的問題
:::danger
:boom: **1. 梯度消失跟 sigmoid 問題**
:::
- 在傳統 multi-label classification 方法中，Sigmoid 和 Logistic regression loss 是常見的選項，假如你有 $n$ 個類別，則就會採用 $n$ 個二元分類器進行分類，將影像 $x_i$ 分類成第 $j$ 類得 Loss 可表示為：$$l(j|x_i)=log(1+exp(-\bar{y_i}[j]\times \mathcal{M}[j]^\top\times f_i))$$
    - 其中 $\mathcal{M}[j]^\top\times f_i$ 負責計算影像 $x_i$ 在第 $j$ 類的分類分數
    - $\bar{y_i}[j]$ 是 $x_i$ 影像在第 $j$ 類的 label
- 在 single-class 的 loss 可以得到 Multi-label Classification（MCL）loss：$$\mathcal{L}_{MCL}=\sum_{i=1}^n\sum_{j=1}^n l(j|x_i)$$
    - $n$ 是資料集 $\chi$ 中的影像數量，也等於我們的類別數量。
- 因為 $\mathcal{M}[j]^\top$ 和 $f_i$ 被 L2 標準化分數介於 $[-1,1]$ 之間，這限制了 sigmoid function 的範圍，即使對於正確的分類，也使 loss 不為 0，這個議題就必須==透過在分類分數上引入一個 $\tau$ 來解決==：$$l_\tau(j|x_i)=log(1+exp(-\bar{y_i}[j]\times \mathcal{M}[j]^\top\times f_i/\tau))$$
- 將相應的 MCL Loss 表示為 $\mathcal{L}_{MCL-\tau}$，而他的 gradient 可表示為：$$\dfrac{\partial \mathcal{L}_{MCL-\tau}}{\partial f_i}=-\dfrac{exp(-\bar{y_i}[j]\mathcal{M}[j]^\top f_i/\tau)}{1+exp(-\bar{y_i}[j]\mathcal{M}[j]^\top f_i/\tau)}\dfrac{\bar{y_i}[j]\mathcal{M}[j]}{\tau}$$
- 有上述的公式後就可以解釋下面這張圖為何 $\tau$ 有不同值時 $\bar{y_i}[j]=1$ 的情況會有不同的 gradient，從圖中可看出分類分數大於 0.25 或 -0.25 更新後的 MCL loss 仍然會遇到梯度消失的問題。
![](https://i.imgur.com/Wyr22FS.jpg)
:::info
:bulb: 對於 $MCL_{-\tau}$ 和 MMCL 的 Gradient 分析，可以很明顯看出 MMCL 沒有遭受到梯度消失的問題。
:::
:::danger
:boom: **2. 正負樣本不平衡**
:::
- 另一個 MCL Loss 的問題就是我們的任務包含大量類別，所以==正負樣本非常不平衡==，在上面公式中若以平等方式對待他們，可能會導致模型崩潰。

#### Memory-based Multi-label Classification Loss
:::success
:star2:	 **1. 解決梯度消失跟 sigmoid 問題**
:::
- 由於分數是介於 $[-1,1]$ 之間，本文直接放棄 sigmoid 並且直接計算 regression 分類分數到 1 和 -1 的 loss，這不只簡化了 loss 計算還改進了訓練效率，將影像 $x_i$ 分類為 $j$ 的 loss 可以列為：$$l^\star(j|x_i)=||\mathcal{M}[j]^\top\times f_i-\bar{y}_i[j]||^2$$
    - $f_i$ 代表影像 $x_i$ 的特徵

:::success
:star2:	 **2. 解決正負樣本不平衡問題**
:::
- MMCL 引入了 hard negative class 探勘來解決它，在我們的 multi-label classification 訓練中會更多地專注在 hard negative class 的問題，對於 $x_i$，他的負樣本可以表示為：$$R_i\setminus P_i^*$$
- 根據他們的分類分數對此做排序，並選擇 top $r\%$ 的類別作為 hard negative classes，$x_i$ 的 hard negative classes 集合可表示為：$$|N_i|=(n-|P_i^*|)\cdot r\%$$
- 而 **MMCL** 根據 Positive classes 和 sampled hard negative classes：$$\mathcal{L}_{MMCL}=\sum_{i=1}^{n}\dfrac{\delta}{|P_i^*|}\sum_{p\in \mathcal{P}_i^*}l^*(p|x_i)+\dfrac{1}{|N_i|}\sum_{s\in N_i}l^*(s|x_i)$$
    - 其中 $\delta$ 是重要衡量正負樣本 loss 的係數，這部分就必須靠實驗來測試。

![](https://i.imgur.com/Wyr22FS.jpg)
- 上面這張圖可看出當 $\bar{y_i}[j]=1$ 時，也類似地說明了 $\mathcal{L}_{MMCL}$ 的梯度變化，公式可列為：$$\partial\mathcal{L}_{MMCL}/\partial f_i=2\delta(\mathcal{M}[j]^\top \times f_i-\bar{y_i}[j] \mathcal{M}[j])$$

#### Discussions
- 從上面那張圖可看出 MMCL 解決了梯度消失的問題，由於梯度消失，$\mathcal{L}_{MCL-\tau}$ ==不會強制分類器對分數高的正樣本進行分類，這對降低類別內的變異度是有害的==。
- 從上圖還可得知 $\delta$ 可控制 MMCL 的梯度變化。
- 根據以前的研究，當分類分數接近決策邊界時 Mean Square Loss 不如基於對數的 loss (Cross Entropy)，不過透過 $\delta$ 縮放 gradient 大小可以有效地解決這個問題。
- 通過==採用 hard negative class mining 策略==，解決那些存在不平衡問題的資料，MMCL 不僅適用於 multi-label classification 也適用於 single-label classification。
- 與 Cross Entropy 相比 ==MCL 以及 MMCL 放棄了 Softmax 和 Sigmoid 的 Activation function，從而提高計算效率==，很多的研究都顯示大量的類別會降低 Softmax 的計算速度。

### Transfer Learning with Labeled Dataset
- 給定一組包含已 label 的行人影像資料集，可以透過常用的 Cross Entropy loss 和 Triplet loss 來訓練模型，這組訓練的 loss 可以被定義為 $\mathcal{L}_{labeled}$。
- Transfer Learning 的整體訓練 loss 可以被表示為 MMCL 和 labeled data 的 loss 之和：$$\mathcal{L}_{transfer}=\mathcal{L}_{labeled}+\mathcal{L}_{MMCL}$$

## Experiments
### Datasets
- **Market-1501:** 包含 32,668 已標記人的影像，共有 1,501 個行人來自不重疊的 6 個相機。
- **DukeMTMC-reID:** 包含 36,411 已標記人的影像，共有 1,404 個行人來自 8 個相機。 
- **MSMT17:** 包含 126,411 已標記人的影像，共有 4,101 個行人來自 15 個相機，這份資料集的場景和照明變化巨大，所以比起前面兩個更具挑戰性。
- 這三份資料集都在類似的場景：**校園**，因此有機會執行 Transfer Learning。

### Evaluation Metrics
使用標準的常用的 **Cumulative Matching Characteristic (CMC)** 和 **mean Average Precision (mAP)**。

### Implementation Details
- **Framework**: Pytorch
- **Backbone**: ResNet-50 (預訓練在 ImageNet)，在 Pooling-5 layer 後刪除後面的所有 layer 並加入一個 Batch Normalization，該 Layer 會產生一組 2048 維的特徵，==在 testing 階段會直接抽取 Pooling-5 layer 的輸出當特徵進行距離計算==
- **Memory Bank**: 在 Multi-label classification 階段會分配一個 memory bank 來儲存 L2 Normalized 的影像特徵，memory bank 一開始被初始化為 0，當 memory 被更新了 5 次時才開始使用 MPLP 進行 Label Prediction。
- **Data Augmentation**: 
    - random crop
    - random rotation
    - color jitter
    - random erasing
- **Hyper Parameter**: 
    - 影像輸入大小：$256*128$
    - Optimizer：SGD
    - Initial Learning Rate: 一開始對 ResNet-50 為 0.01，其餘皆為 0.1。
    - Memory Updating Rate $\alpha$：從 0 線性成長到 0.5。
    - Epoch：60
    - Updating Learning Rate：每 40 個 epoch 之後 Learning Rate 除以 10
    - Batch Size：128
    - MPLP 中的相似性閾值 $t$：0.6
    - MMCL 中的 $\delta$：固定為 5
    - top $r\%$ 的視為 Hard Negative Class：這邊設為前 $1\%$
- **Transfer Learning**：使用一樣的 Batch Size 128 在 Labeled dataset 上，在模型的 Batch Normalization Layer 後面加一層 Fully Connected Layer 來做分類問題。

### Parameter Analysis
#### 1. Similarity threshold $t$
![](https://i.imgur.com/wSuqbKV.png)
:::info
:bulb: 相似分數閾值 $t$ 對 MPLP 的評估
:::
- 我們改變閾值 $t$ 從 0.3~0.7 並用來測試模型的效果。
- 低相似分數閾值 $t$ 會傷害到模型的效能 $[0.3,0.5]$，這是因為引入了許多 Negative Labels。
- 高相似分數閾值 $t$ 可以選擇更精確的 Label，然而，過大的 $t$ 會減少 Labels 的選擇數量，而==目前最好的閾值是設定在 $t=0.6$==。

#### 2. Coefficient $\delta$
![](https://i.imgur.com/5YMzMfl.png)
:::info
:bulb: MMCL 的相關係數 $\delta$ 的分析結過
:::
- $\delta$ 對 MMCL 有一定的影響，$\delta=1$ 也就代表直接不縮放 gradient，這種情況下 MMCL 不能產生大的 gradient 將正樣本拉近，可看到 Market-1501 在 Rank-1 只有 59.3%，DukeMTMC-reID 則只有 52.6%。
- 然而過大的 $\delta$ 可能會使訓練不穩定，在這邊==我們設置 $\delta=5$。==

#### 3. Hard negative mining ratio $r\%$
![](https://i.imgur.com/VbeRzJZ.png)
:::info
:bulb: Hard Negative mining ratio $r$ 在 MMCL 的影響
:::
- 當 $r=100$ 代表使用所有 Negative classes 都進行 loss 計算，可想而知效果極差。
- 隨著 $r$ 變小將使得 Negative mining 更加活躍且增加運行速度。
- 但若 $r$ 設太小，則能選擇的 Negative classes 太少，也會傷害到結果，根據上圖，本文是==設在 $r=1$。==

### Ablation Study
![](https://i.imgur.com/nqfubqV.png)
:::info
:bulb: 測試 MMCL 和 MPLP 不同的結果。
- $\dagger$ 代表不使用 Data Augmentation 的結果。
:::
- 我們把 ImageNet 預訓練的 model 當作 Baseline。
- Supervised Learning 的結果還是相對較高。
- 使用 Single Label 偽 Label 的 MMCL 可以提高 baseline 效能，這也表明利用 Unlabeled Data 是有幫助的。
- 若將本文提供的 MMCL+MPLP 效能又會更加提升。
- 之後再加上 Data Augmentation 因為資料的多樣性導致模型可以有更高的穩定。

![](https://i.imgur.com/d3sUKVN.png)

#### Effectiveness of MPLP
- 這部分主要是比較 MPLP 與其他幾種方法預測 Label 的結果，如上表 (a) 部分的 KNN Search 和 Selection by Similarity Score(SS)。
- 在 KNN 的 $K=8$ 可以得到 KNN 最佳的結果。
- SS 的結果又更勝於 KNN，主要是因為它可以透過相似度閾值適當地選擇正樣本，比起對不同影像還設定固定正樣本數量還要更合理。
- 而 MPLP 結合 ==Cycle Consistency 和 Similarity Score== 可以有效地確保預測 Label 的品質。

#### Effectiveness of MMCL
- 這部分主要驗證 MMCL 與其他幾種方法是否真的較好，在這邊主要是跟 Cross Entropy (CE) 來做比較，如上表 (b) 的部分。
- 不論是搭配 Single Label, MPLP 甚至是直接拿 Ground Truth 效果都是 MMCL 最好。

### 與其他論文的比較
![](https://i.imgur.com/1um3fZ9.png)
:::info
:bulb: Unsupervised person re-ID 在 Market-1501 和 DukeMTMC-reID 資料集上不同論文方法的比較
- 上半部是 Unsupervised Learning 的方法，下半部是基於 Transfer Learning 的方法
:::
![](https://i.imgur.com/xqt1Nyd.png)
:::info
:bulb: Unsupervised person re-ID 在 MSMT17 資料集上不同論文方法的比較
:::