論文閱記 MobileNet V1


  論文題目:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

  文獻地址:https://arxiv.org/abs/1704.04861?context=cs

  (非官方)源碼地址:

  (1)Pytorch實現:https://github.com/rwightman/pytorch-image-models

  (2)Caffe實現:https://github.com/shicai/MobileNet-Caffe

  (3)TensorFlow實現MobileNet - YOLOV3: https://github.com/GuodongQi/yolo3_tensorflow

 

  MobileNet V1中提到的輕量級深度分離卷積思想在MobileNet V2,MnasNet,MobileNet V3,以及單目標追蹤算法SiamMask中均得以運用。雖然單獨使用MobileNet V1的場景不多,但是了解其思想,對於后續論文的理解有鋪墊性的作用。

移動端神經網絡現狀

  MobileNet的提出是針對移動或者嵌入式的應用場景。大而復雜的模型是難以在嵌入式、FPGA等移動端使用的。視覺模型在移動端使用有兩大難題

  1. 模型過於龐大,容易造成硬件內存不足的問題;
  2. 大多場景要求低延遲、響應速度快。【自動駕駛的行人檢測如果響應速度慢,則會發生比較可怕的事情】

  因此,研究小而精確的模型對於現實的應用場景十分重要。

  目前的兩大解決策略

  1. 對訓練好的復雜模型進行壓縮得到小模型;    ☆☆☆☆☆
  2. 直接對小模型進行訓練;

  保證模型的性能,降低模型的大小,提升模型的速度。

  MobileNet屬於后者,其使用了Depth wise separable convolutions。降低了卷積運算的參數量和運算量

  其可以用於目標檢測,提出的核心思想是輕量級的卷積運算。在實際應用中,通常會有人選擇其升級版MobileNet V2 作為一個快速目標識別的網絡,用於獲取patch給追蹤算法。

核心思想

  MobileNet最核心的層就是深度可分離卷積的設計【depth wise separable  convolutions

  深度可分離卷積是普通卷積分離為深度卷積1*1卷積

  深度卷積的意思就是針對每個輸入通道采用不同的卷積核一個卷積核對應一個輸入通道,也就是說,雖然有M個卷積核,但總共只有標准卷積的1個卷積核的大小。【一個卷積核是單通道的,M個卷積核相當於對輸入的每一個通道,每一個通道對應一個1通道的卷積核。M個卷積核也就是一個與輸入feature map 相同通道數量的卷積核。】其實可以理解,為什么要將標准卷積層換分為兩個部分:

  ☐  depth wise 的卷積是每一個通道對應一個一層的卷積核,每個通道都對應一個卷積核,這樣經過卷積運算后通道數量不會發生變化所以需要1*1卷積進行通道數量的調整

  【深度卷積:depthwise convolution;        1*1卷積: pointwise convolution

  • 下圖(a)中是標准的卷積操作,輸入feature map的通道數量為M,則N個卷積核的通道數量均為M;
  • 圖(b)中是深度可分離卷積操作,輸入feature map的通道數量為M,每一個通道對應一個卷積核,這樣M個卷積核的參數量相當於只有標准卷積操作一個卷積核;
  • 圖(c)中是N個通道數量M的1*1卷積操作,由於圖(b)中的輸出結果的通道數量不會發生變化,也為M,因此,需要1*1卷積進行通道數量的調整。

  情形:對於輸入feature map  F[維度為Df * Df * M] ,輸出的feature map G[維度為Dg * Dg * N]

 

  • 標准卷積的卷積核的參數量 Dk * Dk * M * N [Dk表示卷積核的尺寸]。

  如果步長為1,padding也為1,則其對應的計算:

  將會對應計算量為:

  • 深度可分離卷積

  深度卷積計算形式:

  運算量 (從結構圖中也可以看出,運算量少N-1個卷積核的操作):

  深度分離卷積運算量:

  一般情況下 N 比較大,那么如果采用3x3卷積核,depthwise separable convolution相較於標准卷積可以降低大約9倍的計算量

網絡結構

  在實際應用中會添加BN和ReLU

  

  The full architecture of MobileNet V1 consists of a regular 3×3 convolution as the very first layer, followed by 13 times the above building block.

  整體的網絡結構中,包含一個常規的3*3卷積作為第一層,之后包含了13個上述的Depthwise Separable Convolutional block。 Depthwise Separable Convolutional block中沒有池化層,而是使用步長為2的DW操作進行下采樣PW操作會2倍放大通道數量。如果輸入圖像的尺寸為 224×224×3,最終網絡的輸出則為7×7×1024。激活函數使用ReLU6。

y = min(max(0, x), 6)

  最后呢,還會再加上一個平均池化操作全連接層全連接層使用softmax激活函數

總結

  MobileNet V1版本結構其實非常簡單,從網絡結構上看,其結構是一個非常復古的直筒結構,類似於VGG。這種結構性價比不高,后續一系列的ResNet、DenseNet等結構已經證明通過復用圖像特征,使用concat/eltwise+等操作進行特征融合,能極大提升網絡的性價比。

  MobileNet V1版本中,Depthwise Conv確實是大大減少了參數量,也降低了計算量。而且N×N 的DW + 1×1的PW的結構在性能上也能接近N × N 的Conv。但是在實際使用中會發現,Depthwise (DW)部分的Kernel容易訓練廢掉: 即訓練之后發現depthwise訓練出來的kernel有不少是空的。depthwise每個kernel dim 相對於vanilla conv要小得多過小的kernel_dim加上ReLU的激活影響下, 使得神經元輸出很容易變為0, 所以就學廢了。 ReLU對於0的輸出的梯度為0, 所以一旦陷入了0輸出, 就沒法恢復了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM