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