提出一個全新的網路結構,確實顯得光鮮亮麗。 可是背後的艱辛程度是難以想象的,因為這意味著要地毯式地去搜索兩座大山: 網路結構 和 訓練超參。凡在網路結構上大成者,無外乎都需要工業級的資源去系統嘗試,產出的網路才是天花板一般的存在。例如:來自地仙的yolov5(ultralytics),來自大派的 EfficientNet/EfficientDet系列(Google Quoc V。 Le大神),RegNet (Facebook Kaiming He大神)等等。

而在計算資源/人力資源相對欠缺的情況下,很多研究工作往往是 網路結構+訓練超參 的組合, 能有

2個點

左右的效能提升,便可以在CVPR/ICCV/ECCV級別的會議論文上發表,濃墨重彩地分析設計理念insight,而風輕雲淡的把超參的試錯過程放在最後。可是 新網路結構+新訓練超參 的組合是個精巧的東西。 後來的人要動程式碼,總有貓玩毛線團的風險,被纏住手腳難以前進。。。。

對於工程師短缺的研究團隊來說,更困難的是,應用新網路到實際的目標檢測,跟蹤,分割,姿態識別任務上去。部署新網路意味著重寫大量的程式碼,例如轉換Pytorch網路結構到Caffe,轉換Pytorch模型權重到ONNX-Tensort,翻譯大量python預處理/後處理到C++。這個過程中,大量的中間Dependency庫來自第三方,任何一個環節稍有版本不匹配,就能阻斷整個程式碼部署的pipeline。——燒香拜拜pipeline上的眾神,祈禱他們未來心有靈犀,新版本正好互相匹配。

其實可以點單一點,不改原生網路結構,也做到效能大幅漲點,甚至超過不少新網路模型。一夜回到解放前的感覺?

歡迎來到

反轉註意力

機制系列~

Inverted Attention(IA),WACV2020,

論文連結

亮點:

Faster-RCNN Resnet101在 VOC07上的推理AP, 從76。4的baseline提升至

81.1 (+4.7)。

VOC12上的推理AP, 從73。8的baseline提升至

79.2 (+5.4)。

COCO 2017 test-dev 多個原生模型上均有

+1

+2

mAP的提升。

方法:

初試牛刀,根據loss 返傳回來的gradient tensor,計算一個mask,對feature的重要性進行反轉 ,逼迫網路去學習那些分佈不夠豐富的特徵

原生模型上的戰鬥

原生模型上的戰鬥

在原生網路上加了一個訓練模組(Inverted Attention Generation),只在訓練中使用這個模組來改進網路的特徵學習,推理時不用。 而且這個訓練模組只包含pooling, threshold, elementwise product這樣的簡單操作,沒有增加任何需要學習的網路引數。

結果:

以15%左右的額外訓練代價,0推理代價,大幅提升了原生網路的效能。

原生模型上的戰鬥

另外,特別改進了那些對定量指標貢獻不大,但是視覺上差別明顯的corner case,例如遮擋,顏色退化,陰影等。 這些圖片的缺陷難以被大規模均勻採集到,也就難以被網路學習。

原生模型上的戰鬥

侷限:

大資料庫上的指標提升效果不夠大。部分原因是大資料庫上,特徵分佈更豐富,同一個資料庫內訓練集和測試集的分佈差別小,也就缺少了IA能填補的空間。另一部分原因是,IA只應用在了最後object proposal的feature上,所以總的作用有限。 未來可以考慮把IA擴充套件到更多的網路層上去。

Multiple Anchor Learning(MAL), CVPR2020,

論文連結

訓練程式碼 MAL,推理程式碼MAL-inference

亮點:

Retinane single-scale 的推理效能 COCO test-dev mAP, Resnet50-FPN版 從 35。5 baseline 提升至

39.2(+3.7)

,ResneXt101-FPN 從 40。8 baseline 提升至

45.9(+4.1)

。 最終ResneXt101-FPN multi-scale 達到

47.0

方法:

第一次應用到single-stage anchor-based object detector上。把IA裡的“反轉-再訓練”機制,擴充套件到了anchor對應的feature上, 變成了以anchor為單位的壓制(Anchor Depression) - 再選擇(Anchor Selection)。

原生模型上的戰鬥

訓練loss則擴充套件了與FreeAnchor類似的Multiple Instante Learning理念。從一組初始的anchor集合開始,每次迴圈只挑選部分anchor 出來訓練,而且anchor所對應的class 分類和bbox 迴歸都得到了相對平等的對待。相對於原生模型學到的anchor, MAL框架下最終獲勝的anchor,同時擁有最高質量的分類能力和bbox覆蓋(如下圖:)

原生模型上的戰鬥

結果:

大幅提升各個量級的baseline Retinanet效能。據我所知,本文的結果是CVPR2020發文前後(2020年6月)anchor-based detector 最強之列。

原生模型上的戰鬥

侷限:

