【论文解读】打破常规,逆残差模块超强改进,新一代移动端模型MobileNeXt来了!精度速度双超MobileNetV2...
文章來源于極市平臺,作者Happy
導語:該文是依圖科技&新加坡國立大學顏水成團隊提出的一種對標MobileNetV2的網絡架構MobileNeXt。它針對MobileNetV2的核心模塊逆殘差模塊存在的問題進行了深度分析,提出了一種新穎的SandGlass模塊,并用于組建了該文的MobileNeXt架構,SandGlass是一種通用的模塊,它可以輕易的嵌入到現有網絡架構中并提升模型性能。該文應該是近年來為數不多的優秀終端模型了,推薦指數五顆星。
paper: https://arxiv.org/abs/2007.02269
code: https://github.com/zhoudaquan/rethinking_bottleneck_design(未開源)
Abstract
截止目前,逆殘差模塊已成為手機端網絡架構設計的主流架構。它通過引入兩個主要的設計規則(1.逆殘差學習;2.線性瓶頸層)對經典的殘差瓶頸模塊進行了改變。
該文作者對這種設計模式改變的必要性進行了重思考,發現:這種設計模塊可能導致信息損失與梯度混淆。鑒于此,作者提出對該結構進行鏡像并提出一種新穎的瓶頸模塊,稱之為SandGlass Block,它在更高維度進行恒等映射與空間變換,因此可以有效的緩解信息損失與梯度混淆。
作者通過實驗證實:所提模塊比已有的逆殘差模塊更有效。在ImageNet分類任務中,通過簡單的模塊替換(即采用SandGlass 替換MobileNetV2中的InvertedResidualBlock),即可取得了1.7%的性能提升,且不會導致額外的參數量與計算量提升;在VOC2007測試集上,可以按到目標檢測指標的0.9%mAP的提升。
與此同時,作者將所提模塊嵌入到NAS方法(DARTS)搜索空間中,可以取得了0.13%的性能提升且參數量降低25%。
Method
下圖給出了目前CNN網絡架構常用的兩種主流模塊與本文所提的模塊:
Bottleneck,見下圖a,它包含兩個1x1卷積(分別進行降維與升維)與一個3x3卷積(用于空間信息變換),它是一種heavy-weight模塊;
Inverted Residual Block,見下圖b,它包含兩個1x1卷積(分別進行升維與降維)與一個3x3深度卷積(用于空間信息變換),它是一種light-weight模塊。
SandGlass,見上圖c,整體形勢上它與Bottlneck比較類似,但它引入了深度卷積降低計算量,更多描述見下文。
SandGlass
已有研究表明:(1) 更寬的網絡有利于緩解梯度混淆問題并有助于提升模型性能;(2)逆殘差模塊中的短連接可能會影響梯度回傳。
考慮到上述逆殘差模塊的局限性,作者對其設計規則進行重思考并提出了SandGlass模塊緩解上述問題。該模塊的設計主要源自如下幾點分析:
保持更多的信息從bottom傳遞給top層,進而有助于梯度回傳;
深度卷積是一種輕量型單元,可以執行兩次深度卷積以編碼更多的空間信息。
基于上述分析,作者從以下幾個方面進行了模塊的精心設計(最終設計的模塊見上圖)。
Position of Expansion and Reduction. 在原始的逆殘差模塊中先進行升維再進行降維。基于前述分析,為確保高維度特征的短連接,作者對兩個1x1卷積的順序進行了調整。假設表示輸入張量,表示輸出張量(注:此時尚未考慮深度卷積),那么該模塊的可以寫成如下形式,見上圖b中的中間兩個1x1卷積。
High-dimensional Shortcut. 作者并未在瓶頸層間構建短連接,而是在更高維特征之間構建短連接,見上圖b。更寬的短連接有助于更多的信息從輸入F傳遞給輸出G,從而有更多的梯度回傳。
Learning expressive spatial features. 1x1卷積有助于編碼通道間的信息,但難以獲取空間信息,因此,在這里作者沿著逆殘差模塊的思路引入深度卷積編碼空間信息。不同于逆殘差模塊在兩個1x1卷積之間引入深度卷積,作者認為1x1卷積導致了減少的空域信息編碼,因此將深度卷積置于兩個1x1卷積之外,見上圖b中的兩個3x3深度卷積。該模塊可以采用如下公式進行描述:
其中分別表示1x1卷積與深度卷積。從而確保了深度卷積在高維空間處理并得到更豐富的特征表達。
Activation Layer. 已有研究表明:線性瓶頸層有助于避免特征出現零化現象,進而導致信息損失。基于此,作者在用于降維的1x1卷積后不添加激活函數。同時最后一個深度卷積后也不添加激活函數,激活函數今天加第一個深度卷積與最后一個1x1卷積之后。
Block Structure. 基于上述考慮,我們得到了該文所設計的新穎的殘差瓶頸模塊,結構如下表與上圖b所示。注:當輸入與輸出通道數不相同時不進行短連接操作。
MobileNeXt Architecture
前面已經對該文所提到的SandGlass模塊進行了詳細介紹說明,那么接下來就是如何利用上述模塊構建網路架構了。作者將上述模塊構建的網絡架構稱之為MobileNeXt(是為了對標MobileNet嗎?哈哈)。MobileNeXt的詳細配置信息見下表。注:SandGlass中的擴展比例與MobileNetV2中的相同,均為6.
Identity tensor multiplier
已有研究表明:殘差模塊中的短連接有助于梯度跨層傳播。但是,作者通過實驗發現:沒有必要保持全局恒等tensor與殘差分支組合。為使得該網絡更適合于手機端,作者引入了一個新的超參數:identity tensor multiplier,表示為。為簡單起見,我們假設表示殘差分支的變換函數,那么添加該超參數后的模塊可以重寫為:
這里引入的超參數有兩個作用:
通過降低該超參數,每個模塊中的add數量可以進一步降低,因為add操作會占用不少耗時。用戶可以選擇更少的以得到更好的推理速度且性能幾乎無影響;
可以降低內存訪問時間。影響模型推理的一個重要因素是:內存訪問消耗(Memory acces cost, MAC)。降低該超參數有助于減少cache占用,進而加速推理。更多分析見實驗部分。
Experiments
為說明所提方案的有效性,作者在ImageNet與VOC數據集上進行了實驗分析。在模型訓練過程中,優化器為SGD(momentum=0.9,weight_decay=),初始學習率為0.05,cosine方式衰減,BatchSize=256,4個GPU。如無特殊說明,模型總計訓練200epoch。
Comparsions with MobileNetV2
下表給出了所提方法與MobileNetV2在不同參數量下的性能對比。可以看到:(1) 所提方法在參數量和精度方面均優于MobileNetV2;(2) 模型越小,所提方法優勢越明顯。
下表給出了所提方法在添加后訓練量化后的性能對比。可以看到:后訓練量化對于MobileNet的精度影響非常大,而所提方法經量化后性能差異進一步拉大。產生這種現象的原因有兩點:(1) 相比MobileNetV2,所提方法將短連接有瓶頸區域移到了高維區域,經由量化,跟過的信息得以保留;(2) 采用更多的深度卷積有助于保留更多的空域信息,而空域信息有助于分類性能提升。
為更好的說明所提模塊有效性,作者將MobileNetV2的卷積數提升到與SandGlass相同。實驗結果見下表。盡管添加了額外的深度卷積有確實提升了模型性能,但仍比所提方法的性能低1%,而且MobileNetV2添加額外的深度卷積還導致了參數量與計算量的增加。
此外,作者還給出了所提方法與其他SOTA方法的性能對比,見下表。注:為更好的說明所提方法的優越性,作者還額外引入了SE模塊。
下表給出了超參數不同配置時的模型性能對比,注:硬件平臺為Google Pixel 4XL手機,Pytorch導出模型。可以看到隨著該超分數的醬燒,推理速度有提升,且性能無顯著下降。此外,作者還提到,在Pixel 4XL平臺,TF-Lite推理框架下,MobileNeXt的推理速度為66ms,MobileNetV2的推理速度為68ms(可能這里的模型進行了量化,作者原文并未細說)。
Object Detection
為探索所提方案的遷移性能,作者在目標檢測任務上進行了更多的實驗分析,結果見下表。相比MobileNetV2,所提方法作為Backbone時的性能可以提升0.09mAP。
Combine with NAS
為更好說明所提方案的有效性,作者還將其與NAS相結合,將該模塊為作為NAS網絡的搜索空間。相關結果見下表。關于NAS所得網路架構建議查看原文的supp部分內容。
好了,全文核心內容到此結束。對此感興趣的小伙伴建議去看原文,雖然這里已經將文章核心介紹清楚了,但實驗部分的分析還是建議查看原文。
Conclusion
該文對逆殘差模塊中的設計規則與缺陷進行了深度分析,并基于分析結果提出一種新穎的稱之為SandGlass的模塊。它打破了傳統殘差模塊的設計思想并著重說明了高維度特征進行短連接的重要。最后作者通過實驗在分類、檢測以及NAS方面論證了所提方案的有效性。
◎作者檔案
Happy,一個愛“胡思亂想”的AI行者
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯獲取一折本站知識星球優惠券,復制鏈接直接打開:https://t.zsxq.com/yFQV7am本站qq群1003271085。加入微信群請掃碼進群:總結
以上是生活随笔為你收集整理的【论文解读】打破常规,逆残差模块超强改进,新一代移动端模型MobileNeXt来了!精度速度双超MobileNetV2...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Python基础】如何用Pandas处
- 下一篇: 【Python基础】Python 流程控