博客專欄

        EEPW首頁 > 博客 > 一文看盡深度學習中的20種卷積(3)

        一文看盡深度學習中的20種卷積(3)

        發布人:計算機視覺工坊 時間:2021-06-27 來源:工程師 發布文章

        CondConv

        論文:《CondConv: Conditionally Parameterized Convolutions for Efficient Inference》[28] (Accepted by NIPS 2019)

        代碼:https://github.com/CVHuber/Convolution/blob/main/Conditionally%20Parameterized%20Convolutions.py

        講解:https://mp.weixin.qq.com/s/bWUrhXfcqiqG4zC_xv_XqA

        背景

        普通卷積對所有樣本都采用相同的卷積核參數,這就導致為了提升模型容量,就需要增加模型的參數。因此提高網絡深度,增加通道數是一種常用的做法,但這會進一步導致模型的計算量加大,為部署帶來更大的挑戰。由此提出了CondConv,它針對每個batch中的每一個輸入樣本得到定制化的卷積核,在提高模型容量同時還能夠保持高效的推理速度。

        25.png

        Conditionally Parameterized Convolutions

        原理

        在常規卷積中,卷積核參數一旦經過訓練確定以后,無論輸入什么樣本進行測試,都會利用固定的參數取提取特征。而CondConv中,卷積核參數可以針對輸入樣本進行動態變換。其次,常規卷積的容量提升依賴于卷積核尺寸和通道數的增加。而CondConv中只需要在執行卷積計算之前通過多個expert對輸入樣本計算加權卷積核即可。CondConv本質上等價于多個靜態卷積的線性組合。

        特性

        CondConv通過增加內核生成函數的大小和復雜性,利用樣本之間的關系改善了模型性能,它為提高模型容量同時保持有效推理提供了一種新的思路。由于僅增加了一個權重向量用于表示卷積核線性組合,因此增加的復雜度比添加其他卷積或擴展現有卷積要少得多。CondConv層可以代替網絡中的任何卷積層使用來提高網絡的性能,實現即插即用。同時,也可以輕松的擴展到網絡層中其它的線性函數上,例如全連接層中的線性函數,提供了一個改進的思路。

        DynamicConv

        論文:《Dynamic Convolution: Attention over Convolution Kernels》[29] (Accepted by CVPR 2020)

        代碼:https://github.com/CVHuber/Convolution/blob/main/Dynamic%20Convolution.py

        講解:https://mp.weixin.qq.com/s/zyhZvQXBoadA1m762s2B9g

        背景

        輕量級卷積神經網絡能夠在較低的計算預算下運行,卻也犧牲了模型性能和表達能力。為此提出了動態卷積,與傳統的靜態卷積(每層單個卷積核)相比,根據注意力動態疊加多個卷積核不僅顯著提升了表達能力,額外的計算成本也很小,因而對高效的 CNN 更加友好,同時可以容易地整合入現有 CNN 架構中。

        26.png

        Dynamic Convolution

        原理

        動態卷積的原理根據輸入圖像,自適應的調整卷積的參數。如上圖所示,靜態的卷積核對于不同的輸入均作同樣的處理,而動態的卷積核則會根據輸入的不同針對性地利用不同的卷積核選擇合適的卷積的參數去進行特征的提取。

        特性

        權重自適應

        動態卷積通過融合注意力機制動態地聚合多個并行的卷積核。首先對輸入進行一次注意力操作然后得到每個卷積核的權重,將學習到的權重疊加到不同的卷積核上以實現卷積核的動態選取。

        27.png

        訓練方式

        動態卷積的一個訓練難點在于隨著網絡深度的加深,如何協調多個卷積核和注意力模型之間的共同學習。作者指出需要限制注意力的取值(令權重和為1)以此來簡化注意力模型的學習。其次,在訓練初期限制注意力接近均勻分布有利于多個卷積核的共同學習,提出了利用Temperature annealing來提升模型的準確性。

        28.png

        內存計算開銷

        動態卷積主要包含兩部分開銷:注意力計算以及卷積核的疊加。其中注意力機制是由GAP和兩個FC層組成的,計算復雜度低。而疊加的多個卷積核由于內核尺寸較小,計算復雜度也不高。因此,整體來說動態卷積僅引入了少量額外的計算開銷卻顯著增加了特征表達能力。然而,由于采用多個卷積核并行的方式,必然會極大的增大內存開銷。

        Ghost Block

        論文:《GhostNet: More Features from Cheap Operations》[30] (Accepted by CVPR 2020)

        代碼:https://github.com/CVHuber/Convolution/blob/main/Ghost%20Convolution.py

        講解:https://mp.weixin.qq.com/s/TBJ7XeBNZYpUpE7kPFEvsA

        背景

        眾所周知,通過堆疊卷積層可以捕獲豐富的特征信息,其中也包含了冗余信息,這有利于網絡對數據有更全面的理解。因此,可以通過常規卷積操作提取豐富的特征信息,對于冗余的特征信息,則利用更價廉的線性變換操作來生成,這樣不僅能夠有效地降低模型所需計算資源,同時設計簡單、易于實現,可以即插即用。

        29.png

        Ghost Convolution

        原理

        幻影卷積的核心思想是利用簡單廉價的線性變化來等效的生成我們所需要的特征圖,而無需利用多余的濾波器生成,以此來提高網絡的計算效率。

        特性

        卷積神經網絡中主要的參數量和計算量來自于卷積結構,利用卷積可以生成新的特征圖,然而并不是所有的特征圖都是不一樣的。經過可視化分析可以發現存在著很多高度相似的特征圖,而這些特征圖并沒有必要去用卷積獲取,而是可以通過簡單的線性操作來替代,從而以更小的參數量和計算量換取差不多的精度。Ghost模塊使用了分組卷積作為更價廉的線性變換。分組卷積方式消除了通道間的相關性,使得當前通道特征僅與自己相關,一方面模擬冗余特征的生成方式,另一方面顯著減低的參數量和計算量。

        SCConv

        論文:《Improving Convolutional Networks with Self-Calibrated Convolutions》[31] (Accepted by CVPR 2020)

        代碼:https://github.com/CVHuber/Convolution/blob/main/Self-Calibrated%20Convolution.py

        背景

        CNNs的最新進展主要致力于設計更復雜的體系結構,以增強其表示學習能力。自校正卷積可以在不調整模型架構的情況下改進CNNs的基本卷積特征轉換過程,通過內部通信顯著擴展了每個卷積層的感受野,從而豐富了輸出功能。特別是,與使用小卷積核融合空間和通道方向信息的標準卷積不同,自校準卷積能夠圍繞每個空間位置自適應地建立長距離空間和通道間依賴性的校準操作。因此,它可以通過顯式合并更豐富的信息來幫助CNNs生成更多辨識性表示。

        30.png

        Self-Calibrated Convolution

        原理

        自校正卷積其核心思想是考慮在不調整模型架構的情況下改進CNNs的基本卷積特征轉換過程。本質上是一種用于多尺度特征提取的分組卷積,并按通道維度均分為兩組。其中一條通路用于常規的卷積提取特征,另一條通路則是利用下采樣操作來增大網絡的感受野。最終使得每個空間位置都可以通過融合來自兩個不同空間尺度的信息來實現自校準的操作。

        特性

        增強特征表達能力

        不同于普通卷積同時融合空間和通道信息,自校正卷積可以通過自校正操作自適應地在每個空間位置周圍建立遠距離空間和通道的依賴關系,從而生成更具判別力的特征,提取更加豐富的上下文信息。

        即插即用

        自校正卷積設計簡單且通用,可以輕松嵌入到任意的CNN架構中增強卷積層提取特征的能力,而不會引入額外的參數,但不可避免的會增大網絡的計算量。

        DO-Conv

        論文:DO-Conv[32]

        代碼:https://github.com/yangyanli/DO-Conv

        講解:https://mp.weixin.qq.com/s/fuXYD6EhpoAKxyUJ8xigqg

        背景

        CNNs應用于計算機視覺領域的很多任務中,增加非線性層的數量,能夠有效地增加網絡的表達能力,從而提高網絡的性能。然而,很少有人考慮只增加線性層,只增加線性層會造成過擬合現象,因為多個連續的線性層可以被一個線性層替代,而使用一個線性層參數更少。因此,作者通過在普通卷積層中加入額外的逐深度卷積,構成一個過參數化的卷積層,并將其命名為DO-Conv。

        31.png

        DO-Conv

        原理

        DO-Conv是深度卷積核普通卷積的組合,其計算過程可分為兩部分。先對輸入特征使用逐深度卷積運算。最后再對輸出的中間結果使用常規卷積運算。具體計算過程可參考論文講解部分。

        特性

        DO-Conv是一種over-parameterized的卷積層,通過簡單的對深度卷積和傳統卷積以一定方式組合,代替CNN的普通卷積層,便可以大幅提高CNN的性能。DO-Conv非常方便易用,除了改善了現有CNN的訓練速度和最終準確度之外,更無需在模型推理階段引入額外的計算。

        ResNeSt Block

        論文:《ResNeSt: Split-Attention Networks》[33]

        代碼:https://github.com/CVHuber/Convolution/blob/main/ResNeSt%20Block.py

        背景

        ResNet等一些基礎卷積神經網絡是針對于圖像分類而設計的。由于有限的感受野大小以及缺乏跨通道之間的相互作用,這些網絡可能不適合于其它的一些領域像目標檢測、圖像分割等。這意味著要提高給定計算機視覺任務的性能,需要修改以使其對特定任務更加有效。例如,某些方法添加了金字塔模塊或引入了遠程連接或使用跨通道特征圖注意力。雖然這些方法確實可以提高某些任務的學習性能,但由此而提出了一個問題,即是否可以創建具有通用改進功能表示的通用骨干網,從而同時提高跨多個任務的性能?跨通道信息在下游應用中已被成功使用 ,而最近的圖像分類網絡更多地關注組或深度卷積。盡管它們在分類任務中具有出色的計算能力和準確性,但是這些模型無法很好地轉移到其他任務,因為它們的孤立表示無法捕獲跨通道之間的關系。因此,作者提出了ResNeSt block來進行跨通道的學習。

        32.pngResNeSt Block

        原理

        ResNeSt首先是基于ResNeXt,將輸入特征圖劃分為k個組(Cardinal Groups),然后對每個Cardinal Group結SK的思想又劃分為r個基(Radix),每個基中又結合了SE的思想。每個Cardinal Groups的操作保持一致,先對組內的各個基特征進行一個1×1+3×3的組合,以壓縮通道并進行卷積提取;其次,對所有卷積過后的基特征進行融合,隨后利用SE的操作來獲取注意力權重;緊接著將學習到的權重疊加回各組基特征,以實現強化和抑制的作用,然后對所有基特征進行融合(Add);最后,結合殘差的思想將各個組的輸出共同連接起來作為RexNeSt模塊的輸出。

        特性

        與現有的ResNet變體相比,ResNeSt不需要增加額外的計算量,同時也可以作為其它任務的骨架。利用ResNeSt主干的模型能夠在圖像分類、目標檢測、實例分割和語義分割這幾個任務上達到最先進的性能。與通過神經架構搜索生成的最新CNNs模型相比,所提出的ResNeSt性能優于所有現有ResNet變體,并且具有相同的計算效率,甚至可以實現更好的速度精度折衷。

        內卷(Involution)

        論文:《Involution: Inverting the Inherence of Convolution for Visual Recognition》[34] (Accepted by CVPR 2021)

        代碼:https://github.com/CVHuber/Convolution/blob/main/Involution.py

        講解:https://mp.weixin.qq.com/s/Y-hXabMclEcDfvLcxvpKdA

        背景

        與經典的圖像濾波方法類似,卷積核具有兩個顯著的特性:空間不變性(Spatial-agnostic)和通道特異性(Channel-specific)。前者保證了不同空間區域之間權值共享,實現了平移不變性;后者負責將特征信息編碼到不同的通道中,增強了特征表達。雖然這兩種特性能夠提升對于圖像數據的學習效率,但是還存在以下兩個主要問題:空間維度上剝奪了卷積核捕獲不同空間位置的多種特征表示能力;通道維度上卷積內部的通道間會有冗余。

        33.png

        Involution

        原理

        生成內卷核

        選取某個空間位置的所有通道像素(紅色長方形),通過變換函數并展開獲得內卷核(K×K×1)。

        計算內卷積

        進行乘和操作,即先把內卷核拉成K×K×C,與對應位置相乘,再將K×K個1×1×C相加,代替原來位置的像素,完成內卷積計算。

        特性

        權重自適應

        通過將權重自適應地分配到不同的位置,對不同信息量的特征進行優先級排序。(常規卷積對于不同的位置,都是應用一樣權重)

        建模上下文

        在更廣闊的空間中聚合上下文,從而克服對遠距離依賴建模的困難。(常規卷積通常使用小卷積核,感受野有限)

        共享內卷核

        通過共享內卷核,可以減少卷積核的冗余信息。

        總結

        大多數的卷積結構都是在精度-參數量-計算量這三個維度上進行不同的側重取舍。兩個矛盾:

        追求計算效率的卷積結構由于計算預算較低,無論是限制卷積層的深度,還是限制了卷積的寬度,不可避免地會導致性能的下降。

        追求精度提升的卷積結構由于其引入過多的卷積運算或其他額外的操作(如注意力),勢必會增大內存或計算開銷,從而影響模型的容量和整體的訓練或推理速度。

        一個設計的原則就是我們如何在不增加額外參數量的情況下,盡可能利用有效的信息或者從降低冗余空間信息的角度出發,來提高模型的計算效率和卷積提取特征的能力。不知道大家看出來了沒有,其實大多數的結構都是基于 Split-Transform-Merge 的架構進行改造的。Split指的是分組,可以按需要劃分為N組,N=1,2,3...。然后對每一組做一個Transform,即轉換,這里可以是利用門控/注意力機制去增強,也可以是利用池化等操作去擴大感受野,亦或是其他操作等等。最后再利用某種機制(如殘差)將多組結果合并起來作為輸出。可以看出,大多數卷積都是基于STM架構針對每個環節進行設(魔)計(改)。

        關于更多的卷積源碼現已整理歸檔,有興趣的讀者可以自行進行到github庫下載,后面有更優秀的卷積變體也會持續更新。【代碼鏈接:https://github.com/CVHuber/Convolution,歡迎Star!】

        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: 深度學習

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 扶风县| 哈尔滨市| 汝城县| 台东县| 西乌| 沙雅县| 湘乡市| 原平市| 磐安县| 三台县| 江油市| 洪雅县| 建德市| 建昌县| 普宁市| 胶州市| 仁布县| 临夏市| 安新县| 海伦市| 扶风县| 胶南市| 宁津县| 盖州市| 鄱阳县| 扎兰屯市| 宣威市| 苏尼特左旗| 凤山县| 扬州市| 惠来县| 奉化市| 浠水县| 和平区| 泾川县| 峨山| 白玉县| 凤庆县| 太和县| 望奎县| 都兰县|