今天來介紹一下《Beyond Part Models: Person Retrieval with Refined Part Pooling

(and A Strong Convolutional Baseline)》這篇論文,本文只是簡單介紹,如果對該論文的細節感興趣,請閱讀該論文,如果本文存在不恰當的地方還望指出。

0 Abstract

在行人檢索中使用part-level features會給description提供細粒度(fine-grained)的信息。而part-level features能發揮作用的前提是每一個part都需要有正確的定位。人體姿勢估計(human pose estimation)是定位part的其中一種方法,但該論文利用的是每個part內部的上下文信息的一致性(content consistency)。

該論文主要有兩點contributions,一是設計了PCB(Part-based Convolutional Baseline)網路,其輸入是一張圖像,輸出是包含數個均分的part-level的descriptor。二是提出了RPP(Refined part pooling)方法,由於PCB採用的是均分特徵圖的策略,這樣就不可避免地在各個part中引入了outliers(outliers指的是其應該屬於其他的part,因為在信息的一致性上更接近於其他的part),於是作者提出了RPP來重新分配這些outliers。

1 PCB: A Strong Convolutional Baseline

Structure of PCB

PCB選用ResNet50做為backbone network,PCB在ResNet50的基礎上做了些修改。RestNet50 GAP(global average pooling)之前的層保持不變,PCB修改的是GAP層以及之後的層。

首先,輸入的圖像經過backbone network得到tenor T,定義channel維的列向量為f。然後,PCB把T水平均分成p份,經過average pooling得到p個列向量g,再使用1*1的卷積核降維得到p個比g低維的h。最後,每個h輸入到由FC(fully-connected layer)和Softmax function構成的classifier中,從而預測輸入的ID(注意,這裡有p個參數不共享的classifier,實驗發現參數不共享的效果更好)。

在訓練時,PCB使用p個classifier的交叉熵(Cross-Entropy)的和做為損失函數。

在測試時,PCB可以選擇把p個g或者p個h進行連接得到最後的descriptor G 或者 H,其中G=[ g_{1}, g_{2} , cdotcdotcdot , g_{p}], H=[ h_{1}, h_{2} , cdotcdotcdot , h_{p}]。

2 Refined Part Pooling

PCB的均分策略是簡單的、有效的,並且仍可以進行改進(Refined)從而有所提升的。

2.1 Within-Part Inconsistency

在PCB中,T是被均分成p個part的。而這樣的直覺是同一個part中的f理應是近似的,不同part中的f是不相似的,而事實卻不是如此。

作者做了一個這樣的實驗,在訓練PCB收斂之後,然後計算每個f和 g_{i} (i=1, 2, ..., p)的相似度,例如可以使用餘弦距離(cosine distance)做為度量標準。

把p設置為6,並繪製出每個f最接近的g_{i},在這裡,用顏色相同來表示f屬於哪個part。

通過上圖,可以得出兩點結論,一是在同一個part中的大部分f是最近似的,二是有些f似乎和其他的part更近似,這就是論文所說的Within-Part Inconsistency現象。例如,左上角那個藍色的f就是outlier,它在位置上屬於Part1,但在語義上更接近Part5。

2.2 Relocating Outliers

既然存在Within-Part Inconsistency的問題,那麼可以重新分配outliers的位置從而解決這個問題,於是作者提出了RPP。

添加了RPP的PCB修改成下圖的結構:

此結構相對於原來的PCB結構的變化是把原來的average pooling變成了GAP並添加了part classifier。

首先,在PCB收斂的基礎上,對T中的每個f執行分類的操作,具體操作可以看如下公式: P(P_{i}|f) = softmax(W_{i}^{T}f) = frac{exp(W_{i}^{T}f)}{sum_{j=1}^{p}{exp(W_{j}^{T}f)}}

其中 W_{i} 是全連接層的參數矩陣,上面的這個公式是預測每個f屬於 P_{i} 的概率。

然後,使用如下的公式來計算每個 P_{i} 的值:

P_{i} = left{ P(P_{i}|f) 	imes f,  forall f in F
ight}

其中 F 是tensor T的集合。這個公式的具體含義是對所有的f進行加權得到 P_{i} ,而這個權重是f屬於該 P_{i} 的概率。

通過上述的操作,RPP修正了由於PCB的均分策略而產生的outliers。

2.3 Induced Training for Part Classifier

這部分主要介紹如何來訓練part classifier中的 W 參數。具體演算法如下:

step1:訓練標準的PCB至收斂

step2:移除PCB中T後面的average pooling層並添加part classifier 和GAP

step3:固定PCB中除了part classifier以外的所有其他參數,在數據集上重新訓練step2中的PCB至收斂

step4:在數據集上微調整個網路的所有參數至收斂

3 Conclusion

論文主要有兩點貢獻,一是提出了PCB學習part-level features,二是提出了RPP進一步提升了PCB的性能。


推薦閱讀:
相关文章