博客專欄

EEPW首頁(yè) > 博客 > Yolo系列的巔峰之作:更確的目標(biāo)檢測(cè)框架(附源代碼)

Yolo系列的巔峰之作:更確的目標(biāo)檢測(cè)框架(附源代碼)

發(fā)布人:CV研究院 時(shí)間:2021-08-17 來源:工程師 發(fā)布文章

YOLOX在YOLO系列的基礎(chǔ)上做了許多有意思的工作,其主要貢獻(xiàn)在于:在YOLOV3的基礎(chǔ)上,引入了“Decoupled Head”,“Data Augmentation”,“Anchor Free” 和“SimOTA樣本匹配”的方法,構(gòu)建了一種anchor-free的端到端目標(biāo)檢測(cè)框架,并且達(dá)到了頂級(jí)的檢測(cè)水平。

·.png

 前言

YOLOX在YOLO系列的基礎(chǔ)上做了許多有意思的工作,其主要貢獻(xiàn)在于:在YOLOV3的基礎(chǔ)上,引入了“Decoupled Head”,“Data Augmentation”,“Anchor Free” 和“SimOTA樣本匹配”的方法,構(gòu)建了一種anchor-free的端到端目標(biāo)檢測(cè)框架,并且達(dá)到了頂級(jí)的檢測(cè)水平。

1.png

以在大量模型中獲得最先進(jìn)的結(jié)果:對(duì)于YOLONano僅0.91M參數(shù)和1.08G FLOPs,研究者在COCO上獲得25.3%AP,超過NanoDet 1.8%AP;對(duì)于業(yè)界應(yīng)用最廣泛的檢測(cè)器之一YOLOv3,在COCO上將其提升至47.3% AP,比當(dāng)前最佳實(shí)踐高3.0% AP;對(duì)于參數(shù)量與YOLOv4-CSP、YOLOv5-L大致相同的YOLOX-L,研究者在Tesla V100上以68.9FPS的速度在COCO上實(shí)現(xiàn)了50.0% AP,比YOLOv5-L高出1.8% AP。此外,研究者使用單個(gè)YOLOX-L模型贏得了Streaming Perception Challenge(CVPR 2021自動(dòng)駕駛研討會(huì))的第一名。

 背景

我們是在去年底萌生優(yōu)化YOLO系列的想法的,那時(shí)候我們組剛完成了AutoAssign,LLA,DeFCN,IQDet,OTA等工作,在基礎(chǔ)檢測(cè)尤其是Anchor Free和Label Assignment方向有一些自己的理解。而那時(shí)候的YOLO系列還停留在Anchor Based階段,樣本匹配也采用的是基于幾何先驗(yàn)的一對(duì)一或一對(duì)N的方案上。而隨后出現(xiàn)的各項(xiàng)工作也基本是在往大輸入分辨率和大模型的方向走?;谶@樣的大背景,我們決定啟動(dòng)YOLOX項(xiàng)目,想知道學(xué)術(shù)研究與工程落地到底能碰出什么樣的火花。

——摘自于《鏈接:https://www.zhihu.com/question/473350307/answer/2021031747》

3.png

用于YOLOX和其他最先進(jìn)目標(biāo)檢測(cè)器的精確模型(頂部)和移動(dòng)設(shè)備上lite模型的尺寸精度曲線(底部)的速度-精度權(quán)衡。

YOLOX的設(shè)計(jì),在大方向上主要遵循以下幾個(gè)原則:

所有組件全平臺(tái)可部署

避免過擬合 COCO,在保持超參規(guī)整的前提下,適度調(diào)參

不做或少做穩(wěn)定漲 點(diǎn)但缺乏新意的工作(更大模型,更多的數(shù)據(jù))

所以大家可以看到,首發(fā)的YOLOX沒有deformable conv,沒有用額外數(shù)據(jù)做pretrain,沒有momentum=0.937。回到Y(jié)OLOX設(shè)計(jì)的具體細(xì)節(jié)上,認(rèn)為與之前YOLO最大的區(qū)別在于Decoupled Head,Data Augmentation,Anchor Free和樣本匹配這幾個(gè)地方。下面將從這幾個(gè)方面展開聊。

 YOLOX-新框架

Decoupled Head

