調(diào)研了一下最近的一些輕量級網(wǎng)絡(luò),列舉并簡單介紹各個(gè)網(wǎng)絡(luò)的設(shè)計(jì)思路
PVANET
2016年1月在arxiv網(wǎng)站第一次提交
文章地址:https://arxiv.org/abs/1608.08021
代碼鏈接:https://github.com/sanghoon/pva-faster-rcnn
文章目的是減少網(wǎng)絡(luò)計(jì)算量加快網(wǎng)絡(luò)的速度,文章采用C.Relu(類似于一個(gè)對稱的Relu函數(shù))和inception結(jié)構(gòu)(分別如下兩圖所示),通過減少通道數(shù)增加網(wǎng)絡(luò)層數(shù)來加速網(wǎng)絡(luò)
C.Relu結(jié)構(gòu)如下圖所示

新的inception結(jié)構(gòu)如下圖所示

pvanet網(wǎng)絡(luò)結(jié)構(gòu)如下表所示

SqueezeNet
2016年2月在arxiv上第一次提交
文章地址:https://arxiv.org/abs/1602.07360
代碼地址:https://github.com/DeepScale/SqueezeNet
該文章對精簡網(wǎng)絡(luò)遵循三個(gè)策略:
- 使用1*1大小的卷積代替3*3的卷積,這樣可以減少網(wǎng)絡(luò)參數(shù)
- 減少3*3卷積層的輸入通道數(shù),因?yàn)橐粚?*3網(wǎng)絡(luò)參數(shù)個(gè)數(shù)計(jì)算方式為(輸入通道數(shù)*輸出通道數(shù)*3*3),減少通道數(shù)能夠很大程度的減少網(wǎng)絡(luò)參數(shù)
- 下采樣的操作盡量靠后,一般的網(wǎng)絡(luò)層后會(huì)接激活層,文章認(rèn)為激活層越大網(wǎng)絡(luò)精度越高,所以推遲對feature map下采樣,可以增加激活層的大小,從而提高網(wǎng)絡(luò)精度。
通過上述三點(diǎn)文章提出fire module的結(jié)構(gòu),根據(jù)fire module構(gòu)造出sqeezenet
fire module結(jié)構(gòu)如下圖所示

sqeezenet及其兩種變式如下圖所示

Densenet
2016年8月在arxiv上第一次提交,發(fā)表于CVPR 2017
文章地址:https://arxiv.org/abs/1608.06993
代碼地址:https://github.com/liuzhuang13/DenseNet
文章通過借鑒resenet提出的新的網(wǎng)絡(luò)結(jié)構(gòu),網(wǎng)絡(luò)由多個(gè)dense block組成,在dense block中每層的輸入是前面所有層的輸出concat形成的,這樣做有下列優(yōu)點(diǎn):
- 減輕了vanishing-gradient(梯度消失)
- 加強(qiáng)了feature的傳遞
- 更有效地利用了feature
- 一定程度上較少了參數(shù)數(shù)量
Dense block結(jié)構(gòu)如下圖所示

DenseNet結(jié)構(gòu)如下表所示

