PaddleDetection中一些特色模型介紹

CBNet

論文題目:CBNet: A Novel Composite Backbone Network Architecture for Object Detection
論文地址:https://arxiv.org/abs/1909.03625
骨幹網絡對於檢測網絡的模型性能至關重要,但是大部分的骨幹網絡設計完成之後都需要首先在imagenet數據集上訓練,得到的模型作爲檢測網絡的預訓練模型,該論文中,作者基於已有的骨幹網絡進行組合,最終實現一種新的骨幹網絡,同時驗證了它在目標檢測任務中的性能,在coco test-dev測試集上基於多尺度測試,達到了53.3%的精度指標。
論文提出的檢測網絡結構如下,其中用K個相同的結構進行聯結,生成新的骨幹網絡,以ResNet結構爲例,K=2時,爲Dual-ResNet,K=3時,爲Triple-ResNet。

在這裏插入圖片描述

論文中驗證了骨幹網絡的不同的聯結方式及其對應的檢測精度指標,如下所示。

在這裏插入圖片描述

不同結構對應的精度指標如下。最終AHLC這種連接方式在CBNet被驗證最爲有效,通過和上圖©中的ALLC的對比,也驗證了單純地通過添加網絡參數並不能提升模型性能,和(d)中的ADLC對比,驗證了特徵圖之間的信息融合方式也很重要。

在這裏插入圖片描述

論文中也驗證了骨幹網絡權重共享、快速版CBNet、骨幹網絡的數量K對檢測性能的影響,主要得到了以下結論

  1. 即使使用骨幹網絡權重不共享的方式,使用CBNet也能帶來1%的絕對精度提升,這也驗證了CBNet帶來的精度提升更多地是因爲網絡結構而非參數量。
  2. 減少AHLC的連接數量,僅將C4和C5引入到下一個ResNet的骨幹網絡中,仍然可以帶來1.4%的精度提升,這比C2~C5全部全部引入低0.2%,但是速度卻快了約20%。
  3. 骨幹網絡堆疊的數量K在K>=3時,帶來的收益逐漸減小,因此建議K=2或3,可以在速度和精度方面做比較好的權衡。

更加詳細的實驗與結論可以參考論文中的實驗部分。目前Paddle已經開源基於ResNet的CBNet模型,實現代碼可以參考:https://github.com/PaddlePaddle/PaddleDetection/blob/master/ppdet/modeling/backbones/cb_resnet.py

此外,基於CBNet,PaddleDetection也開源了coco val2017驗證集53.3%的單模型單尺度檢測模型:https://github.com/PaddlePaddle/PaddleDetection/blob/master/configs/dcn/cascade_rcnn_cbr200_vd_fpn_dcnv2_nonlocal_softnms.yml

IOU loss之GIOU/DIOU/CIOU loss

GIOU loss

論文題目:Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression
論文地址:https://arxiv.org/abs/1902.09630

IOU是論文中十分常用的指標,它對於物體的尺度並不敏感,在之前的檢測任務中,常使用smooth l1 loss計算邊框loss,但是該種方法計算出來的loss一方面無法與最終的IOU指標直接對應,同時也對檢測框的尺度較爲敏感,因此有學者提出將IOU loss作爲迴歸的loss;但是如果IOU爲0,則loss爲0,同時IOU loss也沒有考慮物體方向沒有對齊時的loss,該論文基於此進行改進,計算GIOU的方法如下。

在這裏插入圖片描述

最終GIOU loss爲1-GIOU所得的值。具體來看,IOU可以直接反映邊框與真值之間的交併比,C爲能夠包含A和B的最小封閉凸物體,因此即使A和B的交併比爲0,GIOU也會隨着A和B的相對距離而不斷變化,因此模型參數可以繼續得到優化。在A和B的長寬保持恆定的情況下,兩者距離越遠,GIOU越小,GIOU loss越大。
使用GIOU loss計算邊框損失的流程圖如下。

在這裏插入圖片描述

PaddleDetection也開源了基於faster rcnn的GIOU loss實現。使用GIOU loss替換傳統的smooth l1 loss,基於faster rcnn的resnet50-vd-fpn 1x實驗,coco val mAP能由38.3%提升到39.4%(沒有帶來任何預測耗時的損失):https://github.com/PaddlePaddle/PaddleDetection/blob/master/configs/iou_loss/README.md

論文題目:Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression

論文地址:https://arxiv.org/abs/1911.08287

GIOU loss解決了IOU loss中預測邊框A與真值B的交併比爲0時,模型無法給出優化方向的問題,但是仍然有2種情況難以解決,

  1. 當邊框A和邊框B處於包含關係的時候,GIOU loss退化爲IOU loss,此時模型收斂較慢。
  2. 當A與B相交,若A和B的的x1與x2均相等或者y1與y2均相等,GIOU loss仍然會退化爲IOU loss,收斂很慢。

基於此,論文提出了DIOU loss與CIOU loss,解決收斂速度慢以及部分條件下無法收斂的問題。
爲加速收斂,論文在改進的loss中引入距離的概念,具體地,邊框loss可以定義爲如下形式:

在這裏插入圖片描述

其中在這裏插入圖片描述是懲罰項,考慮預測邊框與真值的距離損失時,懲罰項可以定義爲

在這裏插入圖片描述

其中在這裏插入圖片描述表示預測框與真值邊框中心點的歐式距離,c表示預測框與真值邊框的最小外包邊框的對角長度。因此DIOU loss可以寫爲

在這裏插入圖片描述

相對於GIOU loss,DIOU loss不僅考慮了IOU,也考慮邊框之間的距離,從而加快了模型收斂的速度。但是使用DIOU loss作爲邊框損失函數時,只考慮了邊框的交併比以及中心點的距離,沒有考慮到預測邊框與真值的長寬比差異的情況,因此論文中提出了CIOU loss,懲罰項添加關於長寬比的約束。具體地,懲罰項定義如下

在這裏插入圖片描述

其中v爲懲罰項,α爲懲罰係數,定義分別如下

在這裏插入圖片描述

CIOU loss使得在邊框迴歸時,與目標框有重疊甚至包含時能夠更快更準確地收斂。
在NMS階段,一般的閾值計算爲IOU,論文使用了DIOU修正後的閾值,檢測框得分的更新方法如下。

在這裏插入圖片描述

這使得模型效果有進一步的提升。
PaddleDetection已經開源了基於faster rcnn的GIOU loss、DIOU/CIOU loss實現代碼以及相關模型,具體可以參考:https://github.com/PaddlePaddle/PaddleDetection/tree/master/configs/iou_loss

Nonlocal

論文名稱:Non-local Neural Networks
論文地址:https://arxiv.org/abs/1711.07971
卷積操作的感受野一般即爲卷積核大小,它們只考慮局部區域,這減少了網絡的計算量,但是卻使得網絡難以獲取全局特徵圖信息。論文中設計了一個模塊,很好地解決了局部卷積操作無法看清全局的問題,爲後面的卷積計算引入更豐富的特徵信息,並在視頻分類與目標檢測等任務中驗證了其性能。
按照非局部均值的定義,卷積網絡中的CNN定義如下

在這裏插入圖片描述

其中x與y表示輸入與輸出,f用於計算x_i與x_j的相似度,g則爲點的特徵計算函數,C(x)爲歸一化因子。爲了保證Nonlocal可以作爲一個組件方便地放入神經網絡中,輸入輸出的形狀是相同的。
Nonlocal結構如下圖所示。

在這裏插入圖片描述

給定輸入的特徵圖x,生成θ, ψ用於嵌入,使用1*1的卷積用於特徵計算。爲加快模型收斂,使Nonlocal模塊參數更容易學習,在這裏使用了殘差塊的形式,使得Nonlocal只需要去學習殘差項;Nonlocal的計算量很大,爲減少計算量,這裏在生成θ, ψ與g時,可以進行通過減少通道數,減小Nonlocal計算量(圖中是將中間層計算的通道數減少爲輸入輸出通道數的一半)。

PaddleDetection開源了Nonlocal模塊,並在ResNet骨幹網絡以及LibraRCNN中驗證了其性能。基於PaddlePaddle的Nonlocal實現具體可以參考:https://github.com/PaddlePaddle/PaddleDetection/blob/master/ppdet/modeling/backbones/nonlocal_helper.py

在這裏插入圖片描述

SNL的網絡輸出計算如下

在這裏插入圖片描述

爲進一步減少計算量,將W_v提取到attention pooling計算的外面,表示爲

在這裏插入圖片描述

對應結構如下所示。通過共享attention map,計算量減少爲之前的1/WH。

在這裏插入圖片描述

