最近被曠視的YOLOX刷屏了!

論文主要信息

文章概要

  • 集成decoupled head、SimOTA、anchor-free、NMS-free等strategy
  • 比賽第1名:僅使用YOLOX-L,獲得CVPR2021的Workshop on Autonomous Driving的第1名,詳見原paper
  • 部署代碼:ONNX、TensorRT、NCNN和Openvino

背景

  • YOLOv5性能最優:48.2% AP on COCO at 13.7 ms

  • 過去兩年的major advance

    方向 方法
    anchor-free detectors FCOS、CenterNet、CornerNet
    advanced label assignment strategies Freeanchor、ATSS、PAA、Autoassign、IQDet、OTA
    end-to-end (NMS-free) detectors DETR、End-to-end object detection with fully convolutional network、PSS
  • 問題:過去兩年的major advance未被集成到YOLO系列,YOLOv4和v5仍然是anchor-based、訓練時仍使用hand-crafted assigning rules

  • insight:對於anchor-based pipeline,YOLOv4和v5可能有點over-optimized

  • baseline:YOLOv3-SPP(Darknet53)

YOLOX-DarkNet53

實現細節

  • consistent settings:從baseline到final model的訓練設置mostly一致

  • epoch:300個epoch,5個epoch的warm up

  • 數據集:COCO train2017

  • 優化器:SGD,momentum 0.9

  • weight decay:0.0005

  • 學習率:lr×BatchSize/64(linear scaling),lr=0.01,cosine lr schedule

  • batch size:128 for 8-GPU

  • input size:448 to 832 with 32 strides

  • inference setting:FP16-precision,batch=1,single Tesla V100

