mobilenet v1和 mobilenet之間的區別,V2是在V1上做了什麼改進?

mobilenet v1 主要是提出一種深度可分離卷積,將原來的三維度卷積  分成二維度加上  厚度上的單獨卷積,從而可以實現參數上的極大減少。【主要帶來計算量和參數量的大量減少。 計算量減少9倍左右的參數量。

 

該網絡架構核心的特點是分成提出了兩種卷積形式Depthwise convolution和pointwise convolution。

  【1】Depthwise convolution對每個輸入通道使用不同的卷積核,每個通道對應一個卷積核,其應用於depth級別。

  【2】pointwise convolution從含義上就是普通的卷積,只不過其維度是1*1形狀大小的。

                                                     

                                                                                

      在進行使用時,首先是使用depthwise convolution對不同的通道進行分別的卷積【這樣挺好的,就是每個通道使用一個二維矩陣】,然後再使用pointwise將depthwise卷積的結果合在一起。【主要的參數吧,可以很多個1*1*厚度   *  個數的卷積,實現個數級的升降維度】

                                                                                 

       換個角度解釋,比如原來需要  8個3*3*3的卷積核【比如原來特徵圖厚度爲3,現在需要生成厚度爲8的特徵圖】,那麼   如果用深度可分離卷積的話,就可以,首先是Depthwise convolution需要參數量爲3*3*3個【對應於三個厚度通道,每個通道都需要一個3*3的矩陣】,而再加上pointwise convolution就是 1*1*3*8大小的【使用起到升降維度的1*1矩陣對 維度進行調整,同時使用了8個矩陣,這個是可以自己調節的】,發現沒,減少了非常多。

  接下來我們分析從計算量和參數量角度  ,Mobilenet中的深度可分離卷積相對於普通卷積所能帶來的減少量吧。

   【1】在參數量方面,假定Dk是卷積核的長和寬、  M是厚度、N是卷積核的數量,    可以發現左爲原卷積的參數量,   右爲進行深度可分離卷積拆解後的參數量,

                                                   

 帶來的參數減少量爲:Dk*Dk*M*(N-1)   -   M*N

 【2】在計算量方面,標準卷積是左側的公式,其中可以明確吧,是對所有的參數都乘上原特徵圖的  寬度和長度,每個參數都做完全的計算。

                                        

     而深度可分離卷積比舒服的多,相當於第一部分 少乘 卷積核數量N這一維度, 之後補上純粹的1*1*M*N卷積核上的參數乘過去。

                                 

   經過這樣的處理計算後,參數量和計算量均降爲原來的  九分之一   到八分之一。【論文中有說明,參數和計算量下降到原來的九分之一左右,這個也跟具體的使用有關,而準確率只下降極小的1%】

                                                                                                   

   如上是最爲核心的深度可分離卷積的部分, 其具體實現時對應的是如下的形式上的替換。可以看到在這裏是  將之前  3*3卷積的直接形式,分爲  深度卷積  -> BN -> Relu6->1*1逐點卷積 ->BN ->Relu這  6個部分,   使用 深度卷積+逐點卷積  來提換原來的  3*3普通卷積,  此外可以發現這裏是將 Relu 激活函數換成了Relu6.

                                                      

    激活函數替換後的對比如下,Relu6的公式如右【其特點就是將 輸入值大於6的部分,直接設置值爲6, 作者認爲,使用relu6可以在低精度計算中具有較好的  魯棒性】。

                                                       

  從整體來看,其架構對應是如下的形式:

                                                                               

 

————————————————————————————————————————————————————                    

 V2是在V1上做了什麼改進? 

答:V2是在V1基礎上主要加入了對殘差連接的利用。

 其相對於V1版本有三個比較大的創新點。

   【1】利用Inverted residuals策略,在V1版本中沒有很好地利用 Residual Connection,而這種殘差在大多情況下都是比較好的,所以在 V2中把該模塊加了過去。

                                                                 

    【2】使用Linear bottleneck策略把最後一個的 激活層換成線性形式,   也就是把Relu6層變成了  Linear形式。    

           原因是我們發現深度卷積部分的卷積核在  訓練時特別容易訓廢掉【也就是發現深度卷積得到的卷積核很多是空的,我覺得這個空,意思應該是核上值爲0】, 作者認爲是Relu激活函數導致的問題。

                                                                       

         作者也是有做分析的,分析把relu結果變換embedding到高維空間上進行觀察,發現在低維度relu是很容易造成信息的丟失,  而在高維度上做relu時,信息丟失則比較少。 因此這種丟失就解釋了 爲什麼深度卷積的卷積核很多爲空,所以因此  Relu會造成信息耗損,  就將relu替換成線性激活函數來使用。 進行替換時並不是每一層都替換,而只是對最後一層進行的替換。

                    

     【3】使用了Expansion layer策略,這個方式使用的  原因  是爲了   讓  深度卷積操作可以在更高的通道的上進行【因爲原始 深度卷積是有多大卷多大】,這樣的話可以在更高維度上進行處理,能有更好的效果,  所以   我們在 深度卷積前 先加上  逐點卷積,按照  PW逐點擴張卷積 ->  DW深度卷積操作 ->PW 壓縮卷積。     使用這樣的方式  三步替代之前的兩步操作

                    

    【總結】總體下來,就是以上三點,使得  其結構可以表達成如下的形式【先升維、再卷積、再降維】, 也可以對應右側的對比觀察。

                                       

 

 

參考:

https://blog.csdn.net/c20081052/article/details/80703896

https://blog.csdn.net/kangdi7547/article/details/81431572

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章