SNL模塊可以抽象爲上下文建模、特徵轉換和特徵聚合三個部分,特徵轉化部分有大量參數,因此在這裏參考SE的結構,最終GC block的結構如下所示。使用兩層降維的1*1卷積降低計算量,由於兩層卷積參數較難優化,在這裏加入layer normalization的正則化層降低優化難度。

在這裏插入圖片描述

該模塊可以很方便地插入到骨幹網絡中,提升模型的全局上下文表達能力,可以提升檢測和分割任務的模型性能,PaddleDetection實現並開源了該模塊,具體的模型性能與配置可以參考:https://github.com/PaddlePaddle/PaddleDetection/blob/master/configs/gcnet

Libra RCNN

論文名稱:Libra R-CNN: Towards Balanced Learning for Object Detection
論文地址:https://arxiv.org/abs/1904.02701

檢測模型訓練大多包含3個步驟:候選區域生成與選擇、特徵提取、類別分類和檢測框迴歸多任務的訓練與收斂。
論文主要分析了在檢測任務中,三個層面的不均衡現象限制了模型的性能,分別是樣本(sample level)、特徵(feature level)以及目標級別(objective level)的不均衡,提出了3種方案,用於解決上述三個不均衡的現象。三個解決方法如下。

IoU-balanced Sampling

Faster RCNN中生成許多候選框之後,使用隨機的方法挑選正負樣本,但是這導致了一個問題:負樣本中有70%的候選框與真值的IOU都在0~0.05之間,分佈如下圖所示。使用在線難負樣本挖掘(OHEM)的方法可以緩解這種情況,但是不同IOU區間的採樣樣本仍然差距仍然比較大,而且流程複雜。作者提出了均衡的負樣本採樣策略,即將IOU閾值區間分爲K份,在每個子區間都採樣相同數量的負樣本(如果達不到平均數量,則取所有在該子區間的樣本),最終可以保證採樣得到的負樣本在不同的IOU子區間達到儘量均衡的狀態。這種方法思路簡單,效果也比OHEM要更好一些。

在這裏插入圖片描述

Balanced Feature Pyramid(BFP)

之前的FPN結構中使用橫向連接的操作融合骨幹網絡的特徵,論文中提出了一個如下圖,主要包括rescaling, integrating, refining and strengthening,共4個部分。首先將不同層級的特徵圖縮放到同一尺度,之後對特徵圖進行加權平均,使用Nonlocal模塊進一步提煉特徵,最終將提煉後的特徵圖進行縮放,作爲殘差項與不同層級的特徵圖相加,得到最終輸出的特徵圖。這種平衡的特徵圖金字塔結構相對於標準的FPN在coco數據集上可以帶來0.8%左右的精度提升。

在這裏插入圖片描述

Balanced L1 Loss

物體檢測任務中,需要同時優化分類loss與邊框的迴歸loss,當分類得分很高時,即使迴歸效果很差,也會使得模型有比較高的精度,因此可以考慮增加回歸loss的權重。假設bbox loss<=1的邊框爲inliers(可以被視爲簡單的樣本),bbox loss>1的邊框爲outliers(可以被視爲難樣本),假設直接調整所有邊框的迴歸loss,這會導致模型對outliers更加敏感,而且基於smooth l1 loss的邊框loss計算方法有以下缺點,當邊框爲inliers時,其梯度很小,當邊框爲outliers時,梯度幅值爲1。smooth l1 loss的梯度計算方法定義如下。

在這裏插入圖片描述

因此論文考慮增加inliers的梯度值,儘量平衡inliers與outliers的loss梯度比例。最終Libra loss的梯度計算方法如下所示。

在這裏插入圖片描述

在不同的超參數下,梯度可視化如下圖所示。

在這裏插入圖片描述

可以看出Libra loss與smooth l1 loss對於outliers的梯度是相同的,但是在inliers中,Libra loss的梯度更大一些,從而增大了不同情況下的邊框迴歸loss,平衡了難易邊框學習的loss,同時也提升了邊框迴歸效果對檢測模型性能的影響。
論文將3個部分融合在一起,在coco兩階段目標檢測任務中有1.1%~2.5%的絕對精度提升,效果十分明顯。PaddleDetection也實現並開源了Libra RCNN,配置與相關模型可以參考:https://github.com/PaddlePaddle/PaddleDetection/tree/master/configs/libra_rcnn

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章