YOLOv3 baseline

  • baseline:YOLOv3-SPP
  • 改動:添加EMA weights updating、cosine lr schedule、IoU loss、IoU-aware branch(這些trick和YOLOX帶來的improvement是orthogonal的,因此把這些trick放在baseline中
  • 數據增強:使用RandomHorizontalFlip、ColorJitter、multi-scale,放棄RandomResizedCrop(因爲它和mosaic augmentation有些重合)
  • 性能:COCO val上AP達到38.5%,詳見消融實驗

筆者認爲,在選baseline的時候,應該具備至少兩點:性能還不錯,用的trick還少。像常用的RetinaNet,基本就是隨手造的一個普通模型,純爲focal loss服務的,幾乎沒加太多trick,這樣的工作就很適合用來驗證我們自己改進出來的東西是否好用。

有的時候trick用得太多,自己的東西加上去不但不漲點,還掉點。但要注意,這個時候不一定是你的東西有問題,很可能是和哪一個trick衝突了。

——引自《目標檢測》-第24章-YOLO系列的又一集大成者:YOLOX! - 知乎 (zhihu.com)

這篇知乎文章不錯,建議再次閱讀。

Decoupled head

  • 問題:在OD中,classification任務和regression任務之間存在conflict

實驗

以下2個實驗說明,coupled head會損害性能

  • 使用decoupled head替換coupled head會提高收斂速度,如下圖(圖3)所示

img

  • decoupled head對end-to-end版本的YOLO很重要,如下表(表1)所示。如果使用coupled head,從YOLO轉爲End-to-end YOLO後AP下降4.2,而如果使用decoupled head則AP只下降0.8

img

思路

img

YOLO在FPN自頂向下路徑上的3個level(P5、P4、P3,通道數分別爲1024、512、256)上進行detection

  • coupled head:通過卷積直接得到最終的1個輸出,形狀爲[H, W, n_anchor×(C+4+1) ],其中cls(預測是C個類別中的哪一個類)佔用C個通道、reg(座標)佔用4個通道、obj(區分是前景背景)佔用1個通道。
  • decoupled head:先用1個1×1卷積層把通道數減少到256,然後用2個並行分支(每個分支包括2個3×3卷積層)分別進行regression和classification,並在regression分支上添加一個IoU分支。3個分支(cls、reg、IoU)輸出的形狀分別爲[H,W,C][H,W,4][H,W,1]

cls分支只計算正樣本分類loss。簡而言之cls用於分類但不用於劃分正負樣本,正負樣本交給obj branch做了。另外使用SimOTA之後,FCOS樣本匹配階段的FPN分層就被取消了,匹配(包括分層)由SimOTA自動完成

————《目標檢測》-第24章-YOLO系列的又一集大成者:YOLOX! - 知乎 (zhihu.com)一文中paper原作者的評論

story

我們一開始並沒有計劃對檢測頭進行解耦,而是在將 YOLOX 推進到“端到端( 無需NMS )”時發現,不論調整損失權重還是控制梯度回傳,End2end 的 YOLOX 始終比標準的 YOLOX 低 4~5 個點( 如 Table1 ),這與我們在 DeFCN 裏獲得的認知不符。偶然間我們把原始的 YOLO Head 換成 decoupled head,發現這裏的差距又顯著縮小了,這樣的現象說明當前 YOLO Head 的表達能力可能有所欠缺。於是我們將 decoupled head 應用到了非 End2End YOLO 上,結果就如 Fig.3 的所示:不僅在峯值的性能有所提升,收斂速度也明顯加快。結合之前 End2end 的實驗,這兩個現象充分說明 YOLO 系列一直以來使用的檢測頭可能是不合理的。

————如何評價曠視開源的YOLOX,效果超過YOLOv5? - 知乎 (zhihu.com)中paper原作者的回答

Strong data augmentation

  • 設置:使用Mosaic(ultralytics-YOLOv3提出)和MixUp,在最後15個epoch停止
  • 發現:在使用strong data augmentation之後,作者發現ImageNet預訓練不再有益,因此之後的model都是train from scratch。(如何理解“之後”一詞?見表2,可知作者是一個個迭代增加模塊或trick的)
  • 實驗:見消融實驗

Anchor-free

  • anchor機制的問題
    • 聚類:在訓練前需要通過聚類生成anchor,這些anchor是domain-specific and less generalized
    • complexity:增加了detection head的complexity;每張image中prediction的數量也增加了,而在設備間(比如從NPU到CPU)移動大量prediction的耗時可能會是個瓶頸
  • anchor-free的優點:減少了需要heuristic tuning和Anchor Clustering 、Grid Sensitive等trick的參數的數量,使得decoder的training和decoding相對更簡單
  • anchor-free YOLO
    • location:每個location只預測1個box並直接預測4個值(相對於網格左上角的2個offset、box的高度和寬度)
    • 正樣本:將每個object的center location作爲正樣本
    • scale range:按照FCOS那樣,預定義1個scale range,根據每個object的size將每個object分配到對應的FPN level
  • 實驗:見消融實驗

multi positives

  • 問題:對於每個object,如果只將其center location視爲正樣本,那就只有1個正樣本而忽略了其它高質量的prediction。
  • 潛力:對這些高質量prediction進行優化,可能帶來beneficial gradient,這可能會緩解training過程中正/負採樣的極端不平衡
  • center sampling:如FSOS的center sampling,本文將每個object的center region(3×3)中的所有location作爲正樣本
  • 實驗:見消融實驗

SimOTA

  • label assignment應滿足的4點

    • loss/quality aware
    • center prior
    • 每個GT的positive anchor的數量應該是動態的(簡化爲dynamic top-k)。注:“anchor”在anchor-free detector中指“anchor point”,在YOLO中指“grid”
    • global view
  • OTA:

    • 作者:該方法之前就由曠視提出
    • 思路:OTA從global視角分析label assignment並將其formulate爲1個Optimal Transport (OT)問題
    • 效果:SOTA
  • Sinkhorn-Knopp:使用Sinkhorn-Knopp算法解決OT問題會增加25%的訓練時長,這對於300個epoch來說非常expensive。因此將其簡化爲dynamic top-k策略,命名爲SlimOTA

  • SlimOTA:

    img
    • pair-wise matching degree:首先計算pair-wise matching degree(通過每個prediction-GT pair的cost或quality來表徵),SlimOTA中GT \(g_i\)和prediction \(p_j\)之間的cost \(c_{ij}\)如上所示
    • 對於GT \(g_i\),在1個固定的center region中選擇cost最小的top-k predictions作爲positive sample。注:對於每個GT,k的值是不同的,詳見OTA中的Dynamic k Estimation
    • 最後,這些positive prediction對應的grid被指定爲positives,其餘grid被指定爲negatives
  • 實驗:見消融實驗

End-to-end(NMS-free) YOLO

  • end-to-end:按照PSS,添加了2個額外的卷積層、one-to-one label assignment和stop gradient,這使得detector變成end-to-end
    • optional module:這稍微降低了preformance和inference speed,因此並不將其納入本文的final module,而是將其作爲一個optional module
  • 實驗:見消融實驗

消融實驗

img

  • decoupled head稍微增加了模型size
  • 除了NMS-free,其它strategy都有效漲點並且沒有成本/成本很小

性能對比

除了darknet53,YOLOX在其它不同size的backbone上同樣實現了improvement

img

這張圖中不同方法的軟硬件差異是somewhat controlled

YOLOX-L

img

  • backbone:採用YOLOv5的backbone以進行對比,包括modified CSPNet、SiLU activation、the PAN head
  • scaling rule:按照YOLOv5的scale rule,得到YOLOX-S、YOLOX-M、YOLOX-L和YOLOX-X
  • 性能:AP提高1%到3%,時間稍稍增加(因爲decoupled head)

YOLOX-Tiny & YOLOX-Nano

img

  • YOLOX-Tiny:
    • 思路:通過shrink模型而得到(沒說怎麼shrink的
    • 性能:AP提高9%,而模型size差不多
  • YOLOX-Nano:
    • 思路:採用depth wise convolution
    • 性能:模型size更小,但AP卻高出1.8%

Model size V.S. Data augmentation

img

  • 本文的mixup:mixup with scale jittering

    • heavier:本文的mixup實現比原版heavier
    • 思路:受Copypaste啓發,本文在mixup兩張圖片之前會按隨機比例抖動2個圖像
    • 效果:Copypaste需要instance mask annotation,而mixup不需要,但兩者的AP差不多
    • 作用:當沒有instance mask annotation時,mixup with scale jittering可以作爲Copypaste的替代品
  • 不同size的模型適用的augmentation不同

    • large model:適合增強augmentation
      • YOLOX-L:應用MixUp可以將AP提高0.9%
    • small model:適合減少或弱化augmentation
      • YOLOX-Nano:弱化mosaic(scale range從[0.1, 2.0]到[0.5, 1.5])並移除mixup,AP提高1.3%

SOTA

img

  • 注:因爲軟硬件差異,上表(表6)中inference speed通常是uncontrolled
  • 補充:
    • Scale-YOLOv4、YOLOv5-P6等模型性能更高,但size更大
    • Transformer based detector將accuracy-SOTA推高到了∼60 AP

參考鏈接

本筆記的參考鏈接,都很不錯,特別是第2篇,建議閱讀!

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