日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

计算机视觉算法——图像分类网络总结

發(fā)布時(shí)間:2025/3/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算机视觉算法——图像分类网络总结 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

計(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)是:

  • 首次利用GPU進(jìn)行網(wǎng)絡(luò)加速訓(xùn)練;
  • 使用了RxeLU激活函數(shù),而不是傳統(tǒng)的SIgmoid激活函數(shù)以及Tanh激活函數(shù);
  • 使用了LRN局部響應(yīng)歸一化;
  • 在全連接層的前兩層使用了Dropout隨機(jī)失活神經(jīng)元操作,以減少過擬合;
  • 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ì):

  • 可以使網(wǎng)絡(luò)訓(xùn)練更快。 相比于sigmoid、tanh,導(dǎo)數(shù)更加好求,反向傳播就是不斷的更新參數(shù)的過程,因?yàn)槠鋵?dǎo)數(shù)不復(fù)雜形式簡(jiǎn)單;
  • 增加網(wǎng)絡(luò)的非線性。 本身為非線性函數(shù),加入到神經(jīng)網(wǎng)絡(luò)中可以是網(wǎng)格擬合非線性映射;
  • 防止梯度消;
  • 使網(wǎng)格具有稀疏性;
  • 1.2.3 防止過擬合

    AlexNet中使用兩種方法減少過擬合,分別是:

  • 數(shù)據(jù)擴(kuò)增:對(duì)圖片進(jìn)行隨機(jī)crop以及對(duì)RGB顏色空間進(jìn)行調(diào)整
  • Dropout:在訓(xùn)練階段的每次前向傳播中,都會(huì)重新進(jìn)行 dropout。因此,每次有新的輸入時(shí),模型會(huì)被隨機(jī)采樣成不同的架構(gòu),但是所有的架構(gòu)共享權(quán)值。該技術(shù)可以減少神經(jīng)元之間的相互依賴性。因此,模型被強(qiáng)制學(xué)習(xí)更加穩(wěn)健的特征。
  • 2. VGG

    VGG是2014年由牛津大學(xué)提出的,是應(yīng)用非常廣泛的一種backbone,此方法在提出時(shí)主要的貢獻(xiàn)是:

  • 文章提出通過堆疊多個(gè)3×33 \times 33×3的卷積核可以代替大尺度卷積核,在保證相同感受野的前提下,增加了網(wǎng)絡(luò)深度,并且3×33\times33×3的卷積核更有利于保留圖像性質(zhì),改善了網(wǎng)絡(luò)效果。
  • 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)主要有:

  • 引入Inception結(jié)構(gòu),用于融合不同尺寸的特征信息;
  • 使用1×11 \times 11×1的卷積核進(jìn)行降維以及映射處理;
  • 添加兩個(gè)輔助分類器幫助訓(xùn)練
  • 丟棄全連接層,使用平均池化層,大大減少模型參數(shù);
  • 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)圖如下:

    具體來說,分別是:

  • 64個(gè)1x1的卷積核,然后RuLU,輸出28x28x64;
  • 96個(gè)1x1的卷積核,作為3x3卷積核之前的降維,變成28x28x96,然后進(jìn)行ReLU計(jì)算,再進(jìn)行128個(gè)3x3的卷積(padding為1),輸出28x28x128;
  • 16個(gè)1x1的卷積核,作為5x5卷積核之前的降維,變成28x28x16,進(jìn)行ReLU計(jì)算后,再進(jìn)行32個(gè)5x5的卷積(padding為2),輸出28x28x32;
  • pool層,使用3x3的核(padding為1),輸出28x28x192,然后進(jìn)行32個(gè)1x1的卷積,輸出28x28x32。
  • 最后將四個(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é)具體說來:

  • 均值池化層核尺寸為5x5,步長(zhǎng)為3;
  • 1x1的卷積用于降維,擁有128個(gè)濾波器,采用ReLU激活函數(shù);
  • 全連接層有1024個(gè)神經(jīng)元,采用ReLU激活函數(shù);
  • dropout層的dropped的輸出比率為70%;
  • softmax激活函數(shù)用來分類,和主分類器一樣預(yù)測(cè)1000個(gè)類,但在推理時(shí)移除。
  • 輔助分類器的作用的是一方面增加了反向傳播的梯度信號(hào),幫助低層特征訓(xùn)練,從而低層特征也有很好的區(qū)分能力,另一方面輔助分類器提供了額外的正則化效果,對(duì)于整個(gè)網(wǎng)絡(luò)的訓(xùn)練很有裨益。

    4. ResNet

    ResNet是2015年由微軟實(shí)驗(yàn)室提出的,網(wǎng)絡(luò)的亮點(diǎn)主要有:

  • 超深的網(wǎng)絡(luò)結(jié)構(gòu)(可以突破1000層);
  • 提出risidual模塊:
  • 使用batch normalization加速訓(xùn)練(丟棄dropout);
  • 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要求整個(gè)特征矩陣的長(zhǎng)寬和深度都相同,而concate僅僅要求長(zhǎng)寬相同,而深度可以不同,因此concate就是按照深度方向進(jìn)行拼接的
  • add和concate操作是可以相互轉(zhuǎn)換的,如下圖所示:
    由此可見,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={x1m?},學(xué)習(xí)的參數(shù)為γ,β\gamma, \betaγ,β,那么操作主要有如下四個(gè)步驟:

  • 求得小批量數(shù)據(jù)的均值:μB←1m∑i=1mxi\mu_{\mathcal{B}} \leftarrow \frac{1}{m} \sum_{i=1}^{m} x_{i} μB?m1?i=1m?xi?
  • 求得小批量數(shù)據(jù)的方差:σB2←1m∑i=1m(xi?μB)2\sigma_{\mathcal{B}}^{2} \leftarrow \frac{1}{m} \sum_{i=1}^{m}\left(x_{i}-\mu_{\mathcal{B}}\right)^{2} σB2?m1?i=1m?(xi??μB?)2
  • 進(jìn)行歸一化操作:x^i←xi?μBσB2+?\widehat{x}_{i} \leftarrow \frac{x_{i}-\mu_{\mathcal{B}}}{\sqrt{\sigma_{\mathcal{B}}^{2}+\epsilon}} xi?σB2?+??xi??μB??
  • 進(jìn)行尺度為位移變換:yi←γx^i+β≡BNγ,β(xi)y_{i} \leftarrow \gamma \widehat{x}_{i}+\beta \equiv \mathrm{BN}_{\gamma, \beta}\left(x_{i}\right) yi?γxi?+βBNγ,β?(xi?)
  • 其中batch normalization的結(jié)果為{yi=BNγ,β(xi)}\left\{y_{i}=\mathrm{BN}_{\gamma, \beta}\left(x_{i}\right)\right\}{yi?=BNγ,β?(xi?)}具體操作可以如下圖所示:
    這里值得注意的是:

  • γ,β\gamma, \betaγ,β兩個(gè)參數(shù)是在訓(xùn)練過程中學(xué)習(xí)得到的,作用是抵消由于Batch Normalization將特征歸一化0-1后記過函數(shù)曲線變線性的問題,相當(dāng)于是回復(fù)出原始所學(xué)到的特征;
  • 在訓(xùn)練過程中,batch size要盡可能設(shè)置得大一些,這樣batch normalization層才更加容易學(xué)到數(shù)據(jù)分布規(guī)律;
  • batch normalization層通常放在卷積層和激活層之間,且卷積層不需要設(shè)置bias,因此有batch normalization層的話卷積層有無bias的結(jié)果是一致的。
  • 訓(xùn)練過程中,均值和方差分別是由該批次內(nèi)數(shù)據(jù)相應(yīng)維度的均值與方差獲得的,推理過程,均值和方差是基于所有批次的數(shù)據(jù)計(jì)算所得,也就是說數(shù)據(jù)的均值和方差在訓(xùn)練過程中會(huì)被記錄下來并不斷更新。
  • 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)有:

  • 采用Depthwise Separable Convolution(可分卷積),大大減少了運(yùn)算量和參數(shù)量;
  • 增加了控制卷積核卷積個(gè)數(shù)的超參數(shù)α\alphaα和輸入圖像大小的β\betaβ,用戶可以根據(jù)項(xiàng)目需求使用合適的超參數(shù);
  • MobileNet V2網(wǎng)絡(luò)是2018年google團(tuán)隊(duì)在2018年提出的,相比Mobile V1網(wǎng)絡(luò)準(zhǔn)確率更高,模型更小,網(wǎng)絡(luò)的亮點(diǎn)主要有:

  • 采用了Inverted Residual Block(倒殘差結(jié)構(gòu));
  • 采用了Linear Bottlenecks結(jié)構(gòu);
  • MoblieNet V3網(wǎng)絡(luò)在V2的基礎(chǔ)上進(jìn)一步減少了計(jì)算量和提高了精度,網(wǎng)路的主要兩點(diǎn)如下:

  • 采用了bneck結(jié)構(gòu),即進(jìn)一步優(yōu)化了Inverted Residual Block;
  • 使用了Neural Architecture Search搜索參數(shù);
  • 重新設(shè)計(jì)了耗時(shí)層結(jié)構(gòu) ;
  • 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)中,步驟如下:

  • 1×11 \times 11×1卷積降維;
  • 3×33 \times 33×3標(biāo)準(zhǔn)卷積;
  • 1×11 \times 11×1卷積升維;
  • 而在Inverted Residual Block模塊的結(jié)構(gòu)如下圖所示:

    具體步驟如下:

  • 1×11 \times 11×1卷積升維
  • 3×33 \times 33×3Depthwise Separable Convolution
  • 1×11 \times 11×1卷積降維
  • 在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),如下圖所示:

  • 添加了通道注意力機(jī)制:如上圖所示,在進(jìn)行Depthwise Convolution之后對(duì)特征矩陣按照通道進(jìn)行池化,獲得一個(gè)一維的向量,再在向量的基礎(chǔ)上連接兩個(gè)全連接層(第一層非線性激活函數(shù)為ReLU,第二層非線性激活函數(shù)為Hard-Sigmoid),輸出獲得向量相當(dāng)于獲得了特征矩陣各個(gè)Channel之間的權(quán)重關(guān)系,最終將該向量逐通道乘到原始的特征矩陣上。
  • 更新了激活函數(shù),其中Hard-Sigmoid函數(shù)公式如下:Hard-Sigmoid=ReLU?6(x+3)6\text{Hard-Sigmoid}=\frac{\operatorname{ReLU} 6(x+3)}{6} Hard-Sigmoid=6ReLU6(x+3)?Hard-Sigmoid函數(shù)和Sigmoid函數(shù)是非常接近的,但是在計(jì)算求導(dǎo)過程中會(huì)變得更加簡(jiǎn)單:
  • 7. ShuffleNet

    ShuffleNet有兩個(gè)版本,ShuffleNet V1網(wǎng)絡(luò)的特點(diǎn)主要如下:

  • 提出了Channel Shuffle的思想;
  • ShuffleNet V1中采用的全是Group Convolution和Depthwise Separable Convolution。
  • ShuffleNet和MobileNet類似也是一個(gè)非常輕量級(jí)的網(wǎng)絡(luò),其性能對(duì)比如下,可以看在FLOPs接近的條件下,ShuffleNet的效果是要由于MoblieNet V1的:

    ShuffleNet V2網(wǎng)絡(luò)中提出了四條高效網(wǎng)絡(luò)設(shè)計(jì)準(zhǔn)則:

  • Equal Channel width minimizes memory access cost(MAC);
  • Excessive group convolution increases MAC;
  • Network fragmentation reduces degree of parallelism;
  • Element-wise operations are non-negligible
    并基于這四條準(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。

  • Equal channel width minimizes memory access cost
    也就是說,在卷積和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ò)推理速度越慢。
  • Excessive group convolution increase MAC
    意思是,當(dāng)FLOPs保持不變,GConv的groups增大時(shí),Memory Access Cost也會(huì)增大。這一部分實(shí)驗(yàn)結(jié)果如下:
  • Network fragmentation reduces degree of parallelism
    指的是,網(wǎng)絡(luò)設(shè)計(jì)的碎片化程度越高,速度越慢,雖然這種設(shè)計(jì)通常可以增加模型的精度。實(shí)驗(yàn)結(jié)果如下:
    其中各種frament如下圖所示:

    可以看到4-fragment-parallel的情況速度最慢
  • Element-wise operations are non-negligible
    大概意思是,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)路深度和寬度的影響:

  • 增加網(wǎng)絡(luò)的深度,能夠得到更加豐富、復(fù)雜的特征并且能夠很好的應(yīng)用到其他任務(wù)中,但網(wǎng)絡(luò)的深度過深會(huì)面臨梯度消失,訓(xùn)練困難的問題。
  • 增加網(wǎng)絡(luò)的寬度,能夠過得更高細(xì)粒度的特征并且也更容易訓(xùn)練,但對(duì)于width很大而深度較淺的網(wǎng)絡(luò)往往很難學(xué)習(xí)到更加深層次的特征。
  • 增加輸入網(wǎng)絡(luò)的圖像分辨率能夠獲得更高細(xì)粒度的特征模板,但對(duì)于非常高的輸入分辨,準(zhǔn)確率增加的收益會(huì)減小,并且大分辨率圖像會(huì)增加計(jì)算量。如下圖所示:

    從上圖可以看出,單獨(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)主要在于

  • 處理使用MBConv模塊,還使用了Fused-MBConv模塊;
  • 會(huì)使用較小的Expansion Ratio;
  • 偏向使用更小的Kernel Size(3×33\times33×3);
  • 移除了Efficient V1中最后一個(gè)步距為1的Stage;
  • 8.2 關(guān)鍵知識(shí)點(diǎn)

    8.2.1 MBConv

    MBConv模塊結(jié)構(gòu)如下圖所示:

  • 第一個(gè)升維的1×11\times11×1卷積層,它的卷積核的個(gè)數(shù)是輸入特征矩陣Channel的nnn倍,后面緊接著一個(gè)BN層和一個(gè)Swish激活函數(shù),通過Depthwise Convolution和注意力轉(zhuǎn)移機(jī)制模塊,后一個(gè)1×11\times11×1卷積層則起到降維的作用;僅當(dāng)MBConv結(jié)構(gòu)的特征矩陣與輸出的特征矩陣Shape相同時(shí)才存在;
  • Swish非線性激活函數(shù)在MobileNet V3中也有使用到,不過MobileNet V3中使用的是Hard-Swish非線性激活函數(shù),Swish非線性激活函數(shù)其計(jì)算公式為:swish?x=x?σ(x)\operatorname{swish} x=x \cdot \sigma(x) swishx=x?σ(x)σ(x)=11+e?x\sigma(x)=\frac{1}{1+e^{-x}} σ(x)=1+e?x1?該非線性激活函數(shù)是谷歌大腦團(tuán)隊(duì)提出的,可以用來代替ReLU函數(shù)并取得更好的效果。
  • 圖中注意力轉(zhuǎn)移機(jī)制模塊如下圖所示:

    該模塊的設(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)確度上也能有所提高:

    與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

    總結(jié)

    以上是生活随笔為你收集整理的计算机视觉算法——图像分类网络总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。