論文主要資訊
- 標題:YOLOX: Exceeding YOLO Series in 2021
- 作者:Zheng Ge,Songtao Liu,Feng Wang,Zeming Li,Jian Sun
- 機構:Megvii Technology
- 連結:https://arxiv.org/abs/2107.08430
- 程式碼:https://github.com/Megvii-BaseDetection/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)所示
- decoupled head對end-to-end版本的YOLO很重要,如下表(表1)所示。如果使用coupled head,從YOLO轉為End-to-end YOLO後AP下降4.2,而如果使用decoupled head則AP只下降0.8
思路
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:
- 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
- 實驗:見消融實驗
消融實驗
- decoupled head稍微增加了模型size
- 除了NMS-free,其它strategy都有效漲點並且沒有成本/成本很小
效能對比
除了darknet53,YOLOX在其它不同size的backbone上同樣實現了improvement
這張圖中不同方法的軟硬體差異是somewhat controlled
YOLOX-L
- 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
- YOLOX-Tiny:
- 思路:通過shrink模型而得到(沒說怎麼shrink的)
- 效能:AP提高9%,而模型size差不多
- YOLOX-Nano:
- 思路:採用depth wise convolution
- 效能:模型size更小,但AP卻高出1.8%
Model size V.S. Data augmentation
本文的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%
- large model:適合增強augmentation
SOTA
- 注:因為軟硬體差異,上表(表6)中inference speed通常是uncontrolled
- 補充:
- Scale-YOLOv4、YOLOv5-P6等模型效能更高,但size更大
- Transformer based detector將accuracy-SOTA推高到了∼60 AP
參考連結
本筆記的參考連結,都很不錯,特別是第2篇,建議閱讀!