Decoupled Head是學(xué)術(shù)領(lǐng)域一階段網(wǎng)絡(luò)一直以來的標(biāo)準(zhǔn)配置(RetinaNet,F(xiàn)COS等)。相比于它樸素的實(shí)現(xiàn)方法,“解耦頭”這個(gè)詞顯得有些高大上。研究者一開始并沒有計(jì)劃對(duì)檢測(cè)頭進(jìn)行解耦,而是在將YOLOX推進(jìn)到“端到端(無需NMS)”時(shí)發(fā)現(xiàn),不論調(diào)整損失權(quán)重還是控制梯度回傳,End2end的YOLOX始終比標(biāo)準(zhǔn)的YOLOX低4~5個(gè)點(diǎn)( 如下表 ),這與在DeFCN里獲得的認(rèn)知不符。

4.png

偶然間研究者把原始的YOLO Head換成decoupled head,發(fā)現(xiàn)這里的差距又顯著縮小了,這樣的現(xiàn)象說明當(dāng)前YOLO Head的表達(dá)能力可能有所欠缺。于是將decoupled hea 應(yīng)用到了非End2End的YOLO上,結(jié)果就如下圖的所示:不僅在峰值的性能有所提升,收斂速度也明顯加快。結(jié)合之前End2end的實(shí)驗(yàn),這兩個(gè)現(xiàn)象充分說明YOLO系列一直以來使用的檢測(cè)頭可能是不合理的。

5.png

實(shí)驗(yàn)表明,解耦合檢測(cè)頭能加快模型收斂速度、提高檢測(cè)精度,同時(shí)也會(huì)帶來一點(diǎn)額外的參數(shù)量和計(jì)算成本:

用一個(gè)解耦的頭部代替YOLO的頭部,大大提高了收斂速度,如上圖所示。

分離的頭部對(duì)于End-to-End的YOLO是必不可少的。從上表可以看出:耦合頭的End-to-End YOLO檢測(cè)性能AP降低了4.2%,而解耦頭的YOLO降幅僅減小到0.8%AP。因此,用一個(gè)如下圖所示的輕型解耦頭替換了YOLO檢測(cè)頭。

6.png

將檢測(cè)頭解耦會(huì)增加運(yùn)算的復(fù)雜度,但經(jīng)過權(quán)衡速度和性能上的得失,研究者使用1個(gè)1x1 的卷積先降維,并在分類和回歸分支里各使用了2個(gè)3x3卷積,最終調(diào)整到僅僅增加一點(diǎn)點(diǎn)參數(shù),YOLOX在s,m,l,x模型速度上的輕微下降也全源自于此。在下表中展示了V100上Batch=1的推理時(shí)間,Decoupled Head帶來了1.1%的性能提升。

7.png

表面上看,Decoupled Head提升了YOLOX的性能和收斂速度,但更深層次的,它為YOLO與檢測(cè)下游任務(wù)的一體化帶來可能:例如,YOLOX+Yolact/CondInst/SOLO,可實(shí)現(xiàn)端側(cè)的實(shí)例分割;YOLOX + 34層輸出,實(shí)現(xiàn)端側(cè)人體的 17 個(gè)關(guān)鍵點(diǎn)檢測(cè)。

以往或許已經(jīng)有一些這方面的工作,但這些領(lǐng)域的SOTA依然擁有他們特殊的結(jié)構(gòu)設(shè)計(jì),使得該領(lǐng)域無法直接享用到Y(jié)OLO系列發(fā)展的成果。如今一個(gè)打開了枷鎖的檢測(cè)頭,我們認(rèn)為會(huì)讓YOLO與檢測(cè)的下游任務(wù)更深層次的結(jié)合,為檢測(cè)與下游任務(wù)的端到端一體化帶來一些變化。

Data Augmentation

Data Augmentation里面需要強(qiáng)調(diào)的一點(diǎn)是:要在訓(xùn)練結(jié)束前的15個(gè)epoch關(guān)掉Mosaic 和Mixup ,這對(duì)于YOLOX非常重要??梢韵胂?,Mosaic+Mixup生成的訓(xùn)練圖片,遠(yuǎn)遠(yuǎn)脫離自然圖片的真實(shí)分布,并且Mosaic大量的crop操作會(huì)帶來很多不準(zhǔn)確的標(biāo)注框,見下圖:

8.png

當(dāng)模型容量足夠大的時(shí)候,相對(duì)于先驗(yàn)知識(shí)(各種 tricks,hand-crafted rules ),更多的后驗(yàn)(數(shù)據(jù)/數(shù)據(jù)增強(qiáng))才會(huì)產(chǎn)生本質(zhì)影響。通過使用 COCO 提供的 ground-truth mask 標(biāo)注,作者在 YOLOX 上嘗試了 Copypaste,下表表明,在 48.6mAP 的 YOLOX-Large 模型上,使用 Copypaste 帶來0.8%的漲點(diǎn)。

9.png

