輕量級(jí)網(wǎng)絡(luò)/檢測(cè)/分割綜述
點(diǎn)擊上方“AI算法與圖像處理”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時(shí)間送達(dá)
導(dǎo)讀
?由于深度學(xué)習(xí)的關(guān)系,計(jì)算機(jī)視覺(jué)領(lǐng)域發(fā)展迅速,各大榜單精度刷的很高,但是這些性能強(qiáng)大的模型卻沒(méi)有用武之地,在現(xiàn)實(shí)場(chǎng)景下,更加需要的是輕量級(jí)的模型。本文將從輕量級(jí)網(wǎng)絡(luò)(MobileNetV2、ShuffleNetV2)、輕量級(jí)檢測(cè)(Light-Head R-CNN、ThunderNet)、輕量級(jí)分割(BiSeNet、DFANet)3個(gè)方面進(jìn)行介紹。
輕量級(jí)網(wǎng)絡(luò)
好的論文不僅教你為什么,而且教你怎么做,這兩篇論文堪稱典范,強(qiáng)烈建議多讀幾遍(就是有點(diǎn)難懂,流下了不學(xué)無(wú)術(shù)的淚水~~ )!!!最近ShuffleNetV2還在VALSE上拿了最佳學(xué)生論文,膜~~
1.MobileNetV2
Motivation

對(duì)于一個(gè)feature,先通過(guò)一個(gè)給定的變換規(guī)則T,將它映射到它的embedding space中,再在該embedding space中,利用一個(gè)ReLU去處理該feature,最后再把這個(gè)feature以同樣的變換規(guī)則(逆方向)給映射回原始空間,這時(shí)我們會(huì)發(fā)現(xiàn)這個(gè)feature已經(jīng)改變了。
維度低的feature,分布到ReLU的激活帶上的概率小,因此經(jīng)過(guò)后信息丟失嚴(yán)重,甚至可能完全丟失。而維度高的feature,分布到ReLU的激活帶上的概率大,雖然可能也會(huì)有信息的部分丟失,但是無(wú)傷大雅,大部分的信息仍然得以保留。
由上述分析可以得到兩條性質(zhì):
1.如果the manifold of interest經(jīng)過(guò)ReLU之后信息保持完整,那么該操作實(shí)際上退化成了線性變換。
2.如果輸入的manifold位于輸入空間的低維子空間,那么ReLU能夠保留輸入manifold的復(fù)雜信息。
因此,the manifold of interest應(yīng)該位于高維激活空間的低維子空間中。
MobileNetV2引入了兩種結(jié)構(gòu)Linear Bottleneck和 Inverted Residual Blocks,既能夠去除高維度f(wàn)eature的冗余信息,又能夠去除低維度f(wàn)eature的信息坍塌。
Linear Bottleneck

與MoblieNetV1的相同點(diǎn):
都采用了Depth-wise Convolution和Point-wise Convolution組合的方式(Depth-wise Separable Convolution)來(lái)提取特征。該操作可以成倍減少時(shí)間復(fù)雜度和空間復(fù)雜度。
與MoblieNetV1的不同點(diǎn):
1.在Depth-wise Separable Convolution前面添加一個(gè)Point-wise Convolution。通過(guò)PW操作升維,在高維特征空間中提取特征。
2.去掉Depth-wise Separable Convolution后面的ReLU,等價(jià)于一個(gè)Linear Bottleneck結(jié)構(gòu)。
由于DW中的PW操作降維,得到一個(gè)低維特征空間,由上述分析可知,ReLU會(huì)導(dǎo)致低維特征空間坍塌,所以去除PW后面的ReLU可以提升性能。
Inverted Residual Block

和ResNet的相同點(diǎn):
1.都采用了1x1 -> 3x3 -> 1x1的模式。
2.都使用了Shortcut操作將輸入輸出相加。
和ResNet的不同點(diǎn):
1.ResNet通過(guò)標(biāo)準(zhǔn)卷積提取特征,MoblieNetV2通過(guò)DW卷積提取特征。
2.ResNet先降維,卷積,再升維,而MoblieNetV2先升維,卷積,再降維(即ResNet是沙漏形,而MobileNetV2是紡錘形)。
通過(guò)Linear Bottleneck和 Inverted Residual Blocks,MobileNetV2能夠更加充分高效的提取特征。
該部分借鑒了2位大佬的筆記,受益匪淺~~,感興趣的可以看看大佬的筆記
黃二二:對(duì)ResNet本質(zhì)的一些思考
Michael Yuan:MobileNet V2 論文初讀
2.ShuffleNetV2
Motivation
以往的工作都是用FLOPs來(lái)衡量計(jì)算復(fù)雜度的,然而FLOPs不是一個(gè)直接的指標(biāo),我們真正關(guān)心的是speed。
兩個(gè)原則
FLOPs和speed指標(biāo)之間的差異主要有兩個(gè)原因:
1.FLOPs指標(biāo)沒(méi)有考慮到幾個(gè)影響速度的重要因素。一個(gè)是內(nèi)存訪問(wèn)成本(MAC),大部分來(lái)自于組卷積。另一個(gè)是并行度。
2.有著相同F(xiàn)LOPs的各種操作,在不同平臺(tái)下的運(yùn)行時(shí)間不同。
基于這些觀察,作者提出2個(gè)原則:
1.使用直接指標(biāo)speed。
2.該指標(biāo)在相同平臺(tái)下評(píng)估。
四個(gè)準(zhǔn)則
對(duì)輕量級(jí)網(wǎng)絡(luò)各種操作的運(yùn)行時(shí)間進(jìn)行分析,作者提出了4個(gè)準(zhǔn)則:
G1:通道寬度均衡可以最小化MAC。
G2:增加組卷積會(huì)增加MAC。
G3:網(wǎng)絡(luò)碎片化降低了并行度。
G4:元素操作是不可忽略的。

ShuffleNetV1
ShuffleNetV1采用了pointwise組卷積和類似bottleneck的結(jié)構(gòu)。另外引入一個(gè)channel shuffle操作使得不同組的通道信息流通。
由上述4個(gè)準(zhǔn)則可知,pointwise組卷積和bottleneck結(jié)構(gòu)增加MAC,這違反了G1和G2。使用過(guò)多的組數(shù)違反了G3。逐元素相加違反了G4。
因此,為了實(shí)現(xiàn)較高的模型容量和效率,關(guān)鍵問(wèn)題是如何保持大量且同樣寬的通道,既沒(méi)有密集卷積也沒(méi)有太多的分組。
ShuffleNetV2
在每個(gè)單元的開始,輸入通道數(shù)為c的feature通過(guò)channel split分成了2個(gè)分支,按照準(zhǔn)則G3,一個(gè)分支作為identity,另一個(gè)分支由3個(gè)輸入輸出通道數(shù)相同的卷積組成(滿足準(zhǔn)則G1)。兩個(gè)1x1卷積不再是group-wise的了,一部分原因是準(zhǔn)則G2,另一部分原因是channel split操作已經(jīng)分成了兩組。卷積后,兩個(gè)分支concat操作,因此輸出通道數(shù)和輸入通道數(shù)保持相同(滿足準(zhǔn)則G1)。隨后引入channel shuffle使得兩個(gè)分支的通道信息流通。
值得注意的是,ShuffleNetV2去掉了Add操作,元素操作比如ReLU和depth-wise convolutions只在一個(gè)分支中存在。并且3個(gè)連續(xù)的操作Concat、Channel Shuffle和Channel Split被合并成一個(gè)元素操作。按照準(zhǔn)則G4,這些改變對(duì)精度是有幫助的。
對(duì)于帶有下采樣的模塊,需要稍微修改一下模塊,移除掉channel split操作。輸出的通道數(shù)增加一倍。
官方解讀:
機(jī)器之心:曠視科技提出新型輕量架構(gòu)ShuffleNet V2
輕量級(jí)檢測(cè)
3.Light-Head R-CNN


