前言:
最近看到個FPGA與Deep Learning相結合的文章,正好看到arxiv上放了這篇文章出來,聽說這個SqueezNet有利於將CNN在FPGA上實現,於是簡單看了一下。不過作者也沒有給出實現結果,但既然是UC Berkeley 和 Stanford發的,說明大牛們都很關注這個事,搞不好哪天FPGA+DL真的就流行用起來了。
文章鏈接:http://arxiv.org/abs/1602.07360
文章概要:
這篇文章主要就是說,目前的DNN參數有點多了,如果我們有辦法把DNN的參數減少,將有利於:
1、實現更高效的分佈式訓練;
2、訓練出輕量級的模型;
3、在FPGA上實現;
那麼,怎樣在保證精度的前提下壓縮網絡呢?
作者採用了3個strategies:
1、將一部分3x3的filter替換成1x1的filter;
2、減少輸入的channels;
3、在整個網絡後期才進行下采樣,使得卷積層有比較大的activation maps;
作者設計了一種fire module的結構:
這種fire module的結構由兩個(實際上是3個)layers構成:squeeze和expand(expand其實是兩個layers)。squeeze和expand其實都是卷積層,只是kernel大小、stride、padding這些參數調過,主要就是用了小kernel。因爲Caffe是不支持同一個layer使用不同size的若干個(>1)kernels的,所以作者實際上是使用了兩個layers,一個用3x3 kernel,一個用1x1kernel,最後再把它們concat起來。
給一個完整的網絡看一下:
上圖中這些fire module的參數並不是一樣的。在前面幾層的fire module,裏面用到的kernel個數會少一些,但隨着網絡越來越深,後面的fire module用到的kernel個數會越來越多。我的理解是,網絡越深,特徵越抽象,就需要用越多的參數來學習它吧。
更多的調參細節就不多說了,有興趣可以看看這篇paper原文。
作者在ImageNet 2012上給出了測試結果:
與AlexNet對比,參數減少了50倍,模型也只有4.8M。目前一些比較貴的FPGA,SRAM有8M那麼大,是有機會把這個SqueezeNet放到上面跑跑看的。
我的看法:
1、跟PC機相比,因爲FPGA的資源真的少得可憐,能夠在保證精度的前提下減少網絡參數和壓縮模型大小,是很有幫助的;
2、但是,僅僅AlexNet這樣的精度,不能滿足很多場合的需求,作者沒有拿SqueezeNet來跟VGG這些大網絡來比比,也不知道SqueezeNet做深了之後,它的performance如何。而且也沒在其它任務上做測試(如detection,Reid之類的),有點懷疑它的泛化能力,希望後面還會放更多的結果出來看;
3、實現一個SqueezeNet,調參感覺是個大坑。