天天看點

[FSOD][筆記]Context-Transformer: Tackling Object Confusion for Few-Shot Detection(AAAI 2020)

[FSOD][筆記]Context-Transformer: Tackling Object Confusion for Few-Shot Detection(AAAI 2020)

論文題目: Context-Transformer: Tackling Object Confusion for Few-Shot Detection

論文位址:https://arxiv.org/pdf/2003.07304.pdf

簡介

本文讨論了如何将遷移學習用在小樣本目标檢測任務上。若使用遷移學習,通常的做法是使用target-domain的資料對source-domain的檢測器進行微調。但是由于小樣本任務中,target-domain的資料非常少,會導緻檢測器分類失敗。為了解決這個問題,作者提出了一個Context-Transformer子產品,用以增強分類性能。

動機

作者為什麼要提出Context-Transformer子產品,以及這個子產品是如何增強檢測器分類性能的呢?

作者認為,在小樣本目标檢測任務中,定位是沒太大問題的,隻是分類有困難。為什麼會出現這種情況呢?因為目标檢測采用BBOX用于定位,OBJ+BG用于分類(BBOX指bounding box,OBJ指目标,BG指背景)。其中,BBOX和類别無關,是以直接用source-source BBOX沒有太大問題,但是OBJ+BG是類别相關的,對于新的類别是會被随機初始化,如果标注量不足,會導緻新類别的目标難以區分。

是以應該如何解決目标難以區分這個問題呢?人類識别一個物體,除了觀察物體本身的特征,還會利用周圍的環境作為線索,對物體類别進行推測。比如一張圖上有個動物,通過動物的外觀很難區分是狗還是馬,如果圖上有人騎在動物上,并且還有一大片草地,難麼這個動物是馬的可能性很大。

如果模仿人類的這個思考過程,會不會讓模型的分類性能提高呢?是以作者設計了Context-Transformer子產品來模仿人類的思考過程。首先從周圍環境尋找與待識别目标相關聯的目标作為線索,然後将線索作為附加資訊,用以增強待識别目标的特征,最後和BG一起送入分類器進行分類,使得分類性能提升。

架構

[FSOD][筆記]Context-Transformer: Tackling Object Confusion for Few-Shot Detection(AAAI 2020)

圖1

總體架構如圖,分為上下兩個部分。上半部分是正常的檢測架構(本文用了SSD),下半部分為Context-Transformer子產品。首先将target-domain的image輸入在source-domain上訓練好的SSD,然後将SSD其中一個輸出OBJ輸入Context-Transformer子產品做一個特征增強,然後将增強後的特征和BG一起送入分類器進行分類。

細節

Context-Transformer子產品
[FSOD][筆記]Context-Transformer: Tackling Object Confusion for Few-Shot Detection(AAAI 2020)

圖2

Context-Transformer子產品的輸入有兩部分:Prior Box(所有待分類的proposal)和Contextual Field(周圍環境與Prior Box相關聯的全部proposal)。Contextual Field是如何獲得的呢?文中直接取所有的Prior Box做了pool作為Contextual Field(做pool的原因是作者認為可以不用過多關注細節)。

再來看一下細節。

1.P和Q分别代表一張輸入圖像的k個空間尺度上所有像素點的m個候選區域的集合reshape成的向量。具體表示如下:

P ∈ R D p × C s , Q ∈ R D q × C s P\in R^{{}^{D_{p}\times C_{s}}},Q\in R^{{}^{D_{q}\times C_{s}}} P∈RDp​×Cs​,Q∈RDq​×Cs​

其中,

D p   =   ∑ k = 1 K H k × W k × M k D_{p}\ =\ \sum\nolimits^{K}_{k=1} H_{k}\times W_{k}\times M_{k} Dp​ = ∑k=1K​Hk​×Wk​×Mk​

D q   =   ∑ k = 1 K U k × V k × M k D_{q}\ =\ \sum\nolimits^{K}_{k=1} U_{k}\times V_{k}\times M_{k} Dq​ = ∑k=1K​Uk​×Vk​×Mk​

2.Affinity Matrix

矩陣A的每一列代表所有待分類的proposal,每一列代表待分類的proposal和它的Contextual之間的相關度分數。

A   =   f ( P ) × g ( Q ) ⊤ , A ∈ R D p × D q A\ =\ f\left( P\right) \times g\left( Q\right)^{\top } ,A\in R^{D_{p}\times D_{q}} A = f(P)×g(Q)⊤,A∈RDp​×Dq​

3.L

有了Affinity Matrix後,對于每一個proposal,都要計算所有proposal對應的Contextual的資訊的權值向量L(講道理,對于每個目标來說,圖像上的任何BBOX都有可能包含它,包含的越多,相關度分數越高,那麼這個BBOX中的其它目标與它相關度越高,我感覺這裡相關度高的邏輯是空間位置上越近越相關),這樣一來,L的每一行都包含了距離這個proposal中待分類目标空間位置比較近的其它目标的資訊。

L ( i , : ) = s o f t m a x ( A ( i , : ) ) × h ( Q ) L\left( i,:\right) =softmax\left( A\left( i,:\right) \right) \times h\left( Q\right) L(i,:)=softmax(A(i,:))×h(Q)

