MixNet: Mixed Depthwise Convolutional Kernels?

arxiv.org

tensorflow/tpu?

github.com
圖標

本文是谷歌大牛Quoc V. Le的在AutoML領域的又一力作。下圖給出了它同其他NAS所搜索網路在性能、FLOPs方面的對比,從中可以看出:MixNet取得完勝

深度分離卷積

在當前輕量型ConvNets得到廣泛應用,但其卷積核尺寸卻很少得到關注,甚至被忽視。作者系統的分析了卷積核尺寸的影響,同時發現,組合多尺寸卷積核可以取得更好的精度與效率。基於此,作者提出一種新的混合深度卷積(Mixed Depthwise Convolution, MDConv),它很自然的將多個尺寸卷積核混疊到同一個卷積中。通過簡單的替換原始深度分離卷積,它可以幫助MobileNetImageNet分類與COCO目標檢測任務中取得精度與效率的提升。 通過集成MDConvAutoML框架中,作者進一步研發一種新的模型:MixNets。它優於已有輕量型網路,包含MobileNetV2(+4.2%), ShuffleNetV2(+3.5%), MnasNet(+1.3%), ProxylessNas(+2.2%), FBNet(+2.0%)。特別的,MixNet-L取得了78.9%的top-1分類精度(ImageNet),同時FLOPs小於600M

Background

? 深度分離卷積是設計輕量型網路的重要組件之一,但是其卷積核的重要性卻往往被忽視,而是簡單的採用$3 imes 3$大小的核。近期研究表明:更大的核,如$5 imes 5, 7 imes7$可以進一步提升模型的精度與效率。

? 作者對該問題進行了研究與分析:更大的核可以取得更高的精度?作者基於MobileNetV1與MobileNetV2進行卷積核尺寸對於性能的研究與分析。從下圖可以看出:當卷積核達到$9 imes9$時模型精度達到最大,繼續擴大卷積核會導致精度的下降。

? 這同時也意味著單尺度核尺寸的侷限性,模型需要大尺寸核捕獲高解析度模式,同時需要小尺寸核捕獲低解析度模式以及獲得更高的精度和效率。

Method

? 基於上述分析,作者提出一種混合深度分離卷積(MDConv),它將不同尺寸卷積核混疊到同一個卷積OP單元中,故而它可以輕易的捕獲不同解析度的特徵模式。下圖給出了標準深度分離卷積與本文所提MDConv示意圖。

? 作者通過實驗證實:簡單的將其替換到MobileNetV1MobileNetV2中即可取得精度與效率的提升(ImageNet分類任務與COCO目標檢測任務)。

? 作者所提供的tensorflow實現代碼如下。

def mdconv(x, filters, **args):
G = len(filters)
y = []
for xi, fi in zip(tf.split(x, G, axis=-1), filters):
y.append(tf.nn.depthwise_conv2d(xi, fi, **args))
return tf.concat(y, axis=-1)

Experiments

? 作者對比MDConv替換到MobileNetV1MobileNetV2前後的精度對比,效果圖如下。從中可以看出:相比標準深度分離卷積,MDConv更輕量、更快同時具有更高的精度

? 同時,作者還對比了不同組劃分方式、空洞卷積核的影響性。實驗對比效果圖如下。從中可以看出:指數形式組劃分在MobileNetV1中比均等組劃分稍好,但在MobileNetV2中無明顯優勢。一個可能的原因:指數形式組劃分導致大核通道數過少難以捕獲高解析度特徵模式。空洞卷積可以提升小核網路的精度,但對於大核網路卻導致了精度下降。作者認為:對於大核而言,空洞卷積會跳過大量的局部信息,進而雜訊精度損失。

? 最後,作者將MDConv集成到AutoML框架中進行輕量型網路搜索,按照FLOPs劃分,作者共涉及了三個網路:MixNet-S, MixNet-M, MixNet-L。他們與其他輕量型網路的性能對比如下所示。從中可以看出:MixNet取得了完勝。

? MixNet-S, MixNet-M兩個網路的架構圖如下所示。更多關於MixNet的信息請參考原文,這裡不再詳述。

Conclusion

? 作者重新回顧了深度分離卷積中的核尺寸影響,證實了:傳統深度分離卷積網路(如MobileNetV1,MobileNetV2)受限於卷幾何尺寸。基於此,作者提出一種混疊深度卷積(MDConv),它可以混疊多個尺寸卷積核到同一卷積中,進而取得精度的提升。同時,作者將其應用AutoML框架中,搜索到一類新的架構MixNet。相比比已有輕量型網路,它具有更高的精度和效率(ImageNet分類與COCO目標檢測任務)。

後記

? 谷歌大牛做的工作確實很好,效果也很好。但是,美中不足的是,他們使用的均為Tensorflow框架,對於我等沒用過該框架的磚工極度不友好,同時因為各種庫的依賴問題,無法直接測試其網路。

? 鑒於此,本人在作者開源代碼基礎上,手動重寫Pytorch模型,同時將其預訓練模型導入到Pytorch模型中。轉換完成後,對作者所提供的測試樣例進行測試,結果如下,從上到下分別是MixNet-S、MixNet-M、MixNet-L的top-5結果輸出。

(註:因數據預處理方式與作者的存在差異,因為這裡輸出的概率值也與作者的存在出入。理論上,採用相同的數據預處理方式可以得到相同的概率結果輸出。Pytorch模型代碼與模型待整理後將開源,具體時間請等待)

? 最後,補上測試用例,可愛的大熊貓。

===

2019-07-27 補充

本來計劃週末兩天將轉換後Pytorch模型及預訓練參數整理後開源。

昨天晚上突然發現一位名為「Ross Wightman」小哥已經將其整理到其開源項目[pytorch-image-models](rwightman/pytorch-image-models)中。該項目代碼維護的還是比較優秀的,鑒於此,本人將不再開源,如需相關代碼請移步[pytorch-image-models](rwightman/pytorch-image-models)。本人已親自進行核對,我們所轉換模型的測試完全一致。希望該開源項目可以持續擴增,期待ing.


推薦閱讀:
相關文章