MobileNets的理解

注: 由於所寫內容是讀了文章之後,然後放在一邊,用自己理解的話來寫的,可能會與原paper不太一致,甚至可能理解的不對,敬請指正!

讀了paper的前面的介紹之後,一個整體的印象是這個network的設計複雜度和計算量都降了不少,而且performance也是不錯的,網絡的結構也比較的thin,可能這對於做模型壓縮是一個啓發。

然後個人覺得這個paper的主要想法是做了一個分解,把以前正常的卷積,分解成了兩步,並且在paper中作者還給出了具體計算量的公式。

大體的知識體系是這樣的。


圖a是standard cnn, 假設輸入是(D_f,D_f,M)那麼和一個(D_k,D_k,M)的kernel“卷積”之後,得到的是(D_f,D_f,1)的,那麼和N個kernel作卷積的話得到的就是(D_f, D_f, N )的。

而這篇文章中提出可以作兩部作,形象地理解的話,相當於把一個“大矩陣”分解了。

假設輸入仍是(D_f, D_f,M)可以把它看成M個(D_f, D_f, 1)的輸入粘在一塊兒的,那麼現在第一步對於這其中的每一個用(D_k,D_k,1)的去做卷積,得到的是(D_f, D_f,1)的,那麼用M個的話, 看圖b,得到的就是M個,再粘到一塊兒的話就是(D_f, D_f, M)大小的,

然後進行第二步,上面得到的(D_f, D_f, M)大小的,和一個(1,1,M)的做“卷積”的話,得到的是(D_f,D_f,1)大小的,

如果和N個去做總面積的話,就得到N個(D_f, D_f,1)這樣的,粘到一塊兒還是(D_f, D_f, N )形狀的,這和standard cnn出來的形狀是一致的,但是計算量和複雜度卻減少了很多。

具體的可以見下圖


標準的CNN如左圖,經過Conv->BN->Relu

而現在調成爲, DepthwiseConv(就是第一步)->BN->Relu->1*1 Conv(第二步)->BN->Relu

也就是在BN-Relu之前分別把兩步插入其中。

歡迎指正~

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