作者在?
?層后面接一個(gè)large separable convolution,?
?設(shè)置為15,對(duì)S設(shè)置?
?,對(duì)L設(shè)置?
?。將?
?設(shè)置為10 x p x p(R-FCN中為classes x p x p)。large kernel的有效感受野更大,池化后的feature maps的特征會(huì)更強(qiáng)。
R-CNN subnet
采用一個(gè)2048維的全連接層,后面接2個(gè)并行的全連接層來(lái)預(yù)測(cè)分類和回歸。
4.ThunderNet
Light-Head R-CNN的做法總的來(lái)說(shuō)還是比較粗糙的,而最近新出的ThunderNet對(duì)二階段檢測(cè)器進(jìn)行了全面壓縮,從backbone部分到detection部分,從RPN部分到detection head部分,能壓縮的全壓縮了一遍。不得不說(shuō),曠視在輕量級(jí)模型設(shè)計(jì)這一塊太厲害了~~ (筆記提到的6篇除了MobileNetV2全是曠視的,膜 ~~ )
Motivation
與小的backbone相結(jié)合時(shí),Light-Head R-CNN仍然花費(fèi)大量的計(jì)算在detection部分,這導(dǎo)致了弱backbone和強(qiáng)detection部分的不匹配。這種不平衡不僅導(dǎo)致巨大的計(jì)算冗余,而且使網(wǎng)絡(luò)容易過(guò)擬合。

ThunderNet的優(yōu)化目標(biāo)是二階段檢測(cè)器中計(jì)算開銷大的結(jié)構(gòu)。在backbone部分,設(shè)計(jì)了輕量級(jí)網(wǎng)絡(luò)SNet,在detection部分,借鑒Light-Head R-CNN的思路,并進(jìn)一步壓縮RPN和R-CNN子網(wǎng)絡(luò)。為了避免性能的衰退,設(shè)計(jì)了2個(gè)高效的結(jié)構(gòu)CEM和SAM來(lái)改善性能。
Backbone Part
輸入分辨率設(shè)置為320x320,作者指出輸入分辨率應(yīng)該和backbone的能力相匹配。
作者提出三種SNet的backbones:SNet49推理更快,SNet535性能更好,SNet146速度和性能折中。SNet在ShuffleNetV2的基礎(chǔ)上進(jìn)行了以下兩點(diǎn)修改:
1.將ShuffleNetV2中所有3x3 depthwise convolutions換成5x5 depthwise convolutions。
2.SNet146和SNet535中去掉Conv5并且增加前面階段的通道數(shù)。SNet49中將Conv5的通道數(shù)壓縮成512,并且增加前面階段的通道數(shù)。
Detection Part
Compressing RPN and Detection Head
壓縮RPN:用一個(gè)5x5 depthwise convolution和一個(gè)256通道的1x1卷積來(lái)替換256通道的3x3卷積。
壓縮Detection Head:Light-Head R-CNN產(chǎn)生5 x p x p的feature map,RoI warping采用PSRoI align。
R-CNN subnet:采用一個(gè)1024維的全連接層,后面接2個(gè)并行的全連接層來(lái)預(yù)測(cè)分類和回歸。
Context Enhancement Module

feature maps由三個(gè)尺度融合得到,?
?是全局平均池化得到的特征,在每個(gè)feature map上使用一個(gè)1x1卷積來(lái)壓縮通道數(shù)。?
?進(jìn)行2倍上采樣,?
?進(jìn)行廣播,得到三個(gè)分辨率相同的feature map,最后三個(gè)feature map進(jìn)行特征融合。比起FPN結(jié)構(gòu),CEM只添加了2個(gè)卷積和一個(gè)fc層,計(jì)算開銷上更加友好。
Spatial Attention Module

SAM的輸入有兩個(gè),一個(gè)是來(lái)自RPN的feature map,另一個(gè)是來(lái)自CEM的feature map。
輸出定義為:

?轉(zhuǎn)換通道維度,使通道數(shù)匹配。
SAM利用RPN的知識(shí)來(lái)精煉feature map的特征分布,對(duì)RoI warping之前的feature map進(jìn)行權(quán)值重標(biāo)定。
SAM有兩個(gè)函數(shù),第一個(gè)函數(shù),通過(guò)增強(qiáng)前景特征并且抑制背景特征來(lái)精煉特征分布,第二個(gè)函數(shù),來(lái)自R-CNN子網(wǎng)絡(luò)的梯度使得RPN的訓(xùn)練更加穩(wěn)定。
輕量級(jí)分割
以下兩篇論文剖析前人工作的部分,分析的非常透徹,很有啟發(fā)性。
5.BiSeNet
Motivation

實(shí)時(shí)語(yǔ)義分割主要有三種做法來(lái)加速模型(圖a):
1.通過(guò)crop或者resize限制輸入尺寸,減少計(jì)算復(fù)雜度。但是這種方法會(huì)導(dǎo)致空間細(xì)節(jié)的丟失。
2.剪枝網(wǎng)絡(luò)淺層的通道。但是這種方法會(huì)減少空間容量。
3.drop模型的最后階段。但是這種方法丟棄了最后階段的下采樣,導(dǎo)致感受野不足以覆蓋大的目標(biāo)。
為了彌補(bǔ)空間細(xì)節(jié)的丟失,實(shí)時(shí)語(yǔ)義分割使用U-shape的結(jié)構(gòu)(圖b)。通過(guò)融合網(wǎng)絡(luò)的層級(jí)特征,U-shape逐漸增加空間分辨率并且補(bǔ)充了一些缺失的細(xì)節(jié)。但是,這種做法有兩個(gè)缺點(diǎn):
1.因?yàn)楦叻直媛蔲eature maps的額外計(jì)算,U-shape結(jié)構(gòu)降低模型的速度。
2.剪枝和裁剪造成的空間信息的丟失是難以恢復(fù)的。
Bilateral Segmentation Network
基于對(duì)過(guò)去工作的分析,作者提出了Bilateral Segmentation Network(圖c),引入了2個(gè)組件Spatial Path和Context Path,分別用來(lái)解決空間信息的丟失和感受野的不足。為了在速度不降低的情況下提升精度,作者還引入了FFM和ARM結(jié)構(gòu),分別進(jìn)行兩個(gè)分支的融合和精煉預(yù)測(cè)結(jié)果。

Spatial path
Spatial path包含3層,每層包含步長(zhǎng)為2的卷積、BN和ReLU。分辨率降為輸入的1/8。這種編碼方式可以保留豐富的空間信息。
Context path
Context path利用輕量級(jí)網(wǎng)絡(luò)和全局平均池化來(lái)提供大的感受野。輕量級(jí)網(wǎng)絡(luò)能迅速下采樣得到大的感受野,編碼高級(jí)的語(yǔ)義上下文信息。隨后,通過(guò)一個(gè)全局平均池化,得到最大感受野。最后,將全局池化后的feature上采樣和輕量級(jí)網(wǎng)絡(luò)的feature進(jìn)行融合(最后兩個(gè)階段進(jìn)行U-shape結(jié)構(gòu)融合)。
Attention refinement module
ARM利用全局平均池化來(lái)捕獲全局信息并且計(jì)算得到一個(gè)attention向量來(lái)引導(dǎo)特征學(xué)習(xí)。該設(shè)計(jì)能夠精煉Context Path每個(gè)階段的輸出特征。
Feature fusion module
因?yàn)镾patial Path的輸出特征是低級(jí)的,而Context Path的輸出特征是高級(jí)的,所以兩個(gè)分支的特征不能直接相加融合。
FFM首先將Spatial Path和Context Path分支的輸出特征concat,然后利用BN來(lái)平衡特征的尺度,最后采用類SENet模塊對(duì)特征進(jìn)行權(quán)值重標(biāo)定。
官方解讀:
曠視科技:曠視科技提出雙向網(wǎng)絡(luò)BiSeNet:實(shí)現(xiàn)實(shí)時(shí)語(yǔ)義分割
ycszen:語(yǔ)義分割江湖的那些事兒——從曠視說(shuō)起
6.DFANet
Motivation

實(shí)時(shí)語(yǔ)義分割的兩種方法:
1.使用多個(gè)分支來(lái)進(jìn)行多尺度的特征抽取并且保留圖像的空間細(xì)節(jié)(圖a)。但是這種方法缺乏對(duì)由并行分支結(jié)合而成的高級(jí)特征的處理,另外,并行分支的特征缺乏信息交流,還有,在高分辨率圖像上額外添加分支對(duì)速度有影響。
2.使用空間金字塔池化(SPP)模塊來(lái)處理高級(jí)特征(圖b)。但是這種方法非常耗時(shí)。
受到以上兩種方法的啟發(fā),作者提出對(duì)網(wǎng)絡(luò)輸出進(jìn)行上采樣,然后用另一個(gè)子網(wǎng)絡(luò)對(duì)特征進(jìn)行精煉(圖c)。這種做法不同于SPP模塊,feature maps在更大的分辨率上進(jìn)行精煉同時(shí)能夠?qū)W到亞像素的細(xì)節(jié)。但是這種方法,隨著整個(gè)結(jié)構(gòu)深度的增長(zhǎng),高維度特征和感受野通常會(huì)出現(xiàn)精度損失。
為了進(jìn)一步提升精度,作者提出stage-level的方法為語(yǔ)義理解提供低級(jí)特征和空間信息(圖d)。因?yàn)樗械淖泳W(wǎng)絡(luò)有相似的結(jié)構(gòu),stage-level方法通過(guò)conat相同分辨率的層精煉產(chǎn)生多階段的上下文信息。
Deep Feature Aggregation

