輕量化網(wǎng)路之MobileNet V1

1迁匠、深度可分離卷積

標(biāo)準(zhǔn)卷積在卷積時(shí)剩瓶,同時(shí)考慮了圖像的區(qū)域與通道信息,那么為什么不能分開(kāi)考慮區(qū)域與通道呢城丧?

基于此想法延曙,誕生了深度可分離卷積(Depthwise Separable Convolution),將卷積的過(guò)程分為逐通道卷積逐點(diǎn)1×1卷積兩步亡哄。

1.1 逐通道卷積

  • 卷積核參數(shù)量少枝缔。卷積核參數(shù)量為Ci×3×3,遠(yuǎn)少于標(biāo)準(zhǔn)卷積Ci×3×3×Co的數(shù)量蚊惯;

  • 通道之間相互獨(dú)立魂仍,沒(méi)有各通道間的特征融合拐辽,這也是逐通道卷積的核心思想,輸出特征的每一個(gè)點(diǎn)只對(duì)應(yīng)輸入特征一個(gè)通道上的3×3大小的特征擦酌,而不是標(biāo)準(zhǔn)卷積中Ci×3×3大小菠劝;

  • 由于只在通道間進(jìn)行卷積赊舶,導(dǎo)致輸入與輸出特征圖的通道數(shù)相同,無(wú)法改變通道數(shù)赶诊。

1.2 1x1卷積

由于逐通道卷積通道間缺少特征的融合笼平,并且通道數(shù)無(wú)法改變,因此后續(xù)還需要繼續(xù)連接一個(gè)逐點(diǎn)的1×1的卷積舔痪,有兩個(gè)作用:

  • 一方面可以融合不同通道間的特征寓调;
  • 同時(shí)也可以改變特征圖的通道數(shù)。

1.3 參數(shù)量計(jì)算

圖a的標(biāo)準(zhǔn)卷積锄码,使用一個(gè)和輸入數(shù)據(jù)通道數(shù)相同的卷積核執(zhí)行逐個(gè)通道卷積后求和獲得一個(gè)通道的輸出夺英,計(jì)算量為M \times D_k \times D_k,其中M代表輸入的通道數(shù)滋捶,D_k為卷積核的寬和高痛悯,一個(gè)卷積核處理輸入數(shù)據(jù)時(shí)的計(jì)算量為:D_k \times D_k \times M \times D_F \times D_F ,其中D_F為輸入的寬和高重窟,如果在某一個(gè)卷積層使用N個(gè)卷積核载萌,那么這一卷積層的計(jì)算量為:D_k \times D_k \times M \times D_F \times D_F \times N

圖b巡扇、c是深度可分離卷積扭仁,首先使用一組通道數(shù)為1的卷積核,每次只處理一個(gè)輸入通道厅翔,并且這一組卷積核的個(gè)數(shù)是和輸入通道數(shù)相同的乖坠。執(zhí)行完上面的深度卷積后,再使用通道數(shù)為輸入數(shù)據(jù)通道數(shù)的大小為1x1的卷積來(lái)組合之前輸出的特征圖知给,將最終輸出通道數(shù)變?yōu)橐粋€(gè)指定的數(shù)量瓤帚。

  • 理論計(jì)算

一組和輸入通道數(shù)相同的2D卷積核(通道數(shù)為1,即深度卷積或者說(shuō)分組卷積)的運(yùn)算量為: D_k \times D_k \times M \times D_F \times D_F涩赢;

而3D(標(biāo)準(zhǔn)卷積)的卷積核1x1的運(yùn)算量為:1 \times 1 \times M \times D_F \times D_F \times N 戈次,因此這種組合方式的總計(jì)算量為:

D_k \times D_k \times M \times D_F \times D_F + 1 \times 1 \times M \times D_F \times D_F \times N;

因此,深度可分離卷積相比于標(biāo)準(zhǔn)卷積計(jì)算量的比例為:

