博客專欄

EEPW首頁(yè) > 博客 > 百度:YOLOX和NanoDet都沒(méi)我優(yōu)秀!輕量型實(shí)時(shí)目標(biāo)檢測(cè)模型PP-PicoDet開(kāi)源

百度:YOLOX和NanoDet都沒(méi)我優(yōu)秀!輕量型實(shí)時(shí)目標(biāo)檢測(cè)模型PP-PicoDet開(kāi)源

發(fā)布人:計(jì)算機(jī)視覺(jué)工坊 時(shí)間:2021-11-06 來(lái)源:工程師 發(fā)布文章

導(dǎo)讀

百度提出新型移動(dòng)端實(shí)時(shí)檢測(cè)模型PP-PicoDet。本文對(duì)anchor-free策略在輕量型檢測(cè)器中的應(yīng)用進(jìn)行了探索;對(duì)骨干結(jié)構(gòu)進(jìn)行了增強(qiáng)并設(shè)計(jì)了一種輕量Neck部件;同時(shí)對(duì)SimOTA策略與Loss進(jìn)行了改進(jìn)。通過(guò)上述改進(jìn),所提PP-PicoDet取得了超越其他實(shí)時(shí)檢測(cè)模型的性能。 

1.jpg

論文鏈接:https://arxiv.org/abs/2111.00902

代碼鏈接:https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.3/configs/picodet

比YOLOX還要優(yōu)秀,百度提出新型移動(dòng)端實(shí)時(shí)檢測(cè)模型PP-PicoDet。本文對(duì)anchor-free策略在輕量型檢測(cè)器中的應(yīng)用進(jìn)行了探索;對(duì)骨干結(jié)構(gòu)進(jìn)行了增強(qiáng)并設(shè)計(jì)了一種輕量Neck部件;同時(shí)對(duì)SimOTA策略與Loss進(jìn)行了改進(jìn)。通過(guò)上述改進(jìn),所提PP-PicoDet取得了超越其他實(shí)時(shí)檢測(cè)模型的性能。比如:PicoDet-S僅需0.99M參數(shù)即可取得30.6%mAP,比YOLOX-Nano高4.8%同時(shí)推理延遲降低55%,比NanoDet指標(biāo)高7.1%,同時(shí)推理速度高達(dá)150fps(驍龍865)。

Abstract

更佳的精度-效率均衡已成為目標(biāo)檢測(cè)領(lǐng)域極具挑戰(zhàn)性問(wèn)題。本文致力于目標(biāo)檢測(cè)的關(guān)鍵技術(shù)優(yōu)化與架構(gòu)選擇以提升其性能與效率。

我們對(duì)anchor-free策略在輕量型目標(biāo)檢測(cè)模型中的應(yīng)用進(jìn)行了探索;我們對(duì)骨干結(jié)構(gòu)進(jìn)行了增強(qiáng)并設(shè)計(jì)了一種輕量型Neck結(jié)構(gòu)以提升模型的特征提取能力;我們對(duì)label assignment策略與損失函數(shù)進(jìn)行了改進(jìn)以促進(jìn)更穩(wěn)定、更高效的訓(xùn)練。通過(guò)上述優(yōu)化,我們構(gòu)建了一類實(shí)時(shí)目標(biāo)檢測(cè)器PP-PicoDet,它在移動(dòng)端設(shè)備上取得了非常優(yōu)異的性能。

相比其他主流檢測(cè)模型,所提方案取得了更好的精度-效率均衡。比如

PicoDet-S僅需0.99M參數(shù)即可取得30.6%mAP,比YOLOX-Nano高4.8%同時(shí)推理延遲降低55%,比NanoDet指標(biāo)高7.1%;當(dāng)輸入尺寸為320時(shí),在移動(dòng)端ARM CPU上可以達(dá)到123FPS處理速度,推理框架為PaddleLite時(shí),推理速度可達(dá)150FPS。

PicoDet-M僅需2.15M參數(shù)即可取得34.3%mAP指標(biāo);

PicoDet-L僅需3.3M參數(shù)即可取得40.9%mAP,比YOLOv5s高3.7%mAP,推理速度快44%。

如下圖所示,所提方案具有最佳的精度-效率均衡。

2.jpg

Contribution

本文貢獻(xiàn)主要包含以下幾點(diǎn):

采用CSP架構(gòu)構(gòu)建CSP-PAN,它通過(guò)卷積對(duì)所有分支輸入通道進(jìn)行統(tǒng)一,大幅提升特征提取能力,同時(shí)減少了參數(shù)量。與此同時(shí),我們將深度卷積從擴(kuò)展到提升感受野;