論文的訓練程式碼 MAL 基於稍早的maskrcnn_benchmark,在inference的時候只支援batchsize=1,與新的linux系統下python環境有相容問題,另nms效率偏低。於是我們暫時先把inference部分遷移到了比較新的ODTK框架下,於是有了一個獨立的MAL-inference。 後續將把MAL訓練也融合到ODTK下,也歡迎有興趣的夥伴參與。

Representation Self-Challenging(RSC), ECCV2020 (Oral),

論文連結

程式碼連結

亮點:

在Domain Generalization(DG)的常用的小資料庫上,除了對原生baseline的提升都在+4至+5以外, 對其他DG 訓練演算法的SOTA ,都有明顯優勢。提供RSC演算法在DG問題上完備的理論支援。

方法:

第一次應用到領域泛化Domain Generalization,演算法非常簡單,見圖:

原生模型上的戰鬥

原生模型上的戰鬥

第一次提供RSC演算法背後的理論支援:RSC總是能減少了domain之間資料分佈的差別。

原生模型上的戰鬥

結果:

在Domain Generalization的常用的小資料庫上,除了對原生baseline的提升都在+4至+5以外, 對其他DG 訓練演算法的SOTA ,都有明顯優勢。

注:

所有實驗中,RSC使用同一套超參,而沒有去overfit任何單個數據庫。

原生模型上的戰鬥

原生模型上的戰鬥

初步嘗試了通用大資料庫ImageNet上面的效果,得到了不錯的Resnet baseline。

注:

除RSC以外,完全保持原版baseline的訓練trick。

原生模型上的戰鬥

侷限:

為了跟現有方法比較,我們論文中仍在現有的Domain Generalziation(DG)實驗設定下進行。資料集偏小,網路偏小(最大網路為Resnet50)。

也許, 很多豐富的feature已經更大的通用資料庫(如ImageNet)裡面存在了,也許更大的網路已經能自生更強的泛化能力了,有待驗證。 但是。。。從ImageNet-Sketch的效果上看,想要實現理想的DG,還有很長的路要走。

原生模型上的戰鬥

最後,尚未驗證RSC跟近期出現的新訓練trick結合,會有什麼互補效果。

------

總結:

提高原生模型的效能,主要利用了訓練資料分佈,標註形式和訓練取樣的缺陷。卷積網路很難自主的去學習均勻的特徵組合,例如 10種背景,10種前景,10種視角,10種遮擋。。。,應該有10x10x10x10x。。。=10000。。。種組合,自然條件下采集的訓練資料不可能全有,而網路會“天真”地認為訓練資料中的特徵組合是這個訓練任務的固有規律。

另外,相比較 改loss的函式性質 和 輸入影象上做augmenation,我們的

反轉註意力

機制都提供了卷積網路更易懂的載體:feature tensor 和 gradient。相對於class 標籤和bbox座標帶來的監督資訊,tensor上的注意力指引 能精確到feature tensor的每個空間位置和每個特徵通道。簡單說,以上方法提供了更精細的監督機制。

這就像,給笨貓指地上的靜止的玩具老鼠,貓很茫然,而拿玩具老鼠在貓面前晃動,貓才會撲老鼠,順便咬你的手一樣。。。

能在任何在feature tensor 和 gradient上操作,也使得我們的反轉註意力機制能夠成為一種通用的訓練演算法模組,容易遷移到到不同的網路模型上去。

原生網路的潛力遠不止我們看到的,我們剛剛開啟新世界的大門。後續工作會持續探索~

--------

後記:

新網路的設計工作很有用很有意義,只是因為同時把資源分散到了網路和超參上,導致不可控因素太多, 推理的應用也多了不少後續工作。 而上面的系列工作把所有設計資源傾注在了訓練演算法上,而省去了推理應用的麻煩。 好壞,仁者見仁,但是理清網路設計和訓練演算法各自的功效,也是推進演算法效能前沿的穩妥之路。

也沒有必要拘泥於重現幾年前的訓練演算法,但是在論文中,把自己的新網路的結果和 同等條件下自己訓練出的baseline的結果 都貼出來,是非常負責任的做法。畢竟隨著時間推移,新的訓練技巧和引數,也會作為大家集體智慧的成果,固定下來,作為後人做新模型前進的階梯。

彩蛋

Imagenet上預訓練的 Resnet 是幾乎所有主流CV演算法的backbone之母, Resnet-50官方 top-1 accuracy是 76。15% (Baseline-1)。多年來有大量改進backbone 的工作, 回頭看,原生模型們(Baseline-x 們)的戰鬥其實一直沒有停止,而且非常壯觀:

原生模型上的戰鬥

最近的一個工作(Baseline-6),原生Resnet-50靠distillation訓練其實可以達到 80+%(MEAL-V2) ,已經超過了大部分新網路的結果了~

我們接下來另有一個工作, 準備站在更高的原生模型肩膀上, 去爬一點網路改進的大山。