Xception
2016年10月在arxiv上第一次提交,發(fā)表于CVPR 2017
文章地址:https://arxiv.org/abs/1610.02357
代碼地址:https://keras.io/applications/#xception
之所以叫Xception,文章指出是因?yàn)殪`感來自于inception,網(wǎng)絡(luò)結(jié)構(gòu)其實(shí)和inception沒太大關(guān)系,主要是該網(wǎng)絡(luò)使用了depthwise和pointwise的卷積,構(gòu)建了一個(gè)新的網(wǎng)絡(luò),在與inception V3相同參數(shù)量的情況下獲得了比inception V3更好的結(jié)果
Xception網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示
其中的SeparableConv就是由depthwise和pointwise的卷積組成

CondenseNet
2017年11月在arxiv上第一次提交
文章地址:https://arxiv.org/abs/1711.09224
代碼地址: https:// github.com/ShichenLiu/CondenseNet
文章是對Densenet的改進(jìn),在Densenet的基礎(chǔ)上引入了group conv,但是對于1*1的卷積采用group conv會(huì)導(dǎo)致網(wǎng)絡(luò)效果下降,文章猜測是因?yàn)?*1的輸入是由前面所有的輸出concat得到的,使用group會(huì)導(dǎo)致一些不相關(guān)的feature map進(jìn)行計(jì)算,從而使得效果降低,所以對于1*1的卷積文章提出了Learned Group Convolution。
Learned Group Convolution不同于Group convolution的是,它可以自己學(xué)習(xí)分組,而且在得到分組結(jié)果后裁去一些組里面不重要的連接
最后對于整體網(wǎng)絡(luò)結(jié)構(gòu)不同于Densenet的是,不同的block之間的feature map也相互連接,隨著網(wǎng)絡(luò)的加深增大了growth rate(densenet每層的輸出通道數(shù))
下圖為densenet與CondenseNet單元結(jié)構(gòu)(block)的對比圖
左圖為DenseNet的結(jié)構(gòu),中圖為CondenseNet訓(xùn)練的結(jié)構(gòu),右圖為CondenseNet推斷(inference)的結(jié)構(gòu)

CondenseNet網(wǎng)絡(luò)的結(jié)構(gòu)示意圖如下圖所示

MobileNets
2017年4月在arxiv上提交
論文地址:https://arxiv.org/abs/1704.04861
代碼地址:https://github.com/tensorflow/models/tree/master/research/slim/nets
文章目的:該網(wǎng)絡(luò)設(shè)計(jì)的主要目的不是減小網(wǎng)絡(luò)而是加快網(wǎng)絡(luò)的計(jì)算速度
主要思想是將一個(gè)普通的卷積分解為一個(gè)depth wise的卷積和一個(gè)point wise的卷積
depthwise就是每個(gè)通道有一個(gè)卷積核,卷積結(jié)果不想加是獨(dú)立的
pointwise就是將通道數(shù)轉(zhuǎn)化為最終輸出的通道數(shù),這樣可以將各個(gè)通道的輸出結(jié)果有個(gè)結(jié)合的過程
網(wǎng)絡(luò)還有兩個(gè)參數(shù)控制通道數(shù)和feature map的大小可以在程序中進(jìn)行設(shè)置
普通卷積、depthwise卷積、pointwise卷積的區(qū)別如下圖所示

MobileNets網(wǎng)絡(luò)結(jié)構(gòu)如下表所示

MobileNetV2
2018年1月在arxiv上第一次提交,發(fā)表于CVPR 2018
文章地址:https://arxiv.org/abs/1801.04381
代碼地址:https://github.com/tensorflow/models/tree/master/research/slim/nets/mobilenet
文章目的:該網(wǎng)絡(luò)設(shè)計(jì)是給手機(jī)端使用
網(wǎng)絡(luò)中繼承了mobilenet的depthwise和pointwise的思想,并且采用了resnet中的bottleneck的塊結(jié)構(gòu)
該文章殘差塊稱為Inverted residuals,不同于殘差網(wǎng)絡(luò)的殘差塊,這里殘差塊里面的通道數(shù)是先增后減(先增加通道數(shù)可以增加網(wǎng)絡(luò)容量),而且減少通道數(shù)的卷積層是不帶relu函數(shù)的(文章認(rèn)為relu會(huì)對提取好的特征有一定的損傷)
Inverted residuals結(jié)構(gòu)如下圖所示
左圖為stride=1,右圖為stride=2的Inverted residuals結(jié)構(gòu)

MobileNetV2結(jié)構(gòu)如下表所示

ShuffleNet
2017年7月在arxiv上第一次提交
文章地址:https://arxiv.org/abs/1707.01083
文章目的:文章主要考慮的是網(wǎng)絡(luò)的計(jì)算量,提出高效的網(wǎng)絡(luò)
文章采用了group convolutions和channels shuffle,采用group convolutions是為了減少計(jì)算量,采用channels shuffle是為了防止group convolutions帶來的負(fù)效應(yīng)
shuffle的結(jié)構(gòu)
左圖為正經(jīng)group convulution這樣的操作會(huì)導(dǎo)致輸入一直到輸出提取的特征都是分離的沒有任何交集
中圖的操作方式會(huì)導(dǎo)致GConv2的輸入與Gconv1是強(qiáng)相關(guān)的
右圖加入了shuffle的結(jié)構(gòu),這樣不同組卷積的結(jié)果能夠一起參與運(yùn)算

ShuffleNet Units
左圖為正經(jīng)的resnet結(jié)構(gòu)并將的卷積改為depthwise convolution
中圖和右圖為ShuffleNet Units,其中中圖stride=1,右圖stride=2

ShuffleNet結(jié)構(gòu)如下圖所示

ShuffleNet V2
2018年7月在arxiv上提交,發(fā)表在ECCV 2018
文章地址:https://arxiv.org/abs/1807.11164
文章認(rèn)為現(xiàn)在很多評價(jià)網(wǎng)絡(luò)效率的論文都是只考慮FLOPS,這個(gè)一種間接的評價(jià)方法,應(yīng)該直接測試網(wǎng)絡(luò)的速度,因?yàn)橄嗤現(xiàn)LOPS的網(wǎng)絡(luò)可能因?yàn)橛布?nèi)存等原因?qū)е戮W(wǎng)絡(luò)速度不同
通過一系列的試驗(yàn),文章總結(jié)出四點(diǎn):
- 對于網(wǎng)絡(luò)的某一層來說,輸入與輸出通道數(shù)相同這樣能更高的加速網(wǎng)絡(luò)的計(jì)算速度
- 群卷積對網(wǎng)絡(luò)計(jì)算速度有一定影響(在相同的FLOPS下,群卷積的分的越細(xì),即g越大,速度越慢)
- 分支越多,網(wǎng)絡(luò)計(jì)算速度越慢
- 減少element-wise的操作
ShuffleNet V2 Units結(jié)構(gòu)如下圖所示
a、b圖為ShuffleNet Units,c、d圖為ShuffleNet V2 Units
a\c圖stride=1,b\d圖stride=2

ShuffleNet V2網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示
網(wǎng)絡(luò)框架和shuffle net基本一樣

IGCV1
2017年7月在arxiv上第一次提交,發(fā)表在ICCV 2017
文章地址:https://arxiv.org/abs/1707.02725
文中提出了新的block來消除冗余的卷積核,認(rèn)為該結(jié)構(gòu)在相同參數(shù)量的情況下相對與普通的卷積網(wǎng)絡(luò)結(jié)構(gòu)更寬,效果更好
新的block就是group convolution+point wise的結(jié)合
IGCV1 block結(jié)構(gòu)如下圖所示
primary group convolution就是普通的group convolution
secondary group convolution就是point wise convolution

IGCV2
2018年4月在arxiv上提交,發(fā)表在CVPR 2018
文章地址:https://arxiv.org/abs/1804.06202
來自IGCV1的啟發(fā)。第一,組卷積能夠在保證性能的情況下降低復(fù)雜度,減少計(jì)算量;第二,組卷積中每組分配兩個(gè)通道能夠達(dá)到最佳性能。通過上述兩點(diǎn)將V1擴(kuò)展,不只是將輸入分為兩組卷積,而是采用交錯(cuò)組卷積。
IGCV2 block結(jié)構(gòu)如下圖所示

IGCV3
2018年6月在arxiv上提交
文章地址:https://arxiv.org/abs/1806.00178
代碼地址: https://github.com/homles11/IGCV3
在IGCV2和mobilenetV2基礎(chǔ)上提出了新的block,block由point wise conv和group wise組成的一個(gè)類Inverted residuals的結(jié)構(gòu),先增加通道數(shù)后減少通道數(shù)的操作
IGCV3 block結(jié)構(gòu)如下圖所示
下圖可以很直觀的看出block是先增加通道數(shù)后減少通道數(shù)
