# 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

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

- 如上圖所示,**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),如下圖所示。

:::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 仍然會遇到梯度消失的問題。

:::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 的係數,這部分就必須靠實驗來測試。

- 上面這張圖可看出當 $\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$

:::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$

:::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\%$

:::info
:bulb: Hard Negative mining ratio $r$ 在 MMCL 的影響
:::
- 當 $r=100$ 代表使用所有 Negative classes 都進行 loss 計算,可想而知效果極差。
- 隨著 $r$ 變小將使得 Negative mining 更加活躍且增加運行速度。
- 但若 $r$ 設太小,則能選擇的 Negative classes 太少,也會傷害到結果,根據上圖,本文是==設在 $r=1$。==
### Ablation Study

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

#### 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 最好。
### 與其他論文的比較

:::info
:bulb: Unsupervised person re-ID 在 Market-1501 和 DukeMTMC-reID 資料集上不同論文方法的比較
- 上半部是 Unsupervised Learning 的方法,下半部是基於 Transfer Learning 的方法
:::

:::info
:bulb: Unsupervised person re-ID 在 MSMT17 資料集上不同論文方法的比較
:::