label assignment是目標(biāo)檢測(cè)非常重要的模塊。我們?cè)赟imOTA的基礎(chǔ)上對(duì)某些計(jì)算細(xì)節(jié)進(jìn)行了優(yōu)化,在不損失效率的同時(shí)增強(qiáng)了性能。具體來(lái)說(shuō),我們采用VarifocalLoss與GIoULoss的加權(quán)組合計(jì)算損失矩陣 。

ShuffleNetV2在移動(dòng)端非常高效,我們對(duì)其進(jìn)行了增強(qiáng)并提出一種新的骨干ESNet(Enhanced ShuffleNet, ESNet);

提出一種用于檢測(cè)的改進(jìn)版One-Shot NAS方案以尋找最佳的架構(gòu)。

Method

接下來(lái),我們將首先呈現(xiàn)設(shè)計(jì)思路與NAS搜索方案,這有助于提升精度、降低推理延遲;然后我們?cè)俳榻B關(guān)于Neck與Head模塊的增強(qiáng)策略;最后我們對(duì)Label Assignment以及其他提升性能的策略進(jìn)行介紹。

Better Backbone

實(shí)驗(yàn)發(fā)現(xiàn):相比其他模型,ShuffleNetV2在移動(dòng)端具有更好的魯棒性 。為提升ShuffleNetV2的性能,我們參考PP-LCNet對(duì)其進(jìn)行了增強(qiáng)并構(gòu)建一種新的骨干ESNet。

3.jpg

上圖給出了ESNet中的ESBlock結(jié)構(gòu)示意圖。SE是一種非常棒的提升特征表達(dá)能力的操作,故ESBlock中包含了SE模塊。SE模塊的設(shè)計(jì)參考了MobileNetV3,即兩個(gè)激活函數(shù)分別為Sigmoid、H-Sigmoid。

通道置換為ShuffleNetV2中的通道提供了信息交換,但它會(huì)導(dǎo)致融合特征損失。為解決該問(wèn)題,當(dāng)stride=2時(shí),我們添加了depth與point卷積對(duì)不同通道信息進(jìn)行融合(見(jiàn)上圖3-a)。

GhostNet中的Ghost模塊能夠用更少的參數(shù)生成更多特征并提升模型的學(xué)習(xí)能力。因此,當(dāng)stride=1時(shí),我們?cè)贓SBlock中引入Ghost模塊以提升其性能(見(jiàn)上圖3-b)。

上述部分內(nèi)容是手工方式的模塊設(shè)計(jì),文中還用到了NAS技術(shù)對(duì)ESNet進(jìn)行搜索以更好的適配檢測(cè)模型。對(duì)該部分內(nèi)容感興趣的同學(xué)建議查看原文,筆者對(duì)此暫時(shí)略過(guò)。

CSP-PAN and Detector Head

4.jpg

上圖給出了PP-PicoDet整體架構(gòu)示意圖。接下來(lái),我們重點(diǎn)關(guān)注CSP-PAN與Head部分。CSP結(jié)構(gòu)已被廣泛應(yīng)用于YOLOv4與YOLOX的Neck部分。

在原始CSP-PAN中,每個(gè)輸出特征的通道數(shù)與源自骨干的輸入通道數(shù)保持相同。大通道數(shù)的結(jié)構(gòu)在移動(dòng)端存在昂貴的計(jì)算消耗。我們通過(guò) 卷積將輸出特征的通道數(shù)調(diào)整到最小通道數(shù) 以解決上述問(wèn)題。

Top-down與bottom-up兩路特征融合通過(guò)CSP結(jié)構(gòu)執(zhí)行。此外,我們還在CSP-PAN的基礎(chǔ)上添加了一個(gè)特征尺度以檢測(cè)更多目標(biāo)(見(jiàn)上圖P6分支)。與此同時(shí),除了卷積外,其他卷積均為深度卷積。這種結(jié)構(gòu)設(shè)計(jì)可以帶來(lái)可觀的性能提升,同時(shí)參數(shù)量更少。

在檢測(cè)頭部分,我們采用深度分離卷基于卷積提升感受野。深度分離卷積的數(shù)量可以設(shè)置為2、4或者更多。Neck與Head均具有四個(gè)尺度分支,我們保持兩者的通道數(shù)一致。YOLOX采用更少通道數(shù)的“解耦頭”提升性能;而PP-PicoDet的“耦合頭”具有更好的性能,且無(wú)需減少通道數(shù) 。該方案的Head與YOLOX的Head具有幾乎相同的參數(shù)量和推理速度。