但是Copypaste的實(shí)現(xiàn)依賴于目標(biāo)的mask標(biāo)注,而mask標(biāo)注在常規(guī)的檢測(cè)業(yè)務(wù)上是稀缺的資源。而由于MixUp和Copypaste有著類似的貼圖的行為,還不需要mask標(biāo)注,因此作者在Mixup上進(jìn)行了修改,實(shí)現(xiàn)了在原理上更接近Copypaste的Mixup數(shù)據(jù)增強(qiáng)方式。

Anchor Free

Anchor Free的好處是全方位的:

Anchor Based 檢測(cè)器為了追求最優(yōu)性能通常會(huì)需要對(duì)anchor box 進(jìn)行聚類分析,這無形間增加了算法工程師的時(shí)間成本;

Anchor 增加了檢測(cè)頭的復(fù)雜度以及生成結(jié)果的數(shù)量,將大量檢測(cè)結(jié)果從NPU搬運(yùn)到CPU上對(duì)于某些邊緣設(shè)備是無法容忍的。當(dāng)然還有;

Anchor Free 的解碼代碼邏輯更簡(jiǎn)單,可讀性更高。

至于為什么Anchor Free現(xiàn)在可以上YOLO ,并且性能不降反升,這與樣本匹配有密不可分的聯(lián)系。與Anchor Free比起來,樣本匹配在業(yè)界似乎沒有什么關(guān)注度。但是一個(gè)好的樣本匹配算法可以天然緩解擁擠場(chǎng)景的檢測(cè)問題( LLA、OTA里使用動(dòng)態(tài)樣本匹配可以在CrowdHuman上提升FCOS將近10個(gè)點(diǎn)),緩解極端長(zhǎng)寬比的物體的檢測(cè)效果差的問題,以及極端大小目標(biāo)正樣本不均衡的問題。甚至可能可以緩解旋轉(zhuǎn)物體檢測(cè)效果不好的問題,這些問題本質(zhì)上都是樣本匹配的問題。

loss/quality/prediction aware :基于網(wǎng)絡(luò)自身的預(yù)測(cè)來計(jì)算 anchor box 或者 anchor point 與 gt 的匹配關(guān)系,充分考慮到了不同結(jié)構(gòu)/復(fù)雜度的模型可能會(huì)有不同行為,是一種真正的 dynamic 樣本匹配。而 loss aware 后續(xù)也被發(fā)現(xiàn)對(duì)于 DeTR 和 DeFCN 這類端到端檢測(cè)器至關(guān)重要。與之相對(duì)的,基于 IoU 閾值 /in Grid(YOLOv1)/in Box or Center(FCOS) 都屬于依賴人為定義的幾何先驗(yàn)做樣本匹配,目前來看都屬于次優(yōu)方案。

center prior : 考慮到感受野的問題,以及大部分場(chǎng)景下,目標(biāo)的質(zhì)心都與目標(biāo)的幾何中心有一定的聯(lián)系,將正樣本限定在目標(biāo)中心的一定區(qū)域內(nèi)做loss/quality aware樣本匹配能很好地解決收斂不穩(wěn)定的問題。

不同目標(biāo)設(shè)定不同的正樣本數(shù)量(dynamic k):我們不可能為同一場(chǎng)景下的西瓜和螞蟻分配同樣的正樣本數(shù),如果真是那樣,那要么螞蟻有很多低質(zhì)量的正樣本,要么西瓜僅僅只有一兩個(gè)正樣本。Dynamic k的關(guān)鍵在于如何確定k,有些方法通過其他方式間接實(shí)現(xiàn)了動(dòng)態(tài)k,比如ATSS、PAA ,甚至RetinaNet ,同時(shí),k的估計(jì)依然可以是prediction aware的,我們具體的做法是首先計(jì)算每個(gè)目標(biāo)最接近的10個(gè)預(yù)測(cè),然后把這個(gè)10個(gè)預(yù)測(cè)與GT的iou加起來求得最終的k,很簡(jiǎn)單有效,對(duì)10這個(gè)數(shù)字也不是很敏感,在5~15調(diào)整幾乎沒有影響。

全局信息:有些anchor box/point處于正樣本之間的交界處、或者正負(fù)樣本之間的交界處,這類anchor box/point的正負(fù)劃分,甚至若為正,該是誰(shuí)的正樣本,都應(yīng)充分考慮全局信息。

下期我們簡(jiǎn)單再說說YOLOX的部署支持及端到端!

 實(shí)驗(yàn)

10.png

在COCO數(shù)據(jù)集上的速度及精度比較

*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



關(guān)鍵詞: 深度學(xué)習(xí)

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