计算机视觉算法——图像分类网络总结
計(jì)算機(jī)視覺算法——圖像分類網(wǎng)絡(luò)總結(jié)
- 計(jì)算機(jī)視覺算法——圖像分類網(wǎng)絡(luò)總結(jié)
- 1. AlexNet
- 1.1 網(wǎng)絡(luò)結(jié)構(gòu)
- 1.2 關(guān)鍵知識(shí)點(diǎn)
- 1.2.1 卷積和池化特征尺寸計(jì)算公式
- 1.2.2 ReLU非線性激活函數(shù)
- 1.2.3 防止過擬合
- 2. VGG
- 2.1 網(wǎng)絡(luò)結(jié)果
- 2.2 關(guān)鍵知識(shí)點(diǎn)
- 2.2.1 感受野的計(jì)算以及大小卷積核
- 3. GoogLeNet
- 3.1 網(wǎng)絡(luò)結(jié)構(gòu)
- 3.2 關(guān)鍵知識(shí)點(diǎn)
- 3.2.1 Inception結(jié)構(gòu)
- 3.2.2 1×11 \times 11×1卷積作用
- 3.2.3 輔助分類器
- 4. ResNet
- 4.1 網(wǎng)絡(luò)結(jié)構(gòu)
- 4.2 關(guān)鍵知識(shí)點(diǎn)
- 4.2.1 residual模塊
- 4.2.2 batch normalization
- 5. ResNeXt
- 5.1 網(wǎng)絡(luò)結(jié)構(gòu)
- 5.2 關(guān)鍵知識(shí)點(diǎn)
- 5.2.1 分組卷積
- 6. MobileNet
- 6.1 網(wǎng)絡(luò)結(jié)構(gòu)
- 6.2 關(guān)鍵知識(shí)點(diǎn)
- 6.2.1 Depthwise Separable Convolution
- 6.2.2 Inverted Residuals Block 和 Linear Bottleneck(MobileNet V2)
- 6.2.3 bneck(MobileNet V3)
- 7. ShuffleNet
- 7.1 網(wǎng)絡(luò)結(jié)構(gòu)
- 7.2 關(guān)鍵知識(shí)點(diǎn)
- 7.2.1 Channel Shuffle思想
- 7.2.2 設(shè)計(jì)高效網(wǎng)絡(luò)準(zhǔn)則
- 8. EfficientNet
- 8.1 網(wǎng)絡(luò)結(jié)構(gòu)
- 8.2 關(guān)鍵知識(shí)點(diǎn)
- 8.2.1 MBConv
- 8.2.2 Processive Learning漸進(jìn)學(xué)習(xí)策略
計(jì)算機(jī)視覺算法——圖像分類網(wǎng)絡(luò)總結(jié)
由于后面工作方向的需要,也是自己的興趣,我決定補(bǔ)習(xí)下計(jì)算機(jī)視覺算法相關(guān)的知識(shí)點(diǎn),參考的學(xué)習(xí)資料主要是B站Up主霹靂吧啦Wz,強(qiáng)推一下,Up主的分享非常的細(xì)致認(rèn)真,從他這里入門是個(gè)不錯(cuò)的選擇,Up主也有自己的CSDN博客,我這里主要是作為課程的筆記,也會(huì)加入一些自己的理解,我也只是個(gè)入門的小白,如果有錯(cuò)誤還請(qǐng)讀者指正。
要入門基于DNN的計(jì)算機(jī)視覺,分類網(wǎng)絡(luò)構(gòu)架是基礎(chǔ),分類網(wǎng)絡(luò)會(huì)作為各種衍生網(wǎng)絡(luò)的backbone,也就是重要組成部分,起到了提取特征等作用,下面開始逐個(gè)總結(jié)各個(gè)圖像分類網(wǎng)絡(luò)的特點(diǎn)。
1. AlexNet
AlexNet是2012年CVPR發(fā)表的一篇革命性的論文,現(xiàn)在的引用量都快接近8w了,它的主要?jiǎng)?chuàng)新點(diǎn)是:
1.1 網(wǎng)絡(luò)結(jié)構(gòu)
AlexNet網(wǎng)絡(luò)由五層卷積加三層最大池化層,以及最后三層的全連接層構(gòu)成,那會(huì)兒由于GPU顯存不夠大,因此作者采用的方式是將一張圖一份為二,分別使用兩張GPU訓(xùn)練,在進(jìn)行第三層卷積時(shí)會(huì)將兩張GPU的輸出進(jìn)行聯(lián)合輸入,在其他層數(shù)據(jù)都是獨(dú)立的。
1.2 關(guān)鍵知識(shí)點(diǎn)
1.2.1 卷積和池化特征尺寸計(jì)算公式
AlexNet中主要是使用了卷積和最大池化層,卷積后特征尺寸計(jì)算公式為:N=(W?F+2P)/S+1N=(W-F+2 P) / S+1 N=(W?F+2P)/S+1其中,輸入特征尺寸為WWW,卷積核的大小為F×FF \times FF×F,卷積步daxiao長(zhǎng)為SSS,padding的像素?cái)?shù)為PPP,那么輸出特征尺寸即為NNN。池化可以看作一種特殊的卷積核,因此池化后特征尺寸計(jì)算同樣滿足上述規(guī)律。
1.2.2 ReLU非線性激活函數(shù)
ReLU非線性激活函數(shù)有如下優(yōu)勢(shì):
1.2.3 防止過擬合
AlexNet中使用兩種方法減少過擬合,分別是:
2. VGG
VGG是2014年由牛津大學(xué)提出的,是應(yīng)用非常廣泛的一種backbone,此方法在提出時(shí)主要的貢獻(xiàn)是:
2.1 網(wǎng)絡(luò)結(jié)果
VGG網(wǎng)絡(luò)的具體參數(shù)如下:
其中網(wǎng)絡(luò)D包含16個(gè)隱藏層,稱為VGG16,網(wǎng)絡(luò)D包含19個(gè)隱藏層,稱為VGG19,VGG16的結(jié)構(gòu)如下圖所示:
這里值得注意的一點(diǎn)是,在網(wǎng)絡(luò)D中,卷積層中卷核大小為3×33 \times 33×3,步距為1,padding為1,最大池化層的尺寸為2, 步距為2,因此我們可以計(jì)算經(jīng)過卷積層后的特征尺寸不變,經(jīng)過最大池化層后特征尺寸減半。此外最后三層為全連接層,占據(jù)了網(wǎng)絡(luò)的絕大多數(shù)參數(shù)數(shù)量。
2.2 關(guān)鍵知識(shí)點(diǎn)
2.2.1 感受野的計(jì)算以及大小卷積核
這是VGG網(wǎng)路中最大的亮點(diǎn),首先我們來了解下什么是感受野:在卷積神經(jīng)網(wǎng)絡(luò)中,決定某一層輸出結(jié)果中一個(gè)元素對(duì)應(yīng)的輸入層的區(qū)域大小,稱作感受野,也可以說是feature map上的一個(gè)單元對(duì)應(yīng)輸入層的區(qū)域的大小,如下圖的例子:
在上圖中我們?cè)O(shè)置卷積核大小為3×33\times33×3,步距為1,padding為0,按照前文的特征尺寸計(jì)算公式,5×55\times55×5的特征,經(jīng)過一層卷積后大小為3×33\times33×3,再經(jīng)過一層卷積后大小為1×11\times11×1,感受野就是反過來推導(dǎo),1×11\times11×1的特征單元在兩層卷積前對(duì)應(yīng)的區(qū)域的大小即5×55\times55×5,因此兩層3×33\times33×3的卷積核的感受野的大小即5×55\times55×5,即可以代替一個(gè)5×55\times55×5的卷積核。我們來計(jì)算下兩種方法需要的參數(shù)數(shù)量,對(duì)于5×55\times55×5的卷積核,參數(shù)數(shù)量為:5×5×C×C=25C25 \times 5 \times C \times C = 25C^2 5×5×C×C=25C2對(duì)于兩層3×33\times33×3的卷積核,參數(shù)數(shù)量為:3×3×C×C+3×3×C×C=18C23 \times 3 \times C \times C + 3 \times 3 \times C \times C = 18C^2 3×3×C×C+3×3×C×C=18C2由此可見,在感受野相同的情況下,疊加小卷積核的數(shù)量更小,并且網(wǎng)絡(luò)更深,效果更有,并且有文章稱3×33\times33×3更有利于保持圖像性質(zhì)。
3. GoogLeNet
GoogLeNet的網(wǎng)絡(luò)的亮點(diǎn)主要有:
3.1 網(wǎng)絡(luò)結(jié)構(gòu)
我們可以注意到,在AlexNet和VGG中都是串行處理,而在GoogLeNet通過Inception結(jié)構(gòu)實(shí)現(xiàn)了并行處理,下面我們對(duì)Inception結(jié)構(gòu)的細(xì)節(jié)進(jìn)行討論,
3.2 關(guān)鍵知識(shí)點(diǎn)
3.2.1 Inception結(jié)構(gòu)
Inception結(jié)構(gòu)設(shè)計(jì)的核心思想是,通過多個(gè)卷積核提取圖像不同尺度的信息,最后進(jìn)行融合,以得到圖像更好的表征,我們以第三層的Inception結(jié)構(gòu)為例,結(jié)構(gòu)圖如下:
具體來說,分別是:
最后將四個(gè)結(jié)果進(jìn)行連接,對(duì)這四部分輸出結(jié)果的第三維并聯(lián),即64+128+32+32=256,最終輸出28x28x256,這一步操作稱為concate。
3.2.2 1×11 \times 11×1卷積作用
1×11 \times 11×1卷積層引起人們重視是在NIN的網(wǎng)絡(luò)結(jié)構(gòu)中,在GoogLeNet網(wǎng)絡(luò)中,1×11 \times 11×1卷積層主要是用于降維和升維,目的在與減少網(wǎng)絡(luò)計(jì)算量,同樣以上述第三層的Inception結(jié)構(gòu)為例,我們計(jì)算參數(shù)量:1×1×192×64+(1×1×192×96+3×3×96×128)+(1×1×192×16+5×5×16×32)1 \times 1 \times 192 \times 64+(1 \times 1 \times 192 \times 96+3 \times 3 \times 96 \times 128)+(1 \times 1 \times 192 \times 16+5 \times 5 \times 16 \times 32) 1×1×192×64+(1×1×192×96+3×3×96×128)+(1×1×192×16+5×5×16×32)
如果去掉網(wǎng)絡(luò)中的1×11 \times 11×1的模塊,參數(shù)量如下:1×1×192×64+3×3×192×128+5×5×192×321 \times 1 \times 192 \times 64+3 \times 3 \times 192 \times 128+5 \times 5 \times 192 \times 32 1×1×192×64+3×3×192×128+5×5×192×32由此可見,如果去掉網(wǎng)絡(luò)中的1×11 \times 11×1模塊,參數(shù)量將增加到原來網(wǎng)絡(luò)的三倍
3.2.3 輔助分類器
輔助分類器在訓(xùn)練的過程中同樣會(huì)計(jì)算損失,在GoogLeNet論文中,輔助分類器的損失被乘以0.3后加到主分類器的損失中作為最終的損失來訓(xùn)練網(wǎng)絡(luò),主分類器的結(jié)果如下:
輔助分類器的結(jié)構(gòu)如下:
結(jié)構(gòu)的細(xì)節(jié)具體說來:
輔助分類器的作用的是一方面增加了反向傳播的梯度信號(hào),幫助低層特征訓(xùn)練,從而低層特征也有很好的區(qū)分能力,另一方面輔助分類器提供了額外的正則化效果,對(duì)于整個(gè)網(wǎng)絡(luò)的訓(xùn)練很有裨益。
4. ResNet
ResNet是2015年由微軟實(shí)驗(yàn)室提出的,網(wǎng)絡(luò)的亮點(diǎn)主要有:
4.1 網(wǎng)絡(luò)結(jié)構(gòu)
網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示,其中ResNet為下圖中最上層的網(wǎng)絡(luò)
可以看到ResNet其實(shí)就是對(duì)residual模塊的反復(fù)堆疊,隨著網(wǎng)絡(luò)層數(shù)的增加,深層網(wǎng)絡(luò)中主要會(huì)出現(xiàn)如下兩個(gè)問題而導(dǎo)致網(wǎng)絡(luò)效果變差:
其中梯度消失或者梯度爆炸主要通過數(shù)據(jù)預(yù)處理、權(quán)重初始化以及batch normalization方法解決,而退化問題主要是通過本文提出的residual模塊解決,下面分別對(duì)這兩個(gè)關(guān)鍵知識(shí)點(diǎn)進(jìn)行總結(jié)。
4.2 關(guān)鍵知識(shí)點(diǎn)
4.2.1 residual模塊
residual模塊主要解決了深層網(wǎng)絡(luò)出現(xiàn)的退化問題,退化問題具體表現(xiàn)就是層數(shù)深的網(wǎng)絡(luò)反而沒有層數(shù)淺的好,residual模塊結(jié)構(gòu)如下圖所示:
其中,左側(cè)為34層網(wǎng)絡(luò)的residual模塊,右側(cè)為50、101、152層網(wǎng)絡(luò)的residual模塊,右側(cè)residual模塊的主要特點(diǎn)是增加1×11\times11×1卷積核來進(jìn)行升維和降維,減少網(wǎng)絡(luò)參數(shù)量,以不至于過深的網(wǎng)絡(luò)帶來巨大的參數(shù)量導(dǎo)致難以學(xué)習(xí)。另一個(gè)值得注意的點(diǎn)是這里的residual是通過add操作將特征合并,而不是通過concate操作,這里我們來說明下concate操作和add操作的區(qū)別:
由此可見,add其實(shí)可以相當(dāng)于concate之后對(duì)應(yīng)通道共享同一個(gè)卷積核,add相當(dāng)于加了一種先驗(yàn),當(dāng)兩路輸入可以具有“對(duì)應(yīng)通道的特征圖語義類似”(可能不太嚴(yán)謹(jǐn))的性質(zhì)的時(shí)候,可以用add來替代concate,這樣更節(jié)省參數(shù)和計(jì)算量(concate是add的2倍)。
4.2.2 batch normalization
batch normalization是2015年的論文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》提出的,其目的是使得我們同一通道的feature map滿足均值為0,方差為1的分布規(guī)律,batch normalization的具體操作如下:假設(shè)小批量輸入為B={x1…m}\mathcal{B}=\left\{x_{1 \ldots m}\right\}B={x1…m?},學(xué)習(xí)的參數(shù)為γ,β\gamma, \betaγ,β,那么操作主要有如下四個(gè)步驟:
其中batch normalization的結(jié)果為{yi=BNγ,β(xi)}\left\{y_{i}=\mathrm{BN}_{\gamma, \beta}\left(x_{i}\right)\right\}{yi?=BNγ,β?(xi?)}具體操作可以如下圖所示:
這里值得注意的是:
5. ResNeXt
ResNeXt是ResNet與Inception的結(jié)合體,利用分組卷積的形式在沒有增加參數(shù)數(shù)量的前提下降低了錯(cuò)誤率,網(wǎng)絡(luò)的性能對(duì)比如下圖所示,在和ResNet和Inception的對(duì)比中都取得更好的結(jié)果:
5.1 網(wǎng)絡(luò)結(jié)構(gòu)
其網(wǎng)絡(luò)結(jié)構(gòu)與ResNet類似,都是通過模塊堆疊而成,唯一的區(qū)別是堆疊的模塊不同,如下圖所示:
注意到,在參數(shù)數(shù)量接近的前提下,ResNeXt中的residual模塊的通道數(shù)要比ResNet多,網(wǎng)絡(luò)的表達(dá)能力相應(yīng)更強(qiáng)。上表中中ResNeXt中的參數(shù)CCC指的的是Group Convolution中的Group數(shù),參數(shù)ddd指的是每個(gè)Group卷積的卷積核的個(gè)數(shù),這兩個(gè)參數(shù)對(duì)精度的影響如下圖所示:
5.2 關(guān)鍵知識(shí)點(diǎn)
5.2.1 分組卷積
ResNeXt中堆疊的模塊本質(zhì)就是就是采用分組卷積的residual模塊,因此首先我們來了解下分組卷積,如下圖所示為標(biāo)準(zhǔn)卷積操作:
對(duì)應(yīng)卷積層的參數(shù)數(shù)量為:(h1×w1×c1)×c2\left({h}_{1} \times {w}_{1} \times {c}_{1}\right) \times {c}_{2} (h1?×w1?×c1?)×c2?而分組卷積操作圖示如下,將輸入按照通道分組后進(jìn)行卷積后在進(jìn)行Concate操作:
對(duì)應(yīng)的卷積層參數(shù)數(shù)量為:h1×w1×(c1g)×(c2g)×g=h1×w1×c1×c2×1gh_{1} \times w_{1} \times\left(\frac{c_{1}}{g}\right) \times\left(\frac{c_{2}}{g}\right) \times g={h}_{1} \times {w}_{1} \times c_{1} \times c_{2} \times \frac{{1}}{{g}} h1?×w1?×(gc1??)×(gc2??)×g=h1?×w1?×c1?×c2?×g1?因此,分組卷積的數(shù)量是標(biāo)準(zhǔn)卷積的1g\frac{{1}}{{g}}g1?
ResNeXt論文中首先提出的是上圖中(a)的形式,通過一系列等價(jià)變換,最終可以得到如圖(c )所示分組卷積的形式
6. MobileNet
MobileNet目前一共有三個(gè)版本,分別是MoblileNet V1, MobileNet V2和MOblieNet V3:
MobileNet V1網(wǎng)絡(luò)是2017年google團(tuán)隊(duì)在2017年提出的,在準(zhǔn)確率小幅度降低的前提下大大減少模型參數(shù)和運(yùn)算量(相比VGGG16準(zhǔn)確率減少了0.9%,但是模型參數(shù)只有VGG的1/32),網(wǎng)絡(luò)的主要亮點(diǎn)有:
MobileNet V2網(wǎng)絡(luò)是2018年google團(tuán)隊(duì)在2018年提出的,相比Mobile V1網(wǎng)絡(luò)準(zhǔn)確率更高,模型更小,網(wǎng)絡(luò)的亮點(diǎn)主要有:
MoblieNet V3網(wǎng)絡(luò)在V2的基礎(chǔ)上進(jìn)一步減少了計(jì)算量和提高了精度,網(wǎng)路的主要兩點(diǎn)如下:
MobileNet V1和MobileNet V2在分類任務(wù)上的性能對(duì)比如下:
MobileNet V2和MobileNet V3的性能對(duì)比如下:
6.1 網(wǎng)絡(luò)結(jié)構(gòu)
MobileNet V1的網(wǎng)絡(luò)結(jié)構(gòu)與VGG類似,結(jié)構(gòu)如下所示:
其中Conv dw指的就是Depthwise Separable Convolution,下文介紹
MobileNet V2的網(wǎng)路結(jié)構(gòu)如下所示:
其中bottleneck指的就是Inverted Residual Block和Linear Bottleneck結(jié)構(gòu)。其中ttt是擴(kuò)展因子,也就是Inverted Residual Block第一層1×11\times11×1卷積核對(duì)特征矩陣Channel擴(kuò)展的倍數(shù),ccc是輸出特征矩陣Channel,nnn是bottleneck的重復(fù)次數(shù),sss是卷積核步距
MobileNet V3中結(jié)構(gòu)如下,MobileNet V3的網(wǎng)路結(jié)構(gòu)是通過NAS(Neual Architecture Search)搜索參數(shù)后得到網(wǎng)絡(luò)結(jié)構(gòu):
6.2 關(guān)鍵知識(shí)點(diǎn)
6.2.1 Depthwise Separable Convolution
Depthwise Separable Convolution即深度可分卷積,傳統(tǒng)卷積如下圖所示:
而Depthwise Separable Convolution由兩部分組成,分別是Depthwise Convolution和Pointwise Convolution,其中Depthwise Convolution操作如下圖所示:
在傳統(tǒng)卷積中,卷積核Channel等于輸入特征矩陣Channel,輸出特征矩陣Channel等于卷積核個(gè)數(shù),而在Depthwise Convolutional中,卷積核Channel等于1,輸入特征矩陣Channel等于卷積核個(gè)數(shù)等于輸出特征卷積Channel,也就是一個(gè)卷積和負(fù)責(zé)一個(gè)Channel的特征矩陣。
Pointwise Convolution操作如下圖所示:
在Pointwise Convolution和普通卷積一樣,只是卷積核大小固定為1×11\times11×1
假設(shè)輸入矩陣維度為DK×DK×MD_K \times D_K \times MDK?×DK?×M,卷積核大小為DF×DF×MD_F \times D_F \times MDF?×DF?×M,數(shù)量為NNN,因此普通卷積計(jì)算量為DK?DK?M?N?DF?DˉFD_{K} \cdot D_{K} \cdot M \cdot N \cdot D_{F} \cdot \bar{D}_{F} DK??DK??M?N?DF??DˉF?可分卷積計(jì)算量為:DK?DK?M?DF?DF+M?N?DF?DFD_{K} \cdot D_{K} \cdot M \cdot D_{F} \cdot D_{F}+M \cdot N \cdot D_{F} \cdot D_{F} DK??DK??M?DF??DF?+M?N?DF??DF?因此理論上普通卷積計(jì)算量是可分卷積的8到9倍。在實(shí)驗(yàn)過程中發(fā)現(xiàn)Depthwise Convolution參數(shù)大部分為零,參數(shù)大部分為零就意味著這部分卷積核是無效的,這是不合理的,在MobileNet V2網(wǎng)絡(luò)中對(duì)這個(gè)問題有所優(yōu)化
6.2.2 Inverted Residuals Block 和 Linear Bottleneck(MobileNet V2)
在ResNet中提出了Residual Block模塊,如下圖所示:
在該“兩頭大中間小“的結(jié)構(gòu)中,步驟如下:
而在Inverted Residual Block模塊的結(jié)構(gòu)如下圖所示:
具體步驟如下:
在Inverted Residual Block中使用的Relu6激活函數(shù):y=ReLU?6(x)=min?(max?(x,0),6)y=\operatorname{ReLU} 6(x)=\min (\max (x, 0), 6) y=ReLU6(x)=min(max(x,0),6)此外,在Inverted Residual Block模塊中的最后一個(gè)卷積層使用的是線性激活函數(shù),也就是Linear Bottleneck,論文中通過實(shí)驗(yàn)發(fā)現(xiàn)Relu激活函數(shù)對(duì)低維度特征信息造成大量損失,而Inverted Residual Block中使是"中間大兩頭小"的結(jié)構(gòu),因此輸出是相對(duì)低維度的特征,因此需要使用線性激活函數(shù)來替代Relu函數(shù)來避免對(duì)低維度特征信息造成損失。具體結(jié)構(gòu)如下:
當(dāng)stride=1且輸入特征矩陣與輸出特征矩陣shape相同時(shí)才有shortcut連接,而并不是stride=1的Inverted Residual Block都會(huì)有shortcurt連接。
6.2.3 bneck(MobileNet V3)
在以上基礎(chǔ)上,MobileNet V3進(jìn)一步優(yōu)化了Block結(jié)構(gòu),如下圖所示:
7. ShuffleNet
ShuffleNet有兩個(gè)版本,ShuffleNet V1網(wǎng)絡(luò)的特點(diǎn)主要如下:
ShuffleNet和MobileNet類似也是一個(gè)非常輕量級(jí)的網(wǎng)絡(luò),其性能對(duì)比如下,可以看在FLOPs接近的條件下,ShuffleNet的效果是要由于MoblieNet V1的:
ShuffleNet V2網(wǎng)絡(luò)中提出了四條高效網(wǎng)絡(luò)設(shè)計(jì)準(zhǔn)則:
并基于這四條準(zhǔn)則重新優(yōu)化了網(wǎng)絡(luò)結(jié)構(gòu),ShuffleNet V2相對(duì)硬核,有很多有意義的實(shí)驗(yàn)。ShuffleNet V2的性能對(duì)比如下:
7.1 網(wǎng)絡(luò)結(jié)構(gòu)
ShuffleNet V1的網(wǎng)絡(luò)結(jié)構(gòu)如下:
ShuffleNet V2網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示:
從網(wǎng)絡(luò)結(jié)構(gòu)看,仍然是模塊的堆疊,但是不同的是,ShuffleNetV1和V2使用不同的Block,具體的下文介紹。
7.2 關(guān)鍵知識(shí)點(diǎn)
7.2.1 Channel Shuffle思想
ResNeXt網(wǎng)絡(luò)中使用的Group Convolution雖然可以減少參數(shù)與計(jì)算量,但是Group Convolution中不同組之間的信息沒有交流,那么Channel Shuffle的基本思想就如下圖所示:
具體說來,就是將經(jīng)過第一次Group Convolution之后的結(jié)果,將不同Group間的Channel混亂后再進(jìn)行第二次Group Convolution,這樣就可以實(shí)現(xiàn)不同Group特征的融合。
在ShuffleNet V1中采用的全部都是Group Convolution和Depthwise Separable Convolution,如下圖所示:
上圖中(a)是ResNeXt中的殘差結(jié)構(gòu)將卷積層更換為Dpethwise Convolution后的示意圖,原始的ResNeXt計(jì)算量為:hw(1×1×c×m)+hw(3×3×m×m)/g+hw(1×1×m×c)=hw(2cm+9m2/g)h w(1 \times 1 \times c \times m)+h w(3 \times 3 \times m \times m) / g+h w(1 \times 1 \times m \times c)=h w\left(2 c m+9 m^{2} / g\right) hw(1×1×c×m)+hw(3×3×m×m)/g+hw(1×1×m×c)=hw(2cm+9m2/g)其中93.4%的計(jì)算量都由1×11\times11×1的卷積占據(jù)。而圖(b)和圖(c )分別是stride=1和stride=2的ShuffleNet V1中的結(jié)構(gòu),我們計(jì)算圖(b)的計(jì)算量為:hw(1×1×c×m)/g+hw(3×3×m)+hw(1×1×m×c)/g=hw(2cm/g+9m)h w(1 \times 1 \times c \times m) / g+h w(3 \times 3 \times m)+h w(1 \times 1 \times m \times c) / g=h w(2 c m / g+9 m) hw(1×1×c×m)/g+hw(3×3×m)+hw(1×1×m×c)/g=hw(2cm/g+9m)由此可見ShuffleNet中計(jì)算量會(huì)小很多。ShuffleNet V2中對(duì)結(jié)構(gòu)進(jìn)一步進(jìn)行了優(yōu)化,具體見下文。
7.2.2 設(shè)計(jì)高效網(wǎng)絡(luò)準(zhǔn)則
在ShuffleNet v2中作者提出計(jì)算復(fù)雜度不能只看FLOPs,一方面需要看Memory Access Cost,我們計(jì)算FLOPs通常值計(jì)算Convolution操作,但是在ShuffleNet V1中Convolution 操作在GPU上指占用了50%的時(shí)間,而Shuffle、Elemwise等操作占用了另外50%時(shí)間。另外一方面還需要看模型的Degree of Parallelism。
也就是說,在卷積和FLOPs不變的前提下,當(dāng)卷積層的輸入特征矩陣與輸出特征矩陣Channel相等就能獲得最小的Memory Access Cost,作者的實(shí)驗(yàn)如下:
作者簡(jiǎn)單堆疊一系列相同的卷積層,其中cic_ici?和c2c_2c2?分別為各個(gè)卷積的輸入輸出特征大小,我們可以看到,當(dāng)cic_ici?和c2c_2c2?比例越懸殊,網(wǎng)絡(luò)推理速度越慢。
意思是,當(dāng)FLOPs保持不變,GConv的groups增大時(shí),Memory Access Cost也會(huì)增大。這一部分實(shí)驗(yàn)結(jié)果如下:
指的是,網(wǎng)絡(luò)設(shè)計(jì)的碎片化程度越高,速度越慢,雖然這種設(shè)計(jì)通常可以增加模型的精度。實(shí)驗(yàn)結(jié)果如下:
其中各種frament如下圖所示:
可以看到4-fragment-parallel的情況速度最慢
大概意思是,Element-wise操作帶來影響是不可忽視的,Element-wise操作包括ReLU、AddTensor、AddBias等操作,這一部分實(shí)驗(yàn)如下所示:
通過對(duì)比我們可以axin ,不加入ReLU和short-cut操作速度最快。
綜上所示,ShuffleNet V2 Block結(jié)構(gòu)如下:
其中(a)(b)為ShuffleNet V1中的結(jié)構(gòu),?(d)對(duì)應(yīng)(a)(b)優(yōu)化后的結(jié)構(gòu),從圖中看,主要是使用Channel Spilt以及Concate代替了原來 Add操作,取消了GConv,取消了Add后的ReLU操作,將Channel Shuffle移動(dòng)了Concate操作后等等。
8. EfficientNet
EfficientNet V1是google在2019年發(fā)表的文章,該文章提出EfficientNet-B7在Imagenet top-1達(dá)到當(dāng)前最高準(zhǔn)確率84.3%,相對(duì)于準(zhǔn)確率最高的GPipex相比,參數(shù)數(shù)量?jī)H為1/8.4,推理速度提升了6.1倍。如下圖所示:
文章同時(shí)探討了輸入分辨率,網(wǎng)路深度和寬度的影響:
從上圖可以看出,單獨(dú)增加網(wǎng)絡(luò)的輸入分辨率、網(wǎng)絡(luò)的深度和寬度在準(zhǔn)確率達(dá)到80%左右后就基本達(dá)到飽和,而同時(shí)增加三者則可以突破這個(gè)飽和。
EfficientNet V2是發(fā)表于2021年CVPR上的論文,論文性能對(duì)比如下:
文章針對(duì)EfficientNet V1的問題提出了響應(yīng)的解決方案:
4. 訓(xùn)練圖像尺寸很大時(shí),訓(xùn)練速度非常慢,針對(duì)這個(gè)問題解決方案就是降低訓(xùn)練圖像的尺寸,使用更大的batch_size;
5. 在網(wǎng)絡(luò)淺層中使用Depthwise convolution速度會(huì)非常慢,無法充分利用現(xiàn)有的一些加速器,因此EfficientNet V2中引入了Fused-MBConv結(jié)構(gòu);
6. 同等放大每個(gè)Stage是次優(yōu)的,在EfficientNet V1中,每個(gè)Stage的深度和寬度都是同等放大的,但是每個(gè)Stage對(duì)網(wǎng)絡(luò)的訓(xùn)練速度以及參數(shù)數(shù)量并不相同,所以直接使用同等縮放策略并不合理,因此在V2中采用了非均勻的縮放策略來縮放模型;
8.1 網(wǎng)絡(luò)結(jié)構(gòu)
EfficientNet V1網(wǎng)絡(luò)結(jié)構(gòu)是通過網(wǎng)絡(luò)搜索技術(shù)得到的,具體網(wǎng)絡(luò)結(jié)構(gòu)如下表所示:
EfficientNet V2網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示:
與Efficient V1的不同點(diǎn)主要在于
8.2 關(guān)鍵知識(shí)點(diǎn)
8.2.1 MBConv
MBConv模塊結(jié)構(gòu)如下圖所示:
該模塊的設(shè)計(jì)和MobileNet V3中的SE模塊基本一致,由一個(gè)平均池化層和兩個(gè)全連接層組成,第一個(gè)全連接層節(jié)點(diǎn)個(gè)數(shù)為輸入MBConv特征矩陣Channel的1/4,并且使用Swish激活函數(shù),第二個(gè)全連接層節(jié)點(diǎn)個(gè)數(shù)和等于Depthwise Convlution輸出特征矩陣Channels,并且使用Sigmoid激活函數(shù);
在EfficientNet V2中發(fā)現(xiàn)在網(wǎng)絡(luò)淺層中使用Depthwise Convolution速度會(huì)變慢,因此作者提出了Fused-MBConv模塊,如下圖所示,也就是講Depthwise卷積和升維的1×11\times11×1的卷積合成一個(gè)3×33\times33×3的卷積:
Fused-MBConv具體實(shí)現(xiàn)如下如下圖所示(在Fused-MBConv的具體實(shí)現(xiàn)中是沒有SE模塊的):
作者還完成了一系列對(duì)比實(shí)驗(yàn),并不是所有層都使用Fused-MBConv效果最好,而是Stage1-3使用能達(dá)到最佳的效果,此外,這里的Dropout層和我們通常理解的神經(jīng)元的隨機(jī)失活是不一樣的,而是來自一篇論文《Deep Networks with Stochastic Depth》的方法,如下圖所示,是通過隨機(jī)失活神經(jīng)元使得網(wǎng)絡(luò)獲得隨機(jī)的深度。
8.2.2 Processive Learning漸進(jìn)學(xué)習(xí)策略
Processive Learning漸進(jìn)學(xué)習(xí)策略其實(shí)很簡(jiǎn)單,在訓(xùn)練早期使用較小的訓(xùn)練尺寸以及較弱的正則方法weak regularizatin,這樣網(wǎng)路能夠快速學(xué)習(xí)到一些簡(jiǎn)單的表達(dá)能力。接著逐漸提升圖像尺寸同時(shí)增強(qiáng)正則方法adding stronger regularization。這里所說regularization包括Dropout,RandAugment以及Mixup。
具體算法如下圖所示:
以及采用漸進(jìn)式學(xué)習(xí)策略帶來的收益,不僅可以縮短訓(xùn)練時(shí)間,甚至在準(zhǔn)確度上也能有所提高:
總結(jié)
以上是生活随笔為你收集整理的计算机视觉算法——图像分类网络总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图像降噪算法——低秩聚类:WNNM算法
- 下一篇: Ceres Solver Documen