TridentNet論文解讀

TridentNet論文解讀

前言

今天為大家介紹一篇圖森科技在 ICCV 2019 的目標檢測論文《Scale-Aware Trident Networks for Object Detection》,簡稱 TridentNet,中文翻譯為三叉戟網路。我們知道在目標檢測任務中,尺度變化一直是很關鍵的問題。針對尺度變化問題,也有很多的方案被提出,如 Figure 1 所示:

TridentNet論文解讀

其中 (a) 圖表示多尺度影象金字塔網路,直接對影象進行不同尺度的縮放。(b)是 FPN 網路,借鑑了金字塔結構將解析度資訊和語義資訊相結合,克服不同層、不同尺度帶來的問題。這兩種方法的目的都是讓模型對尺寸不同的目標具有不同不同的感受野。除此之外還有 SNIP,SNIP 主要包含了兩個改進點:

為了減少 domain-shift,在梯度回傳的時候只將和預訓練模型所基於的訓練資料尺寸相應的 ROI 的梯度進行回傳。

借鑑了多尺度訓練思想,引入影象金字塔來處理資料集中不同尺寸的資料。雖然影象金字塔的效率比較低,但透過對原圖不同比例的縮放,充分利用了模型的表徵能力。相比之下,FPN 產生多層次的特徵,但也犧牲了不同尺度下的特徵一致性。總結一下就是,影象金字塔雖然慢但是精度高。而 FPN 雖然快,但相比於影象金字塔犧牲了精度。

主要貢獻

論文提出了 TridentNet,基於 ResNet-101 骨架網路在 COCO 資料集上達到了單模型 48。4 的準確率,重新整理 COCO 紀錄。TridentNet 的主要貢獻在於:

首次提出感受野 (receptive filed) 對目標檢測任務中不同尺度大小目標的影響,並進行相關實驗驗證。

提出了適應於多尺度的目標檢測框架 TridentNet。

使用引數共享的方法,提出了訓練 3 個分支,但測試時只使用其中一個分支,這樣保證前向推理的時候不會有額外的引數和計算量增加。

使用 ResNet-101 為 backbone 的 TridentNet 在 COCO 資料集上達到了 48。4 的 map,真正的 SOTA。

膨脹卷積

假設膨脹率為dsds,使用的卷積核大小為3×3,則使用膨脹卷積的感受野大小為3+2×2×(ds1),例如:

ds=1,表示不進行膨脹,感受野大小為3×3

ds=2,表示膨脹卷積係數為22,感受野大小為7×7

ds=4,表示膨脹卷積係數為44,感受野大小為15×15 從 Table1 可以看到,隨著感受野的增大,小目標的檢測準確性也開始下降,但是大目標的檢測準確性開始上升,Table1 如下:

TridentNet論文解讀

網路結構

Figure2 展示了 TridentNet 的網路結構。

TridentNet論文解讀

TridentNet 模組包含 3 個完全一樣的分支,唯一不同的只是膨脹卷積的膨脹速率。從上到下,膨脹率分別為 1,2,3,分別檢測小,中,大的目標。TridentNet 的構造和改進是透過將一些常規卷積塊替換為三叉戟塊 (Trident Block)。其中 Trident Block 由多個平行分支組成,除了膨脹卷積的膨脹速率之外,每個分支和原始的卷積塊有完全相同的結構。下面以 ResNet 為例,對於一個殘差模組,包括三個卷積核即1×1,3×3,1×1。詳細結構如下圖所示:

TridentNet論文解讀

可以看到三個分支由於膨脹卷積的膨脹速率不同使得網路擁有了更多可供選擇的感受野。通常用三叉戟塊替換主幹的最後一個階段的卷積塊,因為三叉戟塊產生的感受野有較大的差異,足以執行目標檢測任務。同時,三叉戟塊的三個分支之間的權重是共享的,只有膨脹速率不同,這種設定使得權值共享更加簡單。權值共享有以下幾個優點:

可以不增加額外的引數量。

和論文的出發點一致,即不同尺度的物體應該以同樣的表徵能力進行統一的轉化。

在不同的感受野下,可以對不同尺度範圍訓練相同的引數。

訓練和測試

TridentNet 在訓練過程中會對每一個分支進行最佳化。因此,需要對目標的 ground truth 的大小進行測試,即:

TridentNet論文解讀

其中,w,h 代表 ground truth 的寬和高。lili,uiui 代表實驗中定義的第ii 個分支的目標最小面積和最大面積 。在 COCO 資料集上分別為32×32 和96×96。基於此公式實現目標匹配原則,即小的目標走第一個分支,中等目標走第二個分支,大的目標走第三個分支。而不是所有的目標都走一個分支,這樣就可以有針對性的訓練。 在測試時,只用中間的分支進行推理,然後對結果進行 NMS 後處理,最後輸出預測的目標資訊。當然這樣做會帶來一些精度損失,大概在 0。5-1 個 map 值,但這樣的好處在於不會引入額外的引數,不會增加額外的計算量。

實驗結果

本文的另外一個值得稱道的地方就是實驗做得非常棒。首先來看 Multi-branch ,Weight-sharing, Scale-aware 有效性證明,如 Table2 所示。可以看到都比 baseline 好並且當三部分都加上的時候效能達到最高。注意一下,Table2 是在 CICO 驗證集上進行的測試。

TridentNet論文解讀

然後 Table3 展示了 TridentNet 模組分支個數對 AP 值的影響。

TridentNet論文解讀

然後 TridentNet 模組在 ResNet 不同 block 中的實驗結果如 Table4 所示。

TridentNet論文解讀

然後論文探索了 TridentNet 各個分支的檢測精度,如Table5 所示。

TridentNet論文解讀

然後論文還給出了 TridentNet 中間分支在 coco 測試的結果,如 Table6 所示。

TridentNet論文解讀

上面的實驗都是在 COCO 驗證集上的結果,接下來給出模型在 COCO 測試集上相對於其他 SOAT 網路的精度,如 Table 7 所示:

TridentNet論文解讀

總結

好了,做一個簡短的總結吧。TridentNet 是一種尺度敏感的檢測網路,並且訓練過程也要進行多尺度訓練。檢測準確性很高,並且不會有額外的引數,額外的計算量,是 ASPP 結構的靈活應用。

附錄

論文原文:

https://arxiv。org/pdf/1901。01892。pdf

官方實現:

https://github。com/TuSimple/simpledet/tree/master/models/tridentnet