本文詳細(xì)總結(jié)CNN中各類卷積,旨在指導(dǎo) domain-specific 更好的模型設(shè)計,包括標(biāo)準(zhǔn)卷積,分組卷積(Group Conv),深度可分離卷積(Depthwise Separable Conv),轉(zhuǎn)置卷積(Transposed Conv),空洞卷積(Dilated Conv),可變形卷積(Deformable Conv),和 特征重標(biāo)定技術(shù)(Squeeze-and-Excitation)。
關(guān)于CNN網(wǎng)絡(luò)的總結(jié)可以去康康這篇良心博客哦:《一文總結(jié)經(jīng)典卷積神經(jīng)網(wǎng)絡(luò)CNN模型》
標(biāo)準(zhǔn)卷積
這沒什么好說的,回顧一下卷積的基本概念:
- Kernel Size: 內(nèi)核大小定義了卷積的 視域 。2D的常見選擇是3,即3x3像素。
- Stride: 定義了內(nèi)核在遍歷圖像時的 步長 。雖然它的默認(rèn)值通常是1,但我們可以使用2的步長來對圖像進(jìn)行采樣,類似于MaxPooling。
- Padding: 填充 定義了如何處理樣本的邊界。(padding=1,kernel size=3)的卷積將保持空間輸出維度等于輸入維度。
- Input & Output Channels: 輸入通道(I),輸出通道(O,就是該層有多少個卷積核,決定著下一層的輸入通道),該層所需的參數(shù)可以用IOK來計算,其中K等于單個內(nèi)核中單個通道的參數(shù)個數(shù)。
記住下面這個公式就行,單個維度(例如寬度或高度):
分組卷積(Group Conv)
它將輸入特征圖(input feature map)分成多個組,然后在每個組內(nèi)獨立進(jìn)行卷積操作。這種方法最初是在AlexNet中提出的,以解決當(dāng)時的GPU內(nèi)存限制問題,后來被發(fā)現(xiàn)可以增加網(wǎng)絡(luò)的表示能力并減少計算量。
在標(biāo)準(zhǔn)卷積中,卷積核會跨越所有輸入通道(input channels)進(jìn)行卷積。而在分組卷積中,假設(shè)有 G 個組,則輸入特征圖和卷積核都會被分成 G 個組。每組卷積核只在對應(yīng)的輸入特征圖組內(nèi)進(jìn)行卷積操作,因此,每個卷積核不再跨越所有輸入通道,而只跨越部分通道,理論上計算量減少 G 倍。
不過,分組卷積也有一個潛在的問題:
雖然在理論上它可以顯著降低一計算量,但是對內(nèi)存的訪問頻繁程度并未降低,且現(xiàn)有的GPU加速庫(如cuDNN)對其優(yōu)化的程度有限,因此它在效率上的提升并不如理論上顯著。
深度可分離卷積(Depthwise Separable Conv)
分組卷積的一種特例,其中每個輸入通道分配給一個組(就是 G=C,每個通道單獨一個組)。深度可分離卷積首先使用逐通道深度卷積(depthwise)提取空間特征,然后使用 1×1 逐點卷積(pointwise)合并這些特征。這種方法首次被廣泛認(rèn)知是通過MobileNet架構(gòu)和Xception架構(gòu),以顯著減少計算量和模型大小。
計算量分析
所以:
標(biāo)準(zhǔn)卷積的計算量(即乘法操作的數(shù)量)大約為:
深度可分離卷積的總計算量為 深度卷積 和 逐點卷積 之和:
深度可分離卷積的計算效率提升可以用如下的比例表示:
簡化后得到:
Cout一般很大,可以忽略,而Dk一般是3,所以一般至少能 節(jié)省9倍 計算量。
在MobileNet V2中,網(wǎng)絡(luò)做了一點改進(jìn):
先點卷積擴(kuò)大通道數(shù),以提取更多的特征,再應(yīng)用深度可分離卷積;還有加了殘差結(jié)構(gòu)(圖中沒有展示)。
轉(zhuǎn)置卷積(Transposed Conv)
轉(zhuǎn)置卷積可以理解為 反卷積,可以視為標(biāo)準(zhǔn)卷積的逆過程,在 圖像生成(如生成對抗網(wǎng)絡(luò)GANs和變分自編碼器VAEs)、圖像分割 等領(lǐng)域中非常有用,因為這些應(yīng)用通常需要從一個較小的特征表示恢復(fù)到較大的圖像尺寸。
在標(biāo)準(zhǔn)卷積中,卷積核在輸入特征圖上滑動,對局部區(qū)域進(jìn)行加權(quán)求和,從而產(chǎn)生更小的輸出特征圖(除非特別采用零填充等手段)。
相反,轉(zhuǎn)置卷積通過給定的步長在輸入特征圖中插入零,然后應(yīng)用一個卷積核,其效果是 “擴(kuò)展” 了輸入特征圖。
具體地,它首先將輸入特征圖中的每個元素視為小的特征圖,并在這些特征圖之間插入由步長確定的零填充,然后對這個新的、被擴(kuò)展的特征圖應(yīng)用標(biāo)準(zhǔn)卷積。這樣,轉(zhuǎn)置卷積實際上是通過在原始輸入元素之間插入空白(通常是零)來“逆轉(zhuǎn)”標(biāo)準(zhǔn)卷積的壓縮效果。
普通卷積和轉(zhuǎn)置卷積所處理的基本任務(wù)是不同的:
- 前者主要用來做特征提取,傾向于壓縮特征圖尺寸;
- 后者主要用于對特征圖進(jìn)行擴(kuò)張或上采樣。
盡管轉(zhuǎn)置卷積是上采樣的有效手段,但它可能引入特定的偽影,如棋盤狀偽影(checkerboard artifacts)。
這是由于步長和卷積核大小不匹配時輸出特征圖中值的不均勻分布導(dǎo)致的。即當(dāng)內(nèi)核大?。ㄝ敵龃翱诖笮。┎荒鼙徊椒敳奎c之間的間距)整除時,反卷積具有不均勻的重疊。
為了緩解這一問題,設(shè)計轉(zhuǎn)置卷積層時需要仔細(xì)選擇卷積核大小和步長,或考慮使用其他上采樣技術(shù)(如雙線性上采樣后跟一個 1×1 卷積)作為替代。
空洞卷積(Dilated Conv)
也稱為擴(kuò)張卷積,旨在增加卷積層的感受野(即卷積操作覆蓋的輸入?yún)^(qū)域大?。┒辉黾宇~外的參數(shù)或計算量。這種方法通過在卷積核的元素之間插入空洞(即零填充),實現(xiàn)了在不丟失分辨率的情況下捕獲更廣泛的上下文信息,也用于做像素級的預(yù)測,解決pixel-wise輸出模型。
在標(biāo)準(zhǔn)卷積中,卷積核的元素是緊密排列的。而在空洞卷積中,卷積核被“擴(kuò)張”了,卷積核中的元素之間插入了指定數(shù)量的空間(零填充),這個數(shù)量由一個參數(shù)——空洞率(dilation rate)決定。空洞率為1表示標(biāo)準(zhǔn)卷積(沒有空洞),空洞率大于1表示在卷積核元素之間插入的空洞數(shù)量。
工作原理:
假設(shè)空洞率為 d,則在卷積核的每個元素之間將插入 d?1 個零。這意味著,對于一個 3×3 的卷積核,當(dāng)空洞率為2時,實際上卷積操作會在一個 5×5 的區(qū)域上進(jìn)行,但只有原 3×3 卷積核對應(yīng)的位置參與計算,其他位置被認(rèn)為是零。這樣,卷積核覆蓋的實際區(qū)域更大,從而增大了感受野,而不需要增加更多的參數(shù)或計算成本。
應(yīng)用:
- 語義分割:FCN等網(wǎng)絡(luò)就是利用空洞卷積來增加感受野,以提高分割的精確度。
- 音頻處理:在音頻生成和語音識別中,如Wavenet,空洞卷積可以幫助模型捕捉到更長的序列依賴。
雖然空洞卷積有其優(yōu)勢,但在使用時也需要注意一些問題,如:
- 感受野爆炸:隨著空洞率的增加,感受野可能迅速擴(kuò)大,可能導(dǎo)致模型覆蓋過多的輸入?yún)^(qū)域,從而捕獲到過多的無關(guān)信息或噪聲。
- 棋盤效應(yīng)(Gridding Effect):當(dāng)連續(xù)使用高空洞率的卷積層時,可能會出現(xiàn)棋盤效應(yīng),即模型只能看到輸入數(shù)據(jù)的一部分,導(dǎo)致性能下降。為避免這一點,設(shè)計網(wǎng)絡(luò)時應(yīng)仔細(xì)考慮空洞率的選擇和層次結(jié)構(gòu)的安排。
可變形卷積(Deformable Conv)
傳統(tǒng)的卷積操作在進(jìn)行特征提取時使用固定形狀的卷積核,這可能限制了模型處理圖像中的幾何變換(如物體的形狀變化、尺度變化和旋轉(zhuǎn))的能力??勺冃尉矸e通過引入了可學(xué)習(xí)的偏移量,使得卷積核的形狀和位置可以動態(tài)地調(diào)整以適應(yīng)輸入圖像的幾何變化。這種方法最初是在《Deformable Convolutional Networks》一文中提出的,目的是增強(qiáng)卷積神經(jīng)網(wǎng)絡(luò)對于尺度、旋轉(zhuǎn)和形狀變化的適應(yīng)能力。
這使得卷積核能夠自適應(yīng)地調(diào)整其形狀來更好地擬合圖像的局部特征。
正常卷積規(guī)律的采樣 9 個點(綠點),在正常的采樣坐標(biāo)上加上一個位移量(藍(lán)色箭頭),可變形卷積可以進(jìn)行尺度變換,比例變換和旋轉(zhuǎn)變換,即上面介紹的空洞卷積是它的一個特例。
具體地:
- 可變形卷積層通過額外的卷積層來預(yù)測每個采樣點的偏移量,這些偏移量是相對于卷積核中每個位置的標(biāo)準(zhǔn)固定網(wǎng)格位置的。偏移量是可以通過反向傳播算法學(xué)習(xí)和優(yōu)化的,使得網(wǎng)絡(luò)能夠在訓(xùn)練過程中自動學(xué)習(xí)到如何變形卷積核以適應(yīng)具體任務(wù)的需求。
- 由于偏移后的位置通常不會正好落在輸入特征圖的像素上,可變形卷積使用雙線性插值來計算偏移位置處的輸入值,確保操作的可微性,允許梯度的正常反向傳播。
簡單來說:首先通過一個小卷積層(綠色)的輸出得到可變形卷積所需要的位移量,然后將其作用在卷積核(藍(lán)色)上,達(dá)到可變形卷積的效果。
優(yōu)勢:
- 幾何變換適應(yīng)性:可變形卷積能夠使卷積核適應(yīng)輸入特征圖中的局部幾何變換,提高了模型處理圖像形變的能力。
- 增強(qiáng)的特征提取:通過動態(tài)調(diào)整卷積核,模型能夠捕捉到更加豐富和精細(xì)的特征,有助于提升諸如目標(biāo)檢測、語義分割等視覺任務(wù)的性能。
同樣思路也能用在池化上,搞成可變形池化:
通過標(biāo)準(zhǔn)的興趣區(qū)域池化(綠色)獲得興趣區(qū)域?qū)?yīng)的特征,該特征通過一個全連接層得到興趣區(qū)域每個部位的位移量。用該位移作用在可變形興趣區(qū)域池化(藍(lán)色)上,以獲得不局限于興趣區(qū)域固定網(wǎng)格的特征。
雖然可變形卷積提供了強(qiáng)大的幾何變換適應(yīng)能力,但它也引入了額外的計算和參數(shù),這可能會增加模型的訓(xùn)練難度和計算成本。因此,在實際應(yīng)用中需要根據(jù)任務(wù)的具體需求和資源限制權(quán)衡其使用。
特征重標(biāo)定技術(shù)(Squeeze-and-Excitation)
ImageNet 2017 競賽 Image Classification 任務(wù)的冠軍模型SENet(Squeeze-and-Excitation Networks)中的特征重標(biāo)定策略,通過引入一個稱為“Squeeze-and-Excitation”(SE)模塊的結(jié)構(gòu),對卷積神經(jīng)網(wǎng)絡(luò)中的特征通道進(jìn)行動態(tài)重標(biāo)定。這種機(jī)制能夠顯著提高網(wǎng)絡(luò)對特征重要性的適應(yīng)能力,增強(qiáng)了模型的學(xué)習(xí)和表達(dá)能力,進(jìn)而提高網(wǎng)絡(luò)的性能。
這種卷積方法創(chuàng)新地對特征維度進(jìn)行改進(jìn),通過自動學(xué)習(xí)評估每個特征通道的重要性,從而在千余個卷積核中區(qū)分并強(qiáng)化對當(dāng)前任務(wù)有利的特征,同時抑制不太相關(guān)的信息。
Squeeze階段:
SE模塊首先通過全局平均池化(Global Average Pooling)對每個特征通道進(jìn)行“壓縮”,將每個通道的空間維度(即寬度和高度)壓縮為一個單一的數(shù)值,生成一個長度為C的向量,這個向量中的每個值反映了相應(yīng)特征在全局上的平均激活程度,這一步驟有助于模塊捕捉到通道級的全局信息。
Excitation階段:
緊接著,通過一個全連接層、ReLU激活、另一個全連接層和sigmoid激活來進(jìn)行“激勵”操作,這兩層作為網(wǎng)絡(luò)的一部分需要額外學(xué)習(xí)其參數(shù),這個過程生成每個通道的權(quán)重系數(shù)。這些權(quán)重系數(shù)用于動態(tài)地調(diào)整每個通道的重要性,使網(wǎng)絡(luò)能夠?qū)W⒂诟杏玫奶卣鳌?/p>
重標(biāo)定:
最后,原始特征圖通過與這些學(xué)習(xí)到的通道權(quán)重相乘,進(jìn)行重標(biāo)定,即按通道進(jìn)行加權(quán),從而增強(qiáng)有用的特征并抑制不重要的特征。