DFANet的特征聚合策略由子網(wǎng)絡(luò)聚合和子階段聚合組成。
Sub-network Aggregation
子網(wǎng)絡(luò)聚合在網(wǎng)絡(luò)層級(jí)進(jìn)行高級(jí)特征的結(jié)合。通過(guò)將上一個(gè)bacebone的輸出上采樣4倍,然后輸入到下一個(gè)backbone中,實(shí)現(xiàn)子網(wǎng)絡(luò)聚合。子網(wǎng)絡(luò)聚合對(duì)高級(jí)特征進(jìn)行處理,用以進(jìn)一步評(píng)估和重新評(píng)估更高階的空間關(guān)系。
Sub-stage Aggregation
子階段聚合在階段層級(jí)進(jìn)行語(yǔ)義合空間信息的融合。在子網(wǎng)絡(luò)相同深度下對(duì)不同階段進(jìn)行特征融合。具體的,就是前一個(gè)子網(wǎng)絡(luò)的某個(gè)階段輸出是下一個(gè)子網(wǎng)絡(luò)對(duì)應(yīng)階段的輸入。
子階段聚合公式如下:

在每個(gè)階段的開始,學(xué)習(xí)一個(gè)殘差公式?
?。然后使用concat將殘差兩個(gè)分支的特征融合起來(lái)。
Network Architecture
DFANet可以看成是一個(gè)encoder-decoder的結(jié)構(gòu)。encoder是由3個(gè)Xception聚合的,包括子網(wǎng)絡(luò)聚合和子階段聚合。decoder簡(jiǎn)單的設(shè)計(jì)為特征上采樣,然后融合低級(jí)和高級(jí)特征。所有backbone有相同的結(jié)構(gòu)和相同預(yù)訓(xùn)練權(quán)重初始值。
Backbone
輕微修改的Xception模型作為backbone。保留來(lái)自ImageNet預(yù)訓(xùn)練的全連接層來(lái)增強(qiáng)語(yǔ)義抽取。在fc層后面使用一個(gè)1x1卷積,減少通道數(shù)和feature maps匹配。得到的編碼向量對(duì)輸入特征進(jìn)行權(quán)值重標(biāo)定。
Decoder
首先將3個(gè)backbone的深層的高級(jí)特征上采樣后進(jìn)行融合。然后將3個(gè)backbone的淺層的低級(jí)特征上采樣后進(jìn)行融合。最后將融合得到的高級(jí)特征和低級(jí)特征相加再4倍上采樣得到最終的預(yù)測(cè)結(jié)果。
官方解讀:
曠視科技:曠視實(shí)時(shí)語(yǔ)義分割技術(shù)DFANet:高清虛化無(wú)需雙攝
Reference
1.MobileNetV2: Inverted Residuals and Linear Bottlenecks
2.ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design
3.Light-Head R-CNN: In Defense of Two-Stage Object Detector
4.ThunderNet: Towards Real-time Generic Object Detection
5.BiSeNet: Bilateral Segmentation Network for Real-time Semantic Segmentation
6.DFANet: Deep Feature Aggregation for Real-Time Semantic Segmentation
下載1:速查表
在「AI算法與圖像處理」公眾號(hào)后臺(tái)回復(fù):速查表,即可下載21張 AI相關(guān)的查找表,包括 python基礎(chǔ),線性代數(shù),scipy科學(xué)計(jì)算,numpy,kears,tensorflow等等
下載2 CVPR2020 在「AI算法與圖像處理」公眾號(hào)后臺(tái)回復(fù):CVPR2020,即可下載1467篇CVPR?2020論文 個(gè)人微信(如果沒(méi)有備注不拉群!) 請(qǐng)注明:地區(qū)+學(xué)校/企業(yè)+研究方向+昵稱
覺(jué)得不錯(cuò)就點(diǎn)亮在看吧