\frac{D_k \times D_k \times M \times D_F \times D_F + 1 \times 1 \times M \times D_F \times D_F \times N}{D_k \times D_k \times M \times D_F \times D_F \times N} = \frac{1}{N} + \frac{1}{D_k^{2}}

  • 舉例計(jì)算

假設(shè)輸入特征圖尺寸為112x112筒扒,輸入通道數(shù)64怯邪,卷積核大小3x3,卷積核個(gè)數(shù)128花墩。

標(biāo)準(zhǔn)卷積計(jì)算:3 * 3 * 64 * 112 * 112 * 128 = 924844032

深度可分離卷積計(jì)算:3 * 3 * 64 * 112 * 112 + 1 * 1 * 64 * 112 * 112 * 128 = 109985792

二者的比例為:\frac{109985792}{924844032} = 0.1189

可以看到將一個(gè)標(biāo)準(zhǔn)卷積換成深度可分離卷積之后模型的計(jì)算量減少了9倍悬秉。

2澄步、網(wǎng)絡(luò)結(jié)構(gòu)

特點(diǎn):

  • 除了第一層為標(biāo)準(zhǔn)卷積外都采用深度可分離卷積;
  • 最后一層全連接沒(méi)有激活函數(shù)直接送入到 Softmax 層和泌,其他的標(biāo)準(zhǔn)卷積和深度可分離卷積都接入BN和ReLU村缸;
  • 在深度可分離卷積的兩層后面都要引入 BN 和 ReLU
  • 第一層標(biāo)準(zhǔn)卷積和深度可分離卷積通過(guò)stride=2的卷積實(shí)現(xiàn)下采樣武氓;
  • 最后一個(gè)平均池化層將空間分辨率減小為1梯皿;
  • 如果將Depthwise卷積層和Pointwise卷積層算成不同層的話(huà),MobileNet V1一共有28層县恕。

MobileNet網(wǎng)絡(luò)的有效性:

  • 僅僅通過(guò)上文中減少網(wǎng)絡(luò)乘加操作對(duì)于網(wǎng)絡(luò)加速是不夠的东羹,同時(shí)要確保這些乘加操作能夠高效實(shí)現(xiàn)也很重要。例如忠烛,非結(jié)構(gòu)化的稀疏矩陣操作通常不比密集矩陣運(yùn)算快属提,除非是非常稀疏的矩陣。

  • MobileNet V1的模型結(jié)構(gòu)幾乎將全部的計(jì)算復(fù)雜度放到了1x1卷積中美尸。


可以看到冤议,95% 的計(jì)算時(shí)間都花費(fèi)在 1×1 卷積上,75% 的參數(shù)量也都集中在 1×1 卷積層火惊,其余的參數(shù)則主要來(lái)自全連接層求类。

  • 1 x 1卷積 、3 x 3卷積屹耐、5 x 5卷積都可以通過(guò)高度優(yōu)化的通用矩陣乘法(GEMM)來(lái)實(shí)現(xiàn)尸疆,但是3x3卷積和5x5卷積等需要使用im2col在內(nèi)存中對(duì)數(shù)據(jù)進(jìn)行重排,以將其映射到GEMM可以使用的方式惶岭。而1x1卷積不需要在內(nèi)存中重排就可以直接被GEMM(最優(yōu)化的數(shù)值線(xiàn)性代數(shù)算法之一)實(shí)現(xiàn)寿弱。MobileNet絕大部分使用1x1卷積,因此可以充分利用GEMM算法按灶,來(lái)實(shí)現(xiàn)高效計(jì)算症革,加速網(wǎng)絡(luò)。

3鸯旁、寬度乘子:更瘦的模型

盡管基本的 MobileNet 結(jié)構(gòu)已經(jīng)非常小噪矛、時(shí)延很低,但具體的使用場(chǎng)景可能需要模型更小更快铺罢。為了構(gòu)建這些計(jì)算量更少更小的模型艇挨,作者引入了一個(gè)簡(jiǎn)單的參數(shù)\alpha,稱(chēng)之為寬度乘子(width multiplier)韭赘,它的作用是統(tǒng)一讓網(wǎng)絡(luò)中的每一層都更瘦缩滨。

針對(duì)某一層網(wǎng)絡(luò)和\alpha,輸入通道數(shù)從M變成\alpha M,輸出通道數(shù)從N變成\alpha N脉漏,這樣這一層的計(jì)算代價(jià)就變?yōu)椋?br> D_k \times D_k \times \alpha M \times D_F \times D_F + \alpha M \times D_F \times D_F \times \alpha N

寬度乘子可以以大致\alpha ^{2}的速率減少計(jì)算代價(jià)和參數(shù)量苞冯,可以用來(lái)設(shè)計(jì)一個(gè)更小的網(wǎng)絡(luò)來(lái)平衡準(zhǔn)確率、時(shí)延和模型大小這三者侧巨。

4舅锄、分辨率乘子:減弱表示能力

另一個(gè)減少計(jì)算代價(jià)的超參數(shù)是分辨率乘子(resolution multiplier)\rho
將它應(yīng)用在輸入圖像上,然后每一層的表示能力都相應(yīng)減少刃泡。實(shí)際中巧娱,作者是通過(guò)設(shè)置輸入分辨率來(lái)確定這個(gè)參數(shù)的。

寬度乘子和分辨率乘子結(jié)合在一起烘贴,某一層網(wǎng)絡(luò)的計(jì)算代價(jià)就變?yōu)榱耍?br> D_k \times D_k \times \alpha M \times \rho D_F \times \rho D_F + \alpha M \times \rho D_F \times \rho D_F \times \alpha N

分辨率乘子可以以\rho^{2}的速率減少計(jì)算代價(jià)。下面的例子可以很好地展示深度可分離卷積以及兩個(gè)超參數(shù)是怎么減少網(wǎng)絡(luò)的計(jì)算代價(jià)和參數(shù)量的撮胧。

5桨踪、實(shí)驗(yàn)結(jié)果

采用深度卷積的網(wǎng)絡(luò)相對(duì)于標(biāo)準(zhǔn)卷積節(jié)省了巨大的計(jì)算代價(jià)和參數(shù)量,但準(zhǔn)確率卻僅僅降低了 1%芹啥。

相較于移除表一中特征圖大小為 14×14×512 的五層網(wǎng)絡(luò)锻离,寬度因子\alpha=0.75的更瘦網(wǎng)絡(luò)比更淺的網(wǎng)絡(luò)準(zhǔn)確率高出 3 個(gè)百分點(diǎn)。

隨著寬度因子的降低墓怀,模型的準(zhǔn)確率平滑降低汽纠,直到值太小 \alpha=0.25時(shí)才有顯著下降。


隨著分辨率因子的降低傀履,模型的準(zhǔn)確率始終保持平滑降低虱朵。

相較于 GoogleNet 和 VGG,MobileNet 的準(zhǔn)確率接近于 VGG 钓账,超越了 GoogleNet碴犬,但模型大小的計(jì)算代價(jià)都小了很多。

可以使用PyTorch來(lái)搭建一個(gè)MobileNet V1網(wǎng)絡(luò)梆暮。

6服协、代碼

class MobileNetV1(nn.Module):
    def __init__(self):
        super(MobileNet, self).__init__()

        def conv_bn(dim_in, dim_out, stride):
            return nn.Sequential(
                nn.Conv2d(dim_in, dim_out, 3, stride, 1, bias=False),
                nn.BatchNorm2d(dim_out),
                nn.ReLU(inplace=True)
            )

        def conv_dw(dim_in, dim_out, stride):
            return nn.Sequential(
                nn.Conv2d(dim_in, dim_in, 3, stride, 1,
                             groups= dim_in, bias=False),
                nn.BatchNorm2d(dim_in),
                nn.ReLU(inplace=True),
                nn.Conv2d(dim_in, dim_out, 1, 1, 0, bias=False),
                nn.BatchNorm2d(dim_out),
                nn.ReLU(inplace=True),
            )
        self.model = nn.Sequential(
            conv_bn(  3,  32, 2),
            conv_dw( 32,  64, 1),
            conv_dw( 64, 128, 2),
            conv_dw(128, 128, 1),
            conv_dw(128, 256, 2),
            conv_dw(256, 256, 1),
            conv_dw(256, 512, 2),
            conv_dw(512, 512, 1),
            conv_dw(512, 512, 1),
            conv_dw(512, 512, 1),
            conv_dw(512, 512, 1),
            conv_dw(512, 512, 1),
            conv_dw(512, 1024, 2),
            conv_dw(1024, 1024, 1),
            nn.AvgPool2d(7),
        )
        self.fc = nn.Linear(1024, 1000)

    def forward(self, x):
        x = self.model(x)
        x = x.view(-1, 1024)
        x = self.fc(x)
        return x

總體上,MobileNet v1利用深度可分離的結(jié)構(gòu)犧牲了較小的精度啦粹,帶來(lái)了計(jì)算量與網(wǎng)絡(luò)層參數(shù)的大幅降低偿荷,從而也減小了模型的大小,方便應(yīng)用于移動(dòng)端唠椭。

但MobileNet v1也有其自身結(jié)構(gòu)帶來(lái)的缺陷跳纳,主要有以下兩點(diǎn):

  1. 模型結(jié)構(gòu)較為復(fù)古,采用了與VGGNet類(lèi)似的卷積簡(jiǎn)單堆疊泪蔫,沒(méi)有采用殘差棒旗、特征融合等先進(jìn)的結(jié)構(gòu)。

  2. 深度分解卷積中各通道相互獨(dú)立,卷積核維度較小铣揉,輸出特征中只有較少的輸入特征饶深,再加上ReLU激活函數(shù),使得輸出很容易變?yōu)?逛拱,難以恢復(fù)正常訓(xùn)練敌厘,因此在訓(xùn)練時(shí)部分卷積核容易被訓(xùn)練廢掉。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末朽合,一起剝皮案震驚了整個(gè)濱河市俱两,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌曹步,老刑警劉巖宪彩,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異讲婚,居然都是意外死亡尿孔,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)筹麸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)活合,“玉大人,你說(shuō)我怎么就攤上這事物赶“字福” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵酵紫,是天一觀(guān)的道長(zhǎng)告嘲。 經(jīng)常有香客問(wèn)我,道長(zhǎng)憨闰,這世上最難降的妖魔是什么状蜗? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮鹉动,結(jié)果婚禮上轧坎,老公的妹妹穿的比我還像新娘。我一直安慰自己泽示,他們只是感情好缸血,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著械筛,像睡著了一般捎泻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上埋哟,一...
    開(kāi)封第一講書(shū)人閱讀 51,215評(píng)論 1 299
  • 那天笆豁,我揣著相機(jī)與錄音郎汪,去河邊找鬼。 笑死闯狱,一個(gè)胖子當(dāng)著我的面吹牛煞赢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播哄孤,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼照筑,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了瘦陈?” 一聲冷哼從身側(cè)響起凝危,我...
    開(kāi)封第一講書(shū)人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎晨逝,沒(méi)想到半個(gè)月后蛾默,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捉貌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年趴生,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昏翰。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖刘急,靈堂內(nèi)的尸體忽然破棺而出棚菊,到底是詐尸還是另有隱情,我是刑警寧澤叔汁,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布统求,位于F島的核電站,受9級(jí)特大地震影響据块,放射性物質(zhì)發(fā)生泄漏码邻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一另假、第九天 我趴在偏房一處隱蔽的房頂上張望像屋。 院中可真熱鬧,春花似錦边篮、人聲如沸己莺。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)凌受。三九已至,卻和暖如春思杯,著一層夾襖步出監(jiān)牢的瞬間胜蛉,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留誊册,地道東北人领突。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像解虱,于是被迫代替她去往敵國(guó)和親攘须。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354