4.對proposal資訊進行增強後送去分類

增強後的資訊:

P ^   =   P + ϕ ( L ) \hat{P} \ =\ P+\phi \left( L\right) P^ = P+ϕ(L)

分類:

Y ^   = s o f t m a x   ( P ^ × Θ ) \hat{Y} \ =softmax\ \left( \hat{P} \times \Theta \right) Y^ =softmax (P^×Θ)

實驗

資料集

source-domain:COCO中與VOC07+12不重疊的60類所涵蓋的圖檔

target-domain:VOC07+12

Context-Transformer

1.Context-Transformer子產品對模型性能的影響

[FSOD][筆記]Context-Transformer: Tackling Object Confusion for Few-Shot Detection(AAAI 2020)

表1

Baseline表示隻用最原始的fine-tune方法,OBJ(S)代表保留source的OBJ。從表格中可看出,保留source的OBJ可以減輕過拟合,添加Context-Transformer子產品可以減輕目标分類混淆的情況,它們都能提升mAP。作者還在test的時候移除了Context-Transformer子產品,名額僅比在test階段使用Context-Transformer子產品略有下降,說明訓練階段使用的Context-Transformer子產品使得檢測器泛化能力增強。

2.Context-Transformer子產品設計細節

[FSOD][筆記]Context-Transformer: Tackling Object Confusion for Few-Shot Detection(AAAI 2020)

表2

1)是否使用pool?

實驗表明使用pool效果更好,因為找relation不需要過多關注細節,是以使用pool是可行的。而使用pool之後,由于context小了,學習的難度下降,是以性能提升。

2)是否需要使用fc?

實驗表明使用fc效果更好,因為fc增加了學習的靈活度。如果使用residual FC效果更更好,因為residual減少了小樣本場景下初始化的随機性。

3)計算兩個embedding的距離用Euclidean好還是用Cosine好呢?

實驗表明不論選哪種,效果都差不多。

4)要不要利用source的OBJ呢?

實驗表明利用了source的OBJ效果更好

shot數目的影響
[FSOD][筆記]Context-Transformer: Tackling Object Confusion for Few-Shot Detection(AAAI 2020)

表3

從表3可看出,增加shot并沒有提升,shot增加一定量的時候,模型的性能趨于穩定。作者的解釋是shot量足夠的時候,造成目标confusion的原因消失了,這時候Context-Transformer子產品對于減輕confusion的作用已經很小了,是以性能沒有變化。但是總體看,mAP還是比baseline提升了,說明在訓練時使用Context-Transformer子產品确實泛化了檢測模型。

注:我認為Context-Transformer子產品并沒怎麼減輕目标confusion,可以看表1的最後兩行,添加與不添加Context-Transformer子產品僅差了0.4個點,這個作用已經非常小了。

和其它方法對比

1.與SSD架構對比

[FSOD][筆記]Context-Transformer: Tackling Object Confusion for Few-Shot Detection(AAAI 2020)

表4

對比了2個比較早期的基于SSD檢測方法,提升了好幾個點。

2.使用其它few-shot learner替換Context-Transformer

[FSOD][筆記]Context-Transformer: Tackling Object Confusion for Few-Shot Detection(AAAI 2020)

表5

從結果看出,還是Context-Transformer性能最好,說明一般的小樣本分類方法對于提升檢測器比不過本文方法。而其中比Non-local方法要好,說明這個子產品可以減輕目标混淆(因為Non-local沒有用到context資訊)。其實這樣看來,我又有點相信Context-Transformer能減輕目标混淆了,之是以表1看起來這麼不明顯,可能可以了解為相對于檢測器泛化性能提升,減輕混淆這個提升比較小。

Context資訊的作用

1.Context Affinity

學到的Context對識别目标有沒有幫助呢?作者可視化了與目标最相關的proposal:

[FSOD][筆記]Context-Transformer: Tackling Object Confusion for Few-Shot Detection(AAAI 2020)

圖3

從圖中可以看出,Baseline錯誤的把car識别成了train,把hourse識别成了dog。而本文的模型利用了周圍環境,比如說識别hourse的時候,周圍有人,通過人這個線索,沒有把hourse錯誤的識别成了dog,說明context是起到作用的。

2.可視化檢測結果

[FSOD][筆記]Context-Transformer: Tackling Object Confusion for Few-Shot Detection(AAAI 2020)

圖4

看效果,不但類别更正确了,連位置都更準了。比如baseline裡的boat頂部,BBOX就沒能把它全部框住,而本文方法框的更準确了

3.可視化mAP前4的類别定位和分類正誤情況

[FSOD][筆記]Context-Transformer: Tackling Object Confusion for Few-Shot Detection(AAAI 2020)

圖5

從圖中看出,定位和分類都正确的數目比baseline多。正确定位錯誤分類的比baseline少,證明分了性能是改善了,錯誤定位baseline和本文方法的數目都少,說明定位錯誤的情況出現少,問題還是集中在分類上。

繼續閱讀