面向Mobile device的CNN模型手工设计与NAS分析总结,MobileNet V1,V2,V3,Efficient,MNasNet以及Efficient network design
? ? ? 手工方法和NAS的高效網絡模型設計總結與分析
這篇文章主要關注對于移動端,資源受限平臺的高效神經網絡設計(Manually)和搜索(NAS)。
? ? ? ? ??????高效的CNN設計不只是用在服務器,云端,資源充足的設備上,也逐漸遷移應用到mobile devices,robotics等。這些平臺具有內存有限,計算資源一定,對應用延遲敏感等特點。?最近的一些文章,已經從耗時,耗資源的大型模型設計,關注到具體能夠在mobile device上實際work起來的輕量級模型設計上。本文稍微總結一下efficient mobile-size models的設計和發展。(逐漸更新,一次性就不羅列出所有model了。)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? 基于手工設計的,包括MobileNet v1,v2;然后是stage-wise的NAS:MnasNet;接著MobileNet V3在MnasNet的基礎上,先進行stage-wise的block搜索,然后在進行layer-wise的微調。EfficientNet也是和MnasNet一樣,block-wsie的搜索。這幾篇論文,全是來自Google的一個團隊,同一批人。隨后,Facebook-Berkeley也基于NAS,搜索出了一些高效的應用于mobile device的模型。包括layer-wise的FBNet,模型自適應的ChamNet。本文主要思想是efficient network design,方法有manually design和platform-aware NAS。
-
1. MobileNet V1,V2,V3。
MobileNet V1和V2是人工設計的。
- MobileNet V1
MobileNet V1第一次采用 depthwise separable convolution來大幅度降低FLOPs和parameters。depthwise separable convolution 是采用一個depthwise convolution,接著一個11 pointwise convolution。這是17年的一個創新。當大家都在關注,如何設計更powerful的模型(不太在乎參數量,計算量,模型大小),來在各類任務上取得相對更好的state-of-the-art的效果,MobileNet V1在更小的模型,面向mobile devices的網絡結構設計上,開了先河,開辟思路。?
論文名稱:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
- MobileNet V2
MobileNet V2主要設計了inverted residual block和linear bottleneck結構,來進一步降低了FLOPs和parameters。其中inverted residual block先采用11?pointwise convolution將輸入擴張到更深的中間層,expansion factor = t (文章設置為6),然后采用33 depthwise convolution,最后在用一個linear的11 pointwise convolution將較深的中間層壓縮到原始的輸入。
基于這個模塊構建的架構,能夠進一步在內存有限的手機上實現目標分類,目標檢測等功能。
論文名稱:MobileNetV2: Inverted Residuals and Linear Bottlenecks
- MobileNet V3
MobileNet V3,首先采用platform-aware NAS,進行block-wise的搜索。建立accuracy ACC(m)和 latency LAT(m)的多目標函數,采用強化學習搜索出一個global network 架構。其實就是搜索出幾個block,以及每個block的固定模塊。這和MnasNet類似。(作者也說了,就是按照MnasNet來進行搜索的,然后再微調)。其中,一個大的stage,也叫做block,里面有2,3,4~~或者更多層,每一層的操作都是固定的,采用inverted residual bottleneck block,就是圖4所示的模型?。然后,采用NetAdapt 進行互補搜索,這一步是layer-wise操作。在NAS搜索的大框架下面,對每一個block里面的每一層的output channels, expansion layer channels進行具體最優的通道數量搜索。其中,對MobileNet V2的基礎模塊進行了改進,在inverted residual 模塊中加入了Squeeze-and-Excite模塊,這是一個輕量級注意力機制的模塊,能夠增強卷積模塊的特征提取性能。然后,對激活函數進行了改造。前兩個模型,MobileNet V1和MobileNet V2,沒有對激活函數進行改造,直接采用的ReLU。而V3,采用了硬件計算友好的h-swish非線性函數,這是對swish函數的modified。最后評測了在CPU和GPU上的運行時間。
主要模塊和結構的示意圖如下:
最終,MobileNet V3 large 和small兩個版本,在實際的Google Pixel 手機上的latency,模型的精度,以及參數量上,都取得了很好的效果。圖6展示了MobileNet 系列的對比:模型的整體精度提升較大,latency相對較低。
論文名稱:Searching for MobileNetV3
PS,題外話:
Google 官方博客對于MobileNet V3 在Google Pixel4 手機上的性能實測,以及實現的細節。對MobileNet系列,包括為何要設計on-device efficient neural networks進行了大致的描述,以及MobileNet系列,是如何在Google Pixel4手機中進行使用,對照相,手機解鎖,都做了描述,值得細看。而 將模型進行精簡,設計成為MobileNet Edge TPU適配的模型時,此時性能,效率又有不同的提高。講述了Hardware-aware的模型定制化的重要性。每個CPU或者Edge device有他的特殊性,如果要 得到最佳性能,需要從新定制,設計。總體思想就是這樣的。還行看細節,看一下Google的原文。??
地址:Introducing the Next Generation of On-Device Vision Models: MobileNetV3 and MobileNetEdgeTPU
-
2. MnasNet
MnasNet,block-wise,也可以稱為stage-wise搜索。是采用基于強化學習的Platform-Aware mobile-size NAS:automated mobile neural architecture search。直接將實際手機運行latency與accuracy指標,來作為reward,進行訓練。
移動端大小的NAS,最重要的是搜索空間的預定義。MnasNet提出了Factorized Hierarchical Search Space,將搜索空間層次化分解。思想是,將搜索空間定義為一個block,然后將搜索的block連接起來。每一個block內的operator是固定的,但是不同的block內部的layer,也可以叫operator,是不同的。這種方法,降低了搜索空間復雜度。每一個block需要搜索的內容如下:
- convolution operations:包括regular conv,depthwise conv,inverted residual and bottleneck block(MobileNet V2的模塊)。
- kernel size:33,55 。
- Squeeze-and-excitation ratio:0,0.25。0的時候,表示不采用SE模塊,不加注意力機制。0.25,就是標準的注意力機制。壓縮為0.25,在擴展回來。
- Skip operations: pooling, identity residual,no skip。這個不用多解釋。
- output filters size:也就是輸出channel數。
- Number of layers per blocks:blocks中的layer數量。
注意,block的數量是預先定義好的,也就是說基本的skeleton是定義好的。文章設定為7。因此,每個block的layer不同,但是同一個block的layer操作相同。整體想法如圖8所示。
這種方法比簡單的cell-based的效果較好,cell-based,只搜索一個cell,然后在重復的堆疊起來,整個網絡的每一個cell相同。網絡的每一層或者每一個block沒有多樣性。搜索結果如圖9所示。
?從圖9可以看出,MnasNet的每一個block都不盡相同,有separable conv,有MBConv6,MBConv3等。而且,每一個block的layer不同,有1,2,3,4,2,3,1等不同層。MobileNet V3就是在此基礎上,在對每一個block中的每一層進行單獨優化。
論文名稱:MnasNet: Platform-Aware Neural Architecture Search for Mobile
-
3. EfficientNet and others.
EfficientNet,除了上面一系列的優化的模型,還有EfficientNet,采用MobileNet V2的基礎block,來進行搜索。這里不再考慮實際的latency,而是將FLOPs和memory作為目標函數。搜索出了EfficientNet-B0,然后進行混合模型尺度調整。主要探究的是不同尺度對模型性能的影響。最后發現,通過調節depth,width,resolution來共同搜索出滿足不同條件的模型。
最后也是取得了promising的結果。所提出的方法,探究了不只是block的單獨搜索,cell的堆疊,也包括了對得到的模型,進行三個尺度方面的調整,還能進一步提升性能。
?從圖12可以看出來,混合尺度的調節比三個尺度的單一調節性能更好。
論文名稱:EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
EfficientNet在Edge Computing上的應用。Google也說明了一個事實,EfficientNet是在CPU上搜索的,他的那些building block針對CPU是非常高效的,但對于真正用到特殊定制的硬件加速器上時,需要對一些基礎操作做更改。這篇文章描述了EfficientNet在TPU上實現的性能:EfficientNet-EdgeTPU: Creating Accelerator-Optimized Neural Networks with AutoML。
還有很大一部分work,包括ShuffleNet V1,V2,Proxyless Net,CondenseNet等,一系列針對resource-constrained platform的優化。
插入一個高效實現的例子:最近發現的一篇關于在FPGA上實現MobileNet V1的文章,能夠使得幀率在3000 FPS,這個是最近我看到的一個很快的實現速度了,能夠把整個網絡在FPGA的片上存儲RAM資源實現,不借助off-chip memory。整個網絡采用了多精度實現,而且是軟硬件結合的方式。整個實現流程如圖所示。
整個卷積的計算采用的寄存器實現,能夠高效的進行操作。對深度學習FPGA實現,神經網絡加速器,高效硬件實現感興趣的朋友,可以跳轉到我的下一篇文章,看一下整個實現過程的解讀和我的理解。?基于FPGA實現的MobileNet V1,FPGA深度學習加速器
論文名稱:Automatic Generation of Multi-precision Multi-arithmetic CNN Accelerators for FPGAs
地址:https://arxiv.org/pdf/1910.10075v1.pdf
未完待續!!!
感覺將manually的efficient網絡設計和基于NAS的efficient網絡搜索,放在一起,內容會太多了,篇幅太長了,也許看起來會讓然很疲憊。我想一想分兩篇講還是就在這一個文章總結完。
11-30:
最近的兩篇文章,通過在MobileNet V2的MBBlock基礎上,進行改進,一個是引入idle的變換,設計了Idle Block。將一個MBBlock劃分為兩部分,一個類似于MBBlock的1x1 pointwise 卷積,接一個3x3 depthwise 卷積,然后在接一個1x1 pointwise卷積。另外一部分直不變換,直接連接到輸出,concat一起為輸出。如下圖所示。提出的網絡是hybrid composition network。
?論文名稱:Hybrid Composition with IdleBlock: More Efficient Networks for Image Recognition
地址:https://arxiv.org/abs/1911.08609
第二篇是MixNet,將MBBlock中間的depthwise 卷積的固定的3x3卷積核,做擴展,一部分用3x3,一部分用5x5, 7x7, 。。。這種類似的方案。一個input 也被partition為多個group,分別做不同kernel的卷積。如下圖所示。
?這篇文章還有很多描述,關于Group size,kernel size per-group, channel size per-group,這里面的思想,很好在現有的組卷積,depthwise 卷積中,直接寫一句兩句代碼就搞定,還是很方便實現的,不用很多技巧和技術。Google官方還給出了用TensorFlow寫這個Mixed Convolution的代碼:
論文名稱:MixNet: Mixed Depthwise Convolutional Kernels
地址:https://arxiv.org/abs/1907.09595
**如果有用,記得點贊👍加收藏哦。!!!!**
總結
以上是生活随笔為你收集整理的面向Mobile device的CNN模型手工设计与NAS分析总结,MobileNet V1,V2,V3,Efficient,MNasNet以及Efficient network design的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求一个向日葵个性签名!
- 下一篇: 基于FPGA实现的MobileNet V