> [name=謝朋諺(Adam Hsieh)] > [time=Thu, Nov 19, 2020 3:09 PM] --- ## Reference > [Probabilistic Anchor Assignment with IoU Prediction for Object Detection论文阅读翻译 - 2020ECCV](https://blog.csdn.net/chrisitian666/article/details/108265302) > [(三十七)论文阅读 | 目标检测之PAA](https://blog.csdn.net/Skies_/article/details/108992149?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control) > [目标检测 PAA 概率anchor分配算法(Probabilistic Anchor Assignment Algorithm)](https://blog.csdn.net/flyfish1986/article/details/109680310) > [目标检测 PAA - 高斯混合模型(GMM)和期望最大化算法(EM algorithm)](https://blog.csdn.net/flyfish1986/article/details/109629048?utm_medium=distribute.pc_relevant.none-task-blog-title-2&spm=1001.2101.3001.4242) > [ECCV 2020 | 53.5 AP!PAA:用于目标检测的IoU预测的概率Anchor分配 ](https://zhuanlan.zhihu.com/p/161667111) > [機器學習: EM 演算法(Expectation-Maximization Algorithm, EM)、高斯混合模型(Gaussian Mixture Model, GMM)和GMM-EM詳細推導](https://chih-sheng-huang821.medium.com/%E6%A9%9F%E5%99%A8%E5%AD%B8%E7%BF%92-em-%E6%BC%94%E7%AE%97%E6%B3%95-expectation-maximization-algorithm-em-%E9%AB%98%E6%96%AF%E6%B7%B7%E5%90%88%E6%A8%A1%E5%9E%8B-gaussian-mixture-model-gmm-%E5%92%8Cgmm-em%E8%A9%B3%E7%B4%B0%E6%8E%A8%E5%B0%8E-c6f634410483) --- # Probabilistic Anchor Assignment with IoU Prediction for Object Detection [論文連結](https://arxiv.org/pdf/2007.08103.pdf) {%pdf https://arxiv.org/pdf/2007.08103.pdf %} ## Outline > [TOC] ## 摘要重點 - 提出一種新的 Anchor 分配策略,該策略根據模型的學習狀態自適應地將 Anchor 分為正負樣本,使 Anchor 能夠以機率的方式對正負樣本劃分, - 作者先計算基於模型 Anchor 的分數,然後用這些分數來擬合一個機率分佈,根據機率將 Anchor 分為正負樣本,對模型進行訓練。 - 提出一種以預測框的 IOU 作為 Localization Quality 的一種評估標準來減少兩者之間的差異。 - 結合 "分類" 和 "定位" 綜合分數會用做 NMS 的選擇框的指標與本文提出的 Anchor 分配策略一起帶來不錯的效益。 - 這個方法只在 RetinaNet 上增加一個卷積層,而且不需要每個位置有多個 Anchor,所以效率極高。 ## Rough Introduction ![](https://i.imgur.com/803K0oB.png) :::info :bulb: Anchor 分數計算與其分佈 - 分數基於分類和定位的物件 Loss,以反映每個 Anchor 如何包含有意義的線索來識別目標物件。 - 本文使用兩種模態的高斯混合模型,將分數建模為機率分佈中的樣本 (一個用於正樣本,一個用於負樣本) ::: - 作者認為正負樣本數量不應該僅基於 IoU 這一個指標,還要根據模型此時的 inference 結果,也就是==模型應該要參與 Anchor 分配這件事情==。 - 當沒有 Anchor 與真實的框有較高的 IoU 值時,還是可以適當地挑選一些 Anchor 作為正樣本,因此在訓練的時候仍然會有一組高質量的 Anchor 一起參與正樣本的訓練。 - PAA 就是此篇論文提出的方法,以自適應方式生成一組正負樣本,基於分類和定位回歸結果為每個 Anchor 定義分數,而且該分數是由 Loss Function 產生。 - 基於模型的狀態定義每個 Anchor 的分數,並以此分數找到一個機率分佈用於表示正負樣本,並將機率更高的 Anchor 視為正樣本。 - 由於正樣本是通過 Anchor 的分數分不確定,因此也不需要事先預定義正負樣本的數量。 ![](https://i.imgur.com/jm5DxSx.png) :::info :bulb: 上圖解釋了三個關鍵過程的圖示,以及 RetinaNet, ATSS, MAL 和我們模型之間關於分類和定位這些步驟的比較。 - 與其他的模型不同,本文將這三個過程都考慮在內。 - 對於定位任務,我們使用 IoU-based 的指標來調整每個過程。 ::: - 作者發現目前物件偵測模型存在訓練與測試不一致的情況,意思就是訓練時都是以 =="最小化分類和定位的 Loss"==,測試則是 "僅依靠分類分數的 NMS",因此理想情況下應該要由分類和定位的回歸共同決定,所以才提出了==將預測框的 IoU 看作定位分數並將分類分數相乘作為檢測框的排序指標== 。 ## Contributions 1. 基於高斯混合模型提出基於機率的 Anchor 分配策略,這允許模型以機率的方式分配 Anchor 並自適應地確定正樣本。 2. 將預測檢測框的 IoU 值與分類分數統一評分作為 NMS 的排序評估標準,並使用分數投票法來做為一個額外的後處理。 3. 進行相融實驗,驗證提出方法的有效性,並且達到了 SOTA 的紀錄。 ## Methods ### Probabilistic Anchor Assignment Algorithm - 作者認為 Anchor 的分配應該要考慮三個關鍵因素: 1. 首先得用模型來衡量 Anchor 的質量如何,也就是偵測到物件的可能性。 2. 應該要自適應地將 Anchor 分為正負樣本,這樣就不需要 IoU 閾值這樣的超參數。 3. 最後為了使模型能夠以機率的方式對正負樣本分配進行推論,分配策略要被表示為機率分佈的最大擬然。 - 綜上所述作者提出了一個 Anchor 的評分機制,也就是通過定義一個 Anchor 的分數來映射其 Bounding Box 對於最近的 Ground Truth (GT) $g$ 的質量如何,最簡單的做法就是直接將==分類分數與定位分數相乘==:$$S(f_\theta(a,x),g)=S_{cls}(f_\theta(a,x),g)\times S_{loc}(f_\theta(a,x),g)^\lambda$$ - 其中 $S_{cls}, S_{loc}$ 和 $\lambda$ 分別為 Anchor $a$ 對於 Ground Truth $g$ 的分類分數和定位分數以及控制兩個分數的相對權重。 - $x$ 為輸入影像 - $f_\theta$ 表示參數為 $\theta$ 的模型,可以看出這個評分函數是依賴於模型參數 $\theta$ 的。 - 我們可以從模型的 Classification head 輸出得到 $S_{cls}$。 - 由於輸出定位是偏移量而不是分數或機率,因此我們可以將 $S_{loc}$ 定義為預測框與 Ground Truth 的 IoU 值。$$S_{loc}(f_\theta(a,x),g)=IoU(f_\theta(a,x),g)$$ - 若對評分上述整體的評分機制取負對數的話可得:$$\begin{split}-logS(f_\theta(a,x),g)&=-logS_{cls}(f_\theta(a,x),g)-\lambda logS_{loc}(f_\theta(a,x),g)\\&=\mathcal{L}_{cls}(f_\theta(a,x),g)+\lambda\mathcal{L}_{IoU}(f_\theta(a,x),g)\end{split}......(3)$$ - $\mathcal{L}_{cls}$ 代表 Binary Cross Entropy loss,可以用 Focal Loss 代替。 - $\mathcal{L}_{IoU}$ 代表 IoU loss 可以用 GIoU 代替。 - 兩個 Loss 的相加負值可對 Anchor 與相對應的 Ground Truth 打一個分數。 - 為了使模型能夠以機率的方式來判斷某個 Anchor 是否屬於正樣本,做法是對某個 Ground Truth 對 Anchor 的分數建模,然後基於機率將 Anchor 分為正負樣本,可以使用任何可以建模 Multi-modality 樣本的機率分佈,而本文是使用==高斯混合模型 (Gaussian Mixture Model,GMM)==:$$P(a|x,g,\theta)=w_1N_1(a;m_1,p_1)+w_2N_2(a;m_2,p_2)$$ - $w_1, w_2$ 為兩個高斯函數的權重 - $m_1, m_2$ 為兩個高斯函數的平均值 - $p_1, p_2$ 為兩個高斯函數的 Precision - GMM 可以透過 Expectation-Maximization (EM) 演算法來優化,詳情可看此篇,寫得很詳細 [GMM-EM詳細推導](https://chih-sheng-huang821.medium.com/%E6%A9%9F%E5%99%A8%E5%AD%B8%E7%BF%92-em-%E6%BC%94%E7%AE%97%E6%B3%95-expectation-maximization-algorithm-em-%E9%AB%98%E6%96%AF%E6%B7%B7%E5%90%88%E6%A8%A1%E5%9E%8B-gaussian-mixture-model-gmm-%E5%92%8Cgmm-em%E8%A9%B3%E7%B4%B0%E6%8E%A8%E5%B0%8E-c6f634410483)。 - 利用 EM 估計 GMM 的參數可以確定每個 Anchor 是正樣本還是負樣本的機率,也就會產生下圖基於 Anchor 機率的不同分離邊界的例子: ![](https://i.imgur.com/B7vZoEM.png) :::info :bulb: 使用不同機率來分離出正負樣本的邊界值。 ::: ![](https://i.imgur.com/M9hRdhQ.png) :::info :bulb: 上面是整個 Anchor 機率分配的演算法。 - Line 3:為了計算 Anchor 分數,Anchor 首先分配給其 IoU 值最高的 Ground Truth。 - Line 5-11:為了使 EM 有效,本文從各個 Pyramid Level 中收集 Top-K 的 Anchor,並執行 EM 演算法。 - Line 16:非 Top-K 的 Anchor 將被分配為負樣本。 ::: - ==正樣本數量取決於估計機率分佈下的模型參數來自適應地決定==,這與以前不看模型結果或者是 Heuristically 地確定樣本數量作為超參數但沒有將 Anchor 分配建模為機率分佈的最大 likelihood 方法形成對比。 - 總結來說本文的方法應用到物件偵測的訓練過程中,我們設計了對於輸入影像 $x$ 的損失函數為 (為了簡潔在這邊省略了 $x$):$$\arg\max_\theta \prod_g \prod_{a\in A_g}P_{pos}(a,\theta,g)S_{pos}(a,\theta,g)+P_{neg}(a,\theta,g)S_{neg}(a,\theta)$$ $$\begin{split}S_{pos}(a,\theta,g)&=S(f_theta(a),g)\\&=exp(-\mathcal{L}_{cls}(f_\theta(a),g)-\lambda\mathcal{L}_{IoU}(f_\theta(a)),g)\end{split}$$ $$S_{neg}(a,\theta)=exp(-\mathcal{L}_{cls}(f_\theta(a),\phi))$$ - 其中 $P_{pos}(a,\theta,g)$ 和 $P_{neg}(a,\theta,g)$ 是指 Anchor 正負樣本的機率。 - $\phi$ 表示為背景類別。 - 在每次訓練迭代估計了 $P_{pos}, P_{neg}$ 後,Loss 的梯度就能計算了,也能進行 SGD。 ### IoU Prediction as Localization Quality - 由於訓練和測試過程中均需要使用 IoU 來衡量預測框的質量,論文提出將模型擴展位可以直接預測 Bounding Box 與所對應的 Ground Trith 框的 IoU,==通過添加一個卷積層針對每個 Anchor 輸出一個標量值 (預測 Prediction Bounding Box 與對應的 Ground Truth 之間的 IoU 值)==,並使用 Sigmoid 來激活有效的 IoU 值,最終的 Loss Function 還得加上這一支分的結果:$$\mathcal{L}(f_\theta(a),g)=\mathcal{L}_{cls}(f_\theta(a),g)+\lambda_1\mathcal{L}_{IoU}(f_\theta(a),g)+\lambda_2\mathcal{L}_{IoUP}(f_\theta(a),g)......(8)$$ - $\mathcal{L}_{IoUP}$ 為 IoU 的 Binary Cross Entropy Loss,定義為 Prediction IoU 與 Ground Truth IoU 之間的定位分數,這樣就可以拿他來做 NMS 的排序指標。 - 本文在每個空間位置只使用一個 Anchor,與使用 9 個 Anchor 的 RetinaNet 的模型相比,具有更少的參數量和 FLOPs。 ### Score Voting - 作者提出一個簡單有效的後處理,對每個 Box $b$ 做 Score Voting:$$p_i=e^{-(1-IoU(b,b_i))^2/\sigma_t}$$ $$\hat{b}=\dfrac{\sum_{i}p_is_ib_i}{\sum_ip_is_i}subject\ to\ IoU(b,b_i)>0$$ - 其中 $\hat{b}$ 更新後的 Box - $s_i$ 前面第一個公式提到的分類分數和定位分數計算 - $\sigma_t$ 調整相鄰框 $b_i$ 權重的超參數 - 主要思想是根據學習到的相鄰框之間平方差來選出最佳候選框的位置。 - 作者發現單獨使用 $p_i$ 作為框的權重能夠提高效能,用他乘以 $s_i$ 則又可以進一步提高效能。 # Experiments - 使用 MS COCO 當作 Dataset - 使用 'trainval35k' 作為訓練資料,大約 118k 張影像 - 對於 Ablation 實驗,本文使用 'minival' 的 5k 張影像,並在 'test-dev' 大約 20k 張的影像對現今的演算法方法們做比較。 ## Training Details 1. - 在 Ablation 實驗中本文使用 ResNet 50 作為 Backbone 並進行 135k 迭代訓練。 - 為了與前人比較,也使用各種主幹進行 18 萬次的訓練。 - 使用 GroupNorm 在 Detection Feature Towers。 - 使用 Focal Loss 在分類 loss 上。 - 使用 GIoU Loss 在定位 loss 上。 - 增加可訓練的 Scalars 值到 Regression head。 - 計算 Anchor 上面標註的公式 (3) 的時候 $\lambda$ 設置為 1。 - 計算上面標註的公式 (8) 時 $\lambda_1$ 設置為 1.3,$\lambda_2$ 設置為 0.5 來平衡公式。 - 使用 Score Voting 時 $\sigma_t$ 設置為 0.025。 - 每個候選 Anchor 的數量 $\mathcal{K}$ 設置為 9。 - 對於 GMM 的優化,本文將候選 Anchor 的最小最大分數設置為兩個高斯的平均值,並將 Anchor precision values 設置為 1 作為 EM 的初始化。 ## Training Details 2. - 使用 8 張 GPU 訓練,每次訓練每張卡可容納兩張影像。 - Batch Normalization 是 Frozen 不訓練的。(常用) - 所有 Backbone 都有在 ImageNet 上預訓練過。 - 初始 Learning Rate 設為 0.01,對於 135k 訓練的設定,我們在 90k 和 120k 時將學習率除以 10,對於 180k 的訓練設定,將其學習率降低到 120k 和 160k。 - 對於 180k 的訓練設定,也採用 Multi-scale 訓練策略 ==(將輸入影像的短邊調整為從 640~800 中隨機選擇的尺度)==。(常見) - Momentum 設定為 0.9。 - Weight Decay 設定為 1e-4。 - 在前 500 次的 Iteration 使用 Learning Rate Warm Up。 ## Network Architecture ![](https://i.imgur.com/zwfAbVB.png) :::info :bulb: 本文提出的模型架構。 - 與 FCOS 和 ATSS 相同架構,但是在預測時偵測框是使用 IoU 而不是 Centerness。 ::: - 上圖是本文提出的架構,是由 RetinaNet 架構所衍生出來,每個空間位置都有一個 Anchor,與 FCOS 和 ATSS 中使用的模型相同。 - 唯一不同的是在原本模型中額外添加預測 IoU 的 head,ATSS 和 FCOS 是 Centerness Score。 ## More Visualization of Anchor Assignment ![](https://i.imgur.com/n1fezMD.png) ![](https://i.imgur.com/KIdHWlL.jpg) :::info :bulb: Anchor Assignment on COCO training set ::: ![](https://i.imgur.com/Jl7ePvJ.jpg) :::info :bulb: Anchor Assignment on non-COCO image ::: ## Visualization of Detection Results ![](https://i.imgur.com/Pm0t0kl.jpg) ## Ablation Studies ### Comparison between different anchor separation points - 下面左表可看出分離方案都做得不錯,以 \(c\) 的表現最好。 - 還將本文的方法與兩種更簡單的方法進行比較,也就是==固定的 Positive 數量 (Fixed Numbers of Positive,FNP)== 和==固定的 Positive 分數範圍 (Fixed positive Score Ranges,FSR)==。 - FNP 是將分數最高幾個樣本(數量會預先定義)設為 Positive。 - FSR 是將分數超過特定閾值的所有 Anchor 視為 Positive。 - 由下表可看出這兩種方法都比 PAA 效果差,FSR (>0.3) 甚至訓練失敗,因為模型無法在早期迭代中找到分數在範圍內的 Anchor。 - 從這邊可看出 PAA 優勢,無需超參數就可以自適應地分離邊界,也不用手動調整。 ![](https://i.imgur.com/Ll5FDT2.png) :::info :bulb: 在 COCO minival set 使用 ResNet50 的 Ablation 研究。 - **Left:** 比較下圖中的 Anchor 分隔邊界,固定的 Positive 數量 (FNP) 和固定的 Positive 分數範圍 (FSR)。 - **Right:** 各別方法的效能。 ::: ![](https://i.imgur.com/B7vZoEM.png) ### Effects of individual modules - 上面右表中顯示了各種組合的正確率,將 Anchor Assignment 從 IoU-based hard assignment 改為本文提出的 PAA 使得正確率提升了 5.3%。 - 在 NMS 中添加了 IoU prediction head 以及統一分數函數將效能提高到 40.8%。 - Centerness Prediction 並不能改善 PAA,這是由於 Bounding Box 的加權分數可能會阻礙偵測傾斜的物體,反倒是 IoU-based 的分數才能克服此限制。 - 最後使用 Score Voting 可以改善效能到 41.0%,超過下方左表使用 ResNet50 作為 Backbone 的其他方法。 ![](https://i.imgur.com/4ew1L4X.png) :::info - **Left:** 比較使用 Res50 的 Backbone 在 COCO minival 資料集上的結果。 - **Right:** 比較使用不同 Backbone 做 IoU 預測在 COCO minival 資料集中的 Average Error。 ::: ### Accuracy of IoU prediction - 我們對不同的 Backbone 做 IoU Prediction 的 Average Error 在上表右方,可看出全部的 Backbone 錯誤率都小於 0.1,這也代表 IoU 預測與附加的卷積 head 是合理的。 ### Visualization of anchor assignment - 下圖 (a) 可看出 PAA 分隔出正樣本和服樣本的情況,隨著訓練的的進行,正樣本和負樣本的區別會變得更加清晰。 - 對於目標邊界框,Positive Anchor 不一定要比 Negative Anchor 要有更大的 IoU 值,尤其跑到越後面,許多 Negative Anchor 都具有較高的 IoU 值。 ![](https://i.imgur.com/9JyrwUg.jpg) :::info - (a) 代表在訓練期間的 Anchor 分配的演化和預測框之間的變化。 - (b) 在整個訓練過程中,每個單 Ground Truth box 的 positive 數量圖,在本文的方法中,這些數字在 GPU 上取平均值已實現更好的可視化效果 (各個值在 1~40 之間變化)。 ::: ### Statistics of positive samples - 為了比較本文方法和其他先前的方式,上右圖畫出了訓練迭代繪製了 POsitive 的樣本數量,與固定樣本數量或線性衰減的方法不同,本文每次迭代都取不同數量的樣本,這也說明這個方法的自適應性。 ## More Ablation Studies ![](https://i.imgur.com/9XINBoq.png) :::info :bulb: Res50 Bcakbone 在 COCO minival set 的 消融實驗。 - Left:比較不同 $\mathcal{K}$ 的值。 - Right:比較不同預設的 Anchor 尺寸。 ::: - 本文中所有實驗都是在 $\mathcal{K}=9$ 且默認 Anchor 比例為 $8$ 的情況下進行。 - 每個 Pyramid Level 的 Anchor 大小由其 Stride 和預設的 Anchor Scale 相乘決定。 ## Comparison with State-of-the-art Methods ![](https://i.imgur.com/3gYMkYx.png) :::info :bulb: 在 COCO test-dev 資料集的結果 - * 表示 multi-scale 的測試。 - 粗體字表示整欄裡面表現最好的模型或相似的 backbone。 ::: - 首先比較使用 ResNet101 訓練的模型比較,本文可以到 44.8% 的準確性,超過之前表現最好的 43.6%。 - 使用 ResNext101 本文模型可提高到 46.6%(Single-scale testing) 和 49.4%(Multi-scale testing)。 - 通過將可變形的卷積層應用於 Backbone 以及 Feature towers 的最後一層分別提高了 1.1% 和 1.3%。 - 借助 ResNext152 Backbone,在 Single-scale 可到 50.8%,Multi-scale 可到 53.5%。