論文筆記-ResNeSt-Split-Attention Networks


paper: ResNeSt: Split-Attention Networks

code: ResNeSt Mxnet&PyTorch版本

Abstract

  1. ResNeSt是對ResNext的又一個魔改的變種,亞馬遜李沐團隊的作品,其中S代表split,可以理解為按channel切分的feature map。ResNeSt是在ResNeXt的cardinality基礎上又引入一個radix(R),來表示每個cardinality group中的split的個數
    • 簡單理解,ResNeXt的cardinality將一組channel分成不同的組(這里稱為cardinality group),ResNeSt是將一組cardinality group中的channel分成不同的split
  2. 從實驗結果上開,效果還是很amazing的
    • ResNeSt-50在ImageNet上的top-1 error為81.13%,超過ResNet-50大概1%
    • ResNeSt-50替換Faster rcnn中的backbone,coco的mAP從39.25%提升到42.33%
    • ResNeSt-50替換DeepLabV3中的backbone,ADE20K上的分割mIoU從42.1%提升到45.1%

Details

Split-Attention

  1. 按照個人的理解,將每個cardinality group中的split-attention拆解為四個關鍵步驟,如下圖中的4個紅框
    split-attention
    • 其實,最主要的就是名字所述的一個是split的過程(第一個紅框)、一個是attention的過程(剩下3個紅框)
      • 注:准確的說split應該對應論文中的圖一右圖,而這里第一個紅框部分是每個split經過一些transfromation(\(1\times1\) conv + \(3\times3\) conv)后的輸出
    • step1,將該cardinality group的輸入分成r個split,每個split經過一些變換后,進入到split-attention中,先用element-wise sum的方式將特征圖融合到一起(輸出維度:\( H \times W\ times C\))
    • step2,將融合后的feature map指向global average pooling,即將圖像空間維度壓縮(輸出維度:\( C \) )
    • step3,結合softmax計算出每個split的權重
      • 圖中的dense c實現方式是用兩個全連接層
    • step4,將每個split-attention模塊輸入的每個split的feature map和計算出來的每個split的權重相乘,得到一個cardinality group的weighted fusion(輸出維度:\( H \times W\ times C\))
  2. 可見,split-attention其實就是給每一組split的feature map計算其對應的權重,然后再融合。

ResNeSt Block

  1. ResNeSt block的流程如下
    • 將輸入的所有feature map分成不同的cardinality group,
    • 然后,每個cardinality group再分成不同的split,
    • 然后,再用split-attention計算每個split的權重,再融合后作為每個cardinality group的輸出,
    • 然后,將所有的cardinality group的feature map在channel維度concate到一起,
    • 然后,再執行一次conv(改變channel個數)用skip connection將ResNeSt Block的原始輸入特征融合進來(融合方式為element-wise sum)。具體實現如下圖:

實現細節及技巧

  1. 使用的resnet結構是ResNet-D,結構如下
  2. 訓練策略
    • large mini-batch distributed training
    • label smoothing
    • auto augmentation
    • mixup training
    • large crop size: 224(ResNet變種對比),256(和其他模型對比)
    • Regularization: Dropout、DropBlock、weight decay
    • cosine schedule
  3. 實際實現時用的是radix-major的方式,這種方式的話,計算起來更方便一些(這樣布局,相同radix-index的group在內存中布局一樣),從布局上看相對於把前面圖中的cardinality和split兩個轉換一下,如下圖

寫在后面

  1. 看ResNeSt,以及其他一些最新的文章,都能夠看到attention的身影,給每個feature map分配一個權重,想到以前用傳統方法做多模態目標跟蹤的權重融合方式,何其相似。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM