CNN模型思路、加速算法設(shè)計(jì)及其實(shí)驗(yàn)樣例
自從AlexNet一舉奪得ILSVRC 2012 ImageNet圖像分類競(jìng)賽的冠軍后,卷積神經(jīng)網(wǎng)絡(luò)(CNN)的熱潮便席卷了整個(gè)計(jì)算機(jī)視覺領(lǐng)域。CNN模型火速替代了傳統(tǒng)人工設(shè)計(jì)(hand-crafted)特征和分類器,不僅提供了一種端到端的處理方法,還大幅度地刷新了各個(gè)圖像競(jìng)賽任務(wù)的精度,更甚者超越了人眼的精度(LFW人臉識(shí)別任務(wù))。CNN模型在不斷逼近計(jì)算機(jī)視覺任務(wù)的精度極限的同時(shí),其深度和尺寸也在成倍增長。
表1 幾種經(jīng)典模型的尺寸,計(jì)算量和參數(shù)數(shù)量對(duì)比
Model Model Size(MB) Million
Mult-Adds Million
Parameters
AlexNet[1] >200 720 60
VGG16[2] >500 15300 138
GoogleNet[3] ~50 1550 6.8
IncepTIon-v3[4] 90-100 5000 23.2
隨之而來的是一個(gè)很尷尬的場(chǎng)景:如此巨大的模型只能在有限的平臺(tái)下使用,根本無法移植到移動(dòng)端和嵌入式芯片當(dāng)中。就算想通過網(wǎng)絡(luò)傳輸,但較高的帶寬占用也讓很多用戶望而生畏。另一方面,大尺寸的模型也對(duì)設(shè)備功耗和運(yùn)行速度帶來了巨大的挑戰(zhàn)。因此這樣的模型距離實(shí)用還有一段距離。
在這樣的情形下,模型小型化與加速成了亟待解決的問題。其實(shí)早期就有學(xué)者提出了一系列CNN模型壓縮方法,包括權(quán)值剪值(prunning)和矩陣SVD分解等,但壓縮率和效率還遠(yuǎn)不能令人滿意。
近年來,關(guān)于模型小型化的算法從壓縮角度上可以大致分為兩類:從模型權(quán)重?cái)?shù)值角度壓縮和從網(wǎng)絡(luò)架構(gòu)角度壓縮。另一方面,從兼顧計(jì)算速度方面,又可以劃分為:僅壓縮尺寸和壓縮尺寸的同時(shí)提升速度。
本文主要討論如下幾篇代表性的文章和方法,包括SqueezeNet[5]、Deep Compression[6]、XNorNet[7]、DisTIlling[8]、MobileNet[9]和ShuffleNet[10],也可按照上述方法進(jìn)行大致分類:
表2 幾種經(jīng)典壓縮方法及對(duì)比
Method Compression Approach Speed ConsideraTIon
SqueezeNet architecture No
Deep Compression weights No
XNorNet weights Yes
DisTIlling architecture No
MobileNet architecture Yes
ShuffleNet architecture Yes
1.1 設(shè)計(jì)思想
SqueezeNet是F. N. Iandola,S.Han等人于2016年的論文《SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and < 0.5MB model size》中提出的一個(gè)小型化的網(wǎng)絡(luò)模型結(jié)構(gòu),該網(wǎng)絡(luò)能在保證不損失精度的同時(shí),將原始AlexNet壓縮至原來的510倍左右(< 0.5MB)。
SqueezeNet的核心指導(dǎo)思想是——在保證精度的同時(shí)使用最少的參數(shù)。
而這也是所有模型壓縮方法的一個(gè)終極目標(biāo)。
基于這個(gè)思想,SqueezeNet提出了3點(diǎn)網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)策略:
策略 1.將3x3卷積核替換為1x1卷積核。
這一策略很好理解,因?yàn)?個(gè)1x1卷積核的參數(shù)是3x3卷積核參數(shù)的1/9,這一改動(dòng)理論上可以將模型尺寸壓縮9倍。
策略 2.減小輸入到3x3卷積核的輸入通道數(shù)。
我們知道,對(duì)于一個(gè)采用3x3卷積核的卷積層,該層所有卷積參數(shù)的數(shù)量(不考慮偏置)為:
式中,N是卷積核的數(shù)量,也即輸出通道數(shù),C是輸入通道數(shù)。
因此,為了保證減小網(wǎng)絡(luò)參數(shù),不僅僅需要減少3x3卷積核的數(shù)量,還需減少輸入到3x3卷積核的輸入通道數(shù)量,即式中C的數(shù)量。
策略 3.盡可能的將降采樣放在網(wǎng)絡(luò)后面的層中。
在卷積神經(jīng)網(wǎng)絡(luò)中,每層輸出的特征圖(feature map)是否下采樣是由卷積層的步長或者池化層決定的。而一個(gè)重要的觀點(diǎn)是:分辨率越大的特征圖(延遲降采樣)可以帶來更高的分類精度,而這一觀點(diǎn)從直覺上也可以很好理解,因?yàn)榉直媛试酱蟮妮斎肽軌蛱峁┑男畔⒕驮蕉唷?/p>
上述三個(gè)策略中,前兩個(gè)策略都是針對(duì)如何降低參數(shù)數(shù)量而設(shè)計(jì)的,最后一個(gè)旨在最大化網(wǎng)絡(luò)精度。
1.2 網(wǎng)絡(luò)架構(gòu)