GitHub 又一開發必備神器問世,代號「PP-LCNet」!
算法速度優化遇到瓶頸,達不到要求?應用環境沒有高性能硬件只有 CPU?
是不是直接戳中了各位開發者的痛點!莫慌,今天小 G 就來爲萬千開發者破局~
這個破局點就是:針對 CPU 設備及加速庫 MKLDNN 定製的骨幹網絡 PP-LCNet!
空口無憑,上圖爲證!
從上圖我們可以看出,PP-LCNet 在同樣精度的情況下,速度遠超當前所有的骨架網絡,最多可以有 2 倍的性能優勢!它應用在比如目標檢測、語義分割等任務算法上,也可以使原本的網絡有大幅度的性能提升~
而這個 PP-LCNet 的論文發佈和代碼開源後,也着實引來了衆多業界開發者的關注,各界大神把 PP-LCNet 應用在 YOLO 系列算法上也真實帶來了極其可觀的性能收益。
這時候是不是有小夥伴已經按耐不住也想直接上手試試了?!
小 G 識趣地趕緊送上開源代碼的傳送門 ⬇️ 大家一定要 Star 收藏以免走失,也給開源社區一些認可和鼓勵。
https://github.com/PaddlePaddle/PaddleClas
而這個 PP-LCNet 到底是如何設計,從而有這麼好的性能的呢?下面小編就帶大家來領略一下:
1. PP-LCNet 核心技術解讀
近年來,很多輕量級的骨幹網絡問世,各種 NAS 搜索出的網絡尤其亮眼。但這些算法的優化都脫離了產業最常用的 Intel CPU 設備環境,加速能力也往往不合預期。
百度飛槳圖像分類套件 PaddleClas 基於這樣的產業現狀,針對 Intel CPU 及其加速庫 MKLDNN 定製了獨特的高性能骨幹網絡 PP-LCNet。比起其他的輕量級 SOTA 模型,該骨幹網絡可以在不增加推理時間的情況下,進一步提升模型的性能,最終大幅度超越現有的 SOTA 模型。
我們經過大量的實驗發現,在基於 Intel CPU 的設備上,尤其當啓用 MKLDNN 加速庫後,很多看似不太耗時的操作反而會增加延時,比如 elementwise-add 操作、split-concat 結構等。所以最終我們選用了結構儘可能精簡、速度儘可能快的 block 組成我們的 BaseNet(類似 MobileNetV1)。
基於 BaseNet,我們通過實驗,總結出四條几乎不增加延時但又能夠提升模型精度的方法,下面將對這四條策略進行詳細介紹:
更好的激活函數
自從卷積神經網絡使用了 ReLU 激活函數後,網絡性能得到了大幅度提升。近些年 ReLU 激活函數的變體也相繼出現,如 Leaky-ReLU、P-ReLU、ELU 等。2017 年,谷歌大腦團隊通過搜索的方式得到了 swish 激活函數,該激活函數在輕量級網絡上表現優異。在 2019 年,MobileNetV3 的作者將該激活函數進一步優化爲 H-Swish,該激活函數去除了指數運算,速度更快,網絡精度幾乎不受影響。我們也經過很多實驗發現該激活函數在輕量級網絡上有優異的表現。所以在 PP-LCNet 中,我們選用了該激活函數。
合適的位置添加 SE 模塊
SE 模塊是 SENet 提出的一種通道注意力機制,可以有效提升模型的精度。但是在 Intel CPU 端,該模塊同樣會帶來較大的延時,如何平衡精度和速度是我們要解決的一個問題。雖然在 MobileNetV3 等基於 NAS 搜索的網絡中對 SE 模塊的位置進行了搜索,但是並沒有得出一般的結論。我們通過實驗發現,SE 模塊越靠近網絡的尾部對模型精度的提升越大。下表也展示了我們的一些實驗結果:
最終,PP-LCNet 中的 SE 模塊的位置選用了表格中第三行的方案。
更大的卷積核
在 MixNet 的論文中,作者分析了卷積核大小對模型性能的影響,結論是在一定範圍內大的卷積核可以提升模型的性能,但是超過這個範圍會有損模型的性能,所以作者組合了一種 split-concat 範式的 MixConv,這種組合雖然可以提升模型的性能,但是不利於推理。我們通過實驗總結了一些更大的卷積核在不同位置的作用,類似 SE 模塊的位置,更大的卷積核在網絡的中後部作用更明顯,下表展示了 5x5 卷積核的位置對精度的影響:
實驗表明,更大的卷積核放在網絡的中後部即可達到放在所有位置的精度,與此同時,獲得更快的推理速度。PP-LCNet 最終選用了表格中第三行的方案。
GAP 後使用更大的 1x1 卷積層
在 GoogLeNet 之後,GAP(Global-Average-Pooling)後往往直接接分類層,但是在輕量級網絡中,這樣會導致 GAP 後提取的特徵沒有得到進一步的融合和加工。如果在此後使用一個更大的 1x1 卷積層(等同於 FC 層),GAP 後的特徵便不會直接經過分類層,而是先進行了融合,並將融合的特徵進行分類。這樣可以在不影響模型推理速度的同時大大提升準確率。
BaseNet 經過以上四個方面的改進,得到了 PP-LCNet。下表進一步說明了每個方案對結果的影響:
2. 下游任務性能驚豔提升
圖像分類
圖像分類我們選用了 ImageNet 數據集,相比目前主流的輕量級網絡,PP-LCNet 在相同精度下可以獲得更快的推理速度。當使用百度自研的 SSLD 蒸餾策略後,精度進一步提升,在 Intel CPU 端約 5ms 的推理速度下 ImageNet 的 Top-1 Acc 竟然超過了 80%,Amazing!!!
目標檢測
目標檢測的方法我們選用了百度自研的 PicoDet,該方法主打輕量級目標檢測場景。下表展示了在 COCO 數據集上、backbone 選用 PP-LCNet 與 MobileNetV3 的結果的比較。無論在精度還是速度上,PP-LCNet 的優勢都非常明顯。
語義分割
語義分割的方法我們選用了 DeeplabV3+。下表展示了在 Cityscapes 數據集上、backbone 選用 PP-LCNet 與 MobileNetV3 的比較。在精度和速度方面,PP-LCNet 的優勢同樣明顯。
3. 實際拓展應用結果說明
PP-LCNet 在計算機視覺下游任務上表現很出色,那在真實的使用場景如何呢?本節簡述其在 PP-OCR v2、PP-Shitu 上的表現。
在 PP-OCR v2 上,只將識別模型的 backbone 由 MobileNetV3 替換爲 PP-LCNet 後,在速度更快的同時,精度可以進一步提升。
在 PP-Shitu 中,將 Backbone 的 ResNet50_vd 替換爲 PP-LCNet-2.5x 後,在 Intel-CPU 端,速度快 5 倍,recall@1 基本和 ResNet50_vd 持平。
PP-LCNet 並不是追求極致的 FLOPs 與 Params,而是着眼於深入技術細節,耐心分析如何添加對 Intel CPU 友好的模塊來提升模型的性能來更好地進行準確率和推理時間的平衡,其中的實驗結論也很適合其他網絡結構設計的研究者,同時也爲 NAS 搜索研究者提供了更小的搜索空間和一般結論。
自論文發表以來,PP-LCNet 引起了國內外學術界和產業界的廣泛關注,無論是各類版本的復現,還是極具探索意義和實用價值的各類視覺任務應用和技術分析文章層出不窮,將簡單模型的實用性優化方案重新帶入大家的視野,真正踐行技術讓 “生活” 更美好的初心,期待 PP-LCNet 在實際落地和應用中的更多表現。
前面提到的論文,鏈接如下:
https://arxiv.org/pdf/2109.15099.pdf
本論文工作的總體研究思路由飛槳 PaddleClas 團隊提出並實施。
PaddleClas 提供全球首個開源通用圖像識別系統,併力求爲工業界和學術界提供更高效便捷的開發工具,爲開發者帶來更流暢優質的使用體驗,訓練出更好的飛槳視覺模型,實現行業場景實現落地應用。
想要獲取更多 PaddleClas 相關介紹及教程文檔可前往⬇️:
GitHub: https://github.com/PaddlePaddle/PaddleClas
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/CnZeCy5ClG6SSamM06_Kiw