快到起飛 | PP-LCNet在CPU上讓模型起飛,精度提升且比MobileNetV3+快3倍
以下文章來源于集智書童 ,作者ChaucerG
本文提出了一種基于MKLDNN加速策略的輕量級CPU網(wǎng)絡(luò),即PP-LCNet,它提高了輕量級模型在多任務(wù)上的性能,對于計算機視覺的下游任務(wù),如目標檢測、語義分割等,也有很好的表現(xiàn)。
1簡介
隨著模型特征提取能力的提高以及模型參數(shù)和FLOPs數(shù)量的增加,在基于ARM架構(gòu)的移動設(shè)備或基于x86架構(gòu)的CPU設(shè)備上實現(xiàn)快速推理變得困難。在這種情況下,已經(jīng)提出了許多優(yōu)秀的Mobile網(wǎng)絡(luò),但由于MKLDNN的限制,這些網(wǎng)絡(luò)的速度在啟用MKLDNN的Intel CPU上并不理想。
在本文中,作者重新思考了在Intel-CPU上設(shè)計網(wǎng)絡(luò)的輕量級模型元素。作者特別考慮以下三個基本問題。
如何在不增加延遲的情況下促進網(wǎng)絡(luò)學(xué)習更強的特性展示。
在CPU上提高輕量級模型精度的要素是什么?
如何有效結(jié)合不同的策略在CPU上設(shè)計輕量級模型。
本文的主要貢獻是總結(jié)了一系列在不增加推理時間的情況下提高精度的方法,以及如何將這些方法結(jié)合起來以獲得更好的精度和速度的平衡。
在此基礎(chǔ)上,提出了設(shè)計輕量級CNN的幾個一般原則,為其他研究人員構(gòu)建輕量級CNN提供了新的思路CPU設(shè)備。
此外,該方法可以為神經(jīng)結(jié)構(gòu)搜索研究人員在構(gòu)建搜索空間時提供新的思路,從而更快地獲得更好的模型。
2相關(guān)工作總結(jié)
2.1 手工設(shè)計的架構(gòu)
VGG展示了一種簡單而有效的構(gòu)建深度網(wǎng)絡(luò)的策略:用相同的維度堆疊模塊。
GoogLeNet構(gòu)造了Inception block,它包含了4個并行運算:1x1卷積,3x3卷積,5x5卷積和max pooling。GoogLeNet讓卷積神經(jīng)網(wǎng)絡(luò)變得足夠輕,然后越來越輕的網(wǎng)絡(luò)出現(xiàn)。
MobileNetV1用depthwise and pointwise convolutions代替了標準卷積,大大減少了模型的參數(shù)和FLOPs數(shù)量。
MobileNetV2的作者提出了Inverted block,進一步減少了模型的FLOPs,同時提高了模型的性能。
ShuffleNetV1/V2通過channel shuffle進行信息交換,減少了網(wǎng)絡(luò)結(jié)構(gòu)不必要的開銷。
GhostNet的作者提出了一種新的Ghost模塊,可以用更少的參數(shù)生成更多的特征圖,從而提高模型的整體性能。
2.2 神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)搜索
隨著GPU硬件的發(fā)展,主要關(guān)注點已經(jīng)從手工設(shè)計的架構(gòu)轉(zhuǎn)向了自適應(yīng)地對特定任務(wù)進行系統(tǒng)搜索的架構(gòu)。NAS生成的網(wǎng)絡(luò)大多使用與MobileNetV2類似的搜索空間,包括EfficientNet、MobileNetV3、FBNet、DNANet、OFANet等。
MixNet提出在一層中混合不同核大小的深度卷積。NAS生成的網(wǎng)絡(luò)依賴于手工生成的塊,如“BottleNeck”、“Inverted-block”等。該方法可以減少神經(jīng)結(jié)構(gòu)搜索的搜索空間,提高搜索效率,并有可能提高整體性能。
3本文方法
雖然有許多輕量級網(wǎng)絡(luò)在基于ARM的設(shè)備上的推斷速度很快,但很少有網(wǎng)絡(luò)考慮到Intel CPU上的速度,特別是在啟用了MKLDNN之類的加速策略時。
許多提高模型精度的方法在ARM設(shè)備上不會增加太多的推理時間,但是當切換到Intel CPU設(shè)備時,情況會有所不同。本文總結(jié)了一些在不增加推理時間的情況下提高模型性能的方法。下面將詳細描述這些方法。
作者使用MobileNetV1提到的DepthSepConv作為基本塊。該塊沒有shortcut方式之類的操作,因此沒有concat或elementwise-add之類的附加操作,這些操作不僅會降低類的推理速度模型,而且對小模型也不會提高精度。
此外,該塊經(jīng)過Intel CPU加速庫的深度優(yōu)化,推理速度可以超過其他輕量級塊,如 inverted-block或shufflenet-block。將這些塊堆疊起來形成一個類似于MobileNetV1的BaseNet。將BaseNet和一些現(xiàn)有的技術(shù)結(jié)合在一起,形成一個更強大的網(wǎng)絡(luò),即PP-LCNet。
3.1 更好的激活函數(shù)
眾所周知,激活函數(shù)的質(zhì)量往往決定著網(wǎng)絡(luò)的性能。由于網(wǎng)絡(luò)的激活函數(shù)由Sigmoid變?yōu)镽eLU,網(wǎng)絡(luò)的性能得到了很大的提高。近年來,出現(xiàn)了越來越多超越ReLU的激活函數(shù)。當EfficientNet使用Swish激活函數(shù)表現(xiàn)出更好的性能后,MobileNetV3的作者將其升級為HSwish,從而避免了大量的指數(shù)運算。從那時起,許多輕量級網(wǎng)絡(luò)也使用這個激活函數(shù)。作者還將BaseNet中的激活函數(shù)從ReLU替換為HSwish,性能有了很大的提高,而推理時間幾乎沒有改變。
3.2 將SE Block放在適當?shù)奈恢?/p>
自SE-Block被提出以來,它已經(jīng)被大量的網(wǎng)絡(luò)所使用。該模塊還幫助SENet贏得了2017年ImageNet分類競賽。它在權(quán)衡網(wǎng)絡(luò)通道以獲得更好的特性方面做得很好,它的速度改進版本也用于許多輕量級網(wǎng)絡(luò),如MobileNetV3。
但是,在Intel cpu上,SE模塊增加了推理時間,所以不能將其用于整個網(wǎng)絡(luò)。事實上作者做了大量的實驗和觀察,當SE模塊位于網(wǎng)絡(luò)的末端時,它可以起到更好的作用。因此,只需將SE模塊添加到網(wǎng)絡(luò)尾部附近的模塊中。這帶來了一個更好的精度-速度平衡。與MobileNetV3一樣,SE模塊的2層激活函數(shù)分別為ReLU和HSigmoid。
3.3 更大的卷積核
卷積核的大小常常影響網(wǎng)絡(luò)的最終性能。在MixNet中,作者分析了不同大小的卷積核對網(wǎng)絡(luò)性能的影響,最終在網(wǎng)絡(luò)的同一層中混合了不同大小的卷積核。但是這樣的混合降低了模型的推理速度,所以作者嘗試在單層中只使用一種大小的卷積核,并確保在低延遲和高精度的情況下使用大的卷積核。
實驗發(fā)現(xiàn),類似于SE模塊的位置,取代3x3卷積內(nèi)核只有5x5卷積內(nèi)核的末端網(wǎng)絡(luò)將實現(xiàn)替換的影響幾乎所有層的網(wǎng)絡(luò),所以只在網(wǎng)絡(luò)的末端做了這個替換操作。
3.4 Larger dimensional 1×1 conv layer after GAP
PP-LCNet中,經(jīng)過GAP后的網(wǎng)絡(luò)輸出維數(shù)很小。而直接添加最終的分類層會失去特征的組合。為了使網(wǎng)絡(luò)具有更強的擬合能力,在最后的GAP層之后增加了一個1280維尺寸為1×1 conv(相當于FC層),這將允許更多的模型存儲,而不增加推斷時間。
4實驗
4.1 圖像分類
表2顯示了PP-LCNet在不同尺度下的top-1和top-5的驗證精度和推斷時間。此外,采用SSLD精餾法可大大提高模型的精度。表3顯示了PP-LCNet與最先進模型的比較。與其他模型相比,PP-LCNet顯示出強大的競爭力。
4.2 目標檢測
對于目標檢測任務(wù),使用PaddleDection3開發(fā)的輕量級PicoDet作為Baseline方法。表4顯示了PP-LCNet和MobileNetV3為Backbone的目標檢測結(jié)果。與MobileNetV3相比,PP-LCNet大大提高了COCO上的mAP和推理速度。
4.3 語義分割
使用MobileNetV3作為Backbone進行比較。如表5所示,PP-LCNet-0.5x表現(xiàn)更好MobileNetV3-large-0.5x在mIoU上提高了2.94%,但推斷時間減少了53ms。與 larger models相比,PP-LCNet也具有較強的性能。以PPLCNet-1x為Backbone時,模型的mIOU比MobileNetV3-large-0.75x提高了1.5%,但推理時間縮短了55ms。
4.4 消融實驗
1、SE模塊在不同位置的影響:
SE模塊是通道間的注意力機制,可以提高模型的準確性。但如果盲目增加SE模塊的數(shù)量,則會降低模型的推理速度,因此如何在模型中適當添加SE模塊是值得研究和探索的。通過實驗發(fā)現(xiàn)SE模塊會對網(wǎng)絡(luò)的末端產(chǎn)生較大的影響。如表7所示僅在網(wǎng)絡(luò)中不同位置添加2個SE模塊的結(jié)果。該表清楚地顯示,對于幾乎相同的推斷時間,添加最后兩個塊更有利。因此,為了平衡推理速度,PP-LCNet只在最后兩個塊中添加了SE模塊。
2、Large-kernel在不同位置的影響:
雖然Large-kernel可以提高精度,但在網(wǎng)絡(luò)的所有位置都添加它并不是最好的方法。通過實驗,給出了正確添加Large-kernel的一般規(guī)律。表8顯示了5x5深度卷積所添加的位置。1表示DepthSepConv中的深度卷積核為5x5, 0表示DepthSepConv中的深度卷積核為3x3。從表中可以看出,與添加SE模塊的位置相似,在網(wǎng)絡(luò)尾部添加5x5卷積也更具競爭力。PP-LCNet選擇了表的第3行中的配置。
3、不同技術(shù)的影響
在PP-LCNet中使用了4種不同的技術(shù)來提高模型的性能。表9列出了不同技術(shù)對PP-LCNet的累積增長,表6列出了減少不同模塊對PP-LCNet的影響。從這2個表中可以看出,H-Swish和large-kernel可以在幾乎不增加推斷時間的情況下提高模型的性能。添加少量的SE模塊可以進一步提高模型的性能。GAP后使用更大的FC層也將大大提高精度。同時,也許因為這里涉及的矩陣比較大,使用dropout策略可以進一步提高模型的準確性。
5參考
[1].PP-LCNet: A Lightweight CPU Convolutional Neural Network
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。