# 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 資料集上不同論文方法的比較 :::