MobileNet 結構簡單微調的一點效能提升

weixin_33728268發表於2018-01-17

本文已經放到arxiv 上面了:
http://arxiv.org/abs/1802.03750
FD-MobileNet: Improved MobileNet with a Fast Downsampling Strategy


下面是論文的一個簡短的介紹:

實踐過程中發現了一個對MobileNet 微調即可完成提升的方法。不過只能在140 MFLOPS 以下的小網路會有提升,例如40MFLOPS 對原版有3%的提升,12-13MFLOPS 對原版有5%的提升;相對的,對大於這個數量級的會略微變差。相比ShuffleNet 相同的計算量下的網路會略差一些,但因為ShuffleNet 比較複雜,額外層的耗時有點多,工程優化難度大,因此我們這個小發現會有那麼一點點競爭力。

實驗結果

1785630-c89825d59a28f456.png

第一部分,MobilenetV1,藍色是我們復現的結果,黑色是論文中的結果。實驗是在pytorch 上面完成的,imagenet 2012資料集,120 epochs 標準訓練過程。我們的結果比MobileNet 論文中略高一點點。
第二部分和第三部分,分別是ShuffleNet 在兩個版本論文中的結果,v1 是指單欄排版的,v2 是指雙欄排版的。
第四部分,compact-Mobilenet,是我們微調結構的Mobilenet。

網路結構

1785630-4a44f8ae38f3d1ed.png

這樣的結構一目瞭然,最右邊Compact-MNet 在第一次步長為2 的卷積之後並沒有"逗留",而是徑直再進入一次步長為2 的卷積,如果將depthwise + pointwise 卷積看成是一個conv set 的話,那麼這個結構簡單說就是網路開始就進入連續三個步長為2的conv sets。後邊都是按MobileNet 照貓畫虎了,期間還嘗試了幾個類似的high-level層的微調結構,這個是最好的一個。
這個工作的思維過程說起來還是從ShuffleNet 中學習來的,簡單說就是將ShuffleNet 開始的頭部結構拿到了MobileNet 上進行了一次移植。
大概猜測的原因是,這樣可以迅速降低特徵圖解析度,降低對等結構計算量,同時保持計算量不變的結構的特徵描述能力比原版的就要好一些了。

實驗分析

由於該結構是對原版MobileNet 的一次微調,調整過程可以簡單到修改一下特徵圖通道陣列和步長陣列即可。所以只要跑過MobileNet 的程式碼,那麼得到compact MobileNet 的程式碼基本上不需要花時間,直接復現實驗即可。同理,這個結果的工程實現和工程優化難度,可以MobileNet 原版一模一樣,可能相比ShuffleNet 的複雜結構來講會有一定的優勢。
這塊的程式碼月底會和我們組另外一個工作一起放出。

更多

這個小的改動本質是一個網路結構trick,一開始連續下降兩次或者三次的做法,不光在ShuffleNet上是這樣的,在很多網路上也是類似的。


English Version:

FD-MobileNet: Improved MobileNet with a Fast Downsampling Strategy

Zhaoning Zhang, Qin Zheng, Xiaotao Chen
PDL, NUDT

Abstract

We present a compact MobileNets structure. It is a fine adjusted structure from the original MobileNets and performs better than the counterpart original MobileNets structure in tiny networks, such as 140 MFLOPs or less. Without the extra time consumed by the extra layers, compact MobileNets provides a competitive choice for the neural networks run on the hardwares of very limited computing power. Further, it is with very easy engineering realization and engineering optimization.

Experiment Results

1785630-c89825d59a28f456.png

First Part: Blue results are tested by our experiment with MobileNet V1. The experiment is done on pyTorch and imagenet 2012 dataset, with standard 120 epochs training.
Second and Third Part: results in two Shufflenet papers.
The last part is the results of our Compact Mobilenet.

Network Structure

1785630-4a44f8ae38f3d1ed.png

The rightmost Compact-MobileNet is different with original MobileNet at the head part, compact mnet is with three continuous stride=2 convolutional sets (depthwise + pointwise conv). This structure is inspired by the head structure of ShuffleNet. The other part of the network is also fine tuned and this structure is the best in practice.
The reason why this structure performs better in tiny networks is that, as we speculated, the feature map is down sampled at very low level, with the complexity reduced fiercely in the counterpart structure, and when the complexity is restored by width modifier, the representational power surpass the original one, in the tiny structures.

Engineering

The compact structure can be reproduced by only modifying python arrays of feature map filters and strides. So, it is with very easy engineering realization and engineering optimization, as the same as MobileNets. The code will be available soon with the other work of our team.

Google在2018年1月16號放出來的MobilenetV2 結構 https://arxiv.org/abs/1801.04381 ,我這邊已經復現過了,可以達到論文所說的精度,文中還有大量的細節放出,確實是一篇良心論文。引用知乎問題:如何評價mobilenet v2 ?

發展實在是太快了,因為我自己這個工作本就是抖機靈的,就在這裡放一篇非正式的算了。
^v^

相關文章