Label Assignment Strategy and Loss

正負(fù)樣本的標(biāo)簽分類對(duì)于目標(biāo)檢測(cè)器有著非常重要的影響。RetinaNet通過(guò)IoU進(jìn)行正負(fù)樣本劃分;FCOS則將中心點(diǎn)位于GT的anchor視作正樣本;YOLOv4與YOLOv5則選擇中心點(diǎn)與近鄰anchor作為正樣本;ATSS則通過(guò)統(tǒng)計(jì)信息進(jìn)行正負(fù)樣本劃分;SimOTA則是一種隨訓(xùn)練過(guò)程而動(dòng)態(tài)變換的標(biāo)簽分配策略,具有更好的性能。因此,我們選擇SimOTA作為標(biāo)簽分配方案。

在SimOTA的基礎(chǔ)上,我們對(duì)其cost矩陣進(jìn)行優(yōu)化,采用VarifocalLoss與GIoULoss的加權(quán)組合計(jì)算。定義如下:

對(duì)于分類頭,我們采用VarifocalLoss耦合分類預(yù)測(cè)與質(zhì)量預(yù)測(cè);對(duì)于回歸頭,我們采用GIoU與DistributionFocalLoss。整體損失定義如下:

Other Strategies

近年來(lái),越來(lái)越多的激活函數(shù)取得了比ReLU更優(yōu)的性能。其中,H-Swish是一種移動(dòng)端友好的算子,故我們將檢測(cè)器中的ReLU替換為H-Swish,性能大幅提升同時(shí)推理速度不變 。

相比線性學(xué)習(xí)率機(jī)制,cosine 學(xué)習(xí)率機(jī)制更為平滑且有益于訓(xùn)練穩(wěn)定性。

過(guò)多的數(shù)據(jù)增強(qiáng)可以提升增強(qiáng)效應(yīng),但會(huì)影響輕量型模型的訓(xùn)練難度。因此,我們僅使用RandomFlip, RandomCrop, Multi-scale Resize等數(shù)據(jù)增廣。

Experiments

5.jpg

上表給出了所提方案與其他輕量型檢測(cè)器的性能對(duì)比,從中可以看到:無(wú)論是精度還是速度,所提方案均大幅超越了所有YOLO模型 。性能的提升主要源于以下幾點(diǎn)改進(jìn):

Neck部分比其他YOLO模型更輕量,故骨干與Head可以賦予更多計(jì)算量;

VarifocalLoss的組合可以處理類別不平衡、動(dòng)態(tài)學(xué)習(xí)樣本分類與FOCS的回歸方案在輕量模型中表現(xiàn)更佳;

在相同參數(shù)量下,PP-PicoDet-S超越了YOLOX-Nano與NanoDet;PP-PicoDet-L的精度與速度均超越了YOLOv5s。此外,由于更高效的卷積優(yōu)化,PaddleLite的推理速度要比NCNN更快。總而言之,PP-PicoDet在極大程度上領(lǐng)先其他SOTA模型。

Ablation Study

6.jpg

上表給出了PP-PicoDet從基線模型逐步優(yōu)化而來(lái)的性能對(duì)比?;€模型類似NanoDet,骨干為ShuffleNetV2-1x,Neck采用了無(wú)卷積PAN,損失采用了GFL,標(biāo)簽分配采用ATSS,激活函數(shù)為L(zhǎng)eakyReLU。從中可以看到:

采用本文所提CSP-PAN可以帶來(lái)3.8%mAP指標(biāo)提升,而參數(shù)量提升少于50K;

相比QFL,VFL可以帶來(lái)0.1%mAP指標(biāo)提升;

ATSS與SimOTA具有相同的性能,而改進(jìn)版SimOTA可以將性能提升到30.0%mAP;

相比LeakyReLU,H-Swish可以帶來(lái)0.9%mAP指標(biāo)提升。

7.jpg

上表對(duì)比了ShuffleNetV2-1.5x與ESNet-1x的性能,可以看到:ESNet具有更高的性能、更快的推理速度、更少的計(jì)算量。

8.jpg

上表對(duì)比了人工設(shè)計(jì)模型與NAS搜索模型的性能,可以看到:搜索到的模型的指標(biāo)僅下降0.2%mAP,而推理延遲減少41.5% 。因此,我們將基線模型的骨干替換為ESNet-0.75x,參數(shù)量減少約200K,而性能僅下降0.3%mAP。

本文僅做學(xué)術(shù)分享,如有侵權(quán),請(qǐng)聯(lián)系刪文。

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



關(guān)鍵詞: AI

相關(guān)推薦

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

關(guān)閉