乾貨貼|CNN中常用的四種卷積

2021-01-15 騰訊網

卷積是深度學習中最重要的概念之一。深度學習超越了其他機器學習手段的核心就在於卷積和卷積神經網絡。這就很有必要了解常見的卷積: 一般卷積、 擴張卷積、轉置卷積、可分離卷積。

一般卷積

卷積在數學上用通俗的話來說就是輸入矩陣與卷積核(卷積核也是矩陣)進行對應元素相乘並求和,所以一次卷積的結果的輸出是一個數,最後對整個輸入輸入矩陣進行遍歷,最終得到一個結果矩陣,說白了就是一個卷積核在圖像上滑動,並求取對應元素相乘求和的過程,如下圖:

首先,一般情況下卷積層的作用都是用來自動提取圖像的一些視覺特徵,代替傳統的手動方法提取特徵不精確,不全面等缺點。常見的一般卷積操作都包括以下四個參數:

卷積核大小(Kernel Size):卷積核定義了卷積的大小範圍,在網絡中代表感受野的大小,二維卷積核最常見的就是 3*3 的卷積核,也可以根據網絡設計5*5或者7*7,甚至1*1等不同size的卷積核,來提取不同尺度的特徵。

在卷積神經網絡中,一般情況下,卷積核越大,感受野(receptive field)越大,看到的圖片信息越多,所獲得的全局特徵越好。雖說如此,但是大的卷積核會導致計算量的暴增,不利於模型深度的增加,計算性能也會降低。如上圖中卷積核的size為3*3.

步長(Stride):卷積核的步長度代表提取的精度, 步長定義了當卷積核在圖像上面進行卷積操作的時候,每次卷積跨越的長度。在默認情況下,步長通常為 1,但我們也可以採用步長是 2 的下採樣過程,類似於 MaxPooling 操作。

對於size為3的卷積核,如果step為1,那麼相鄰步感受野之間就會有重複區域;如果step為2,那麼相鄰感受野不會重複,也不會有覆蓋不到的地方;如果step為3,那麼相鄰步感受野之間會有一道大小為1顆像素的縫隙,從某種程度來說,這樣就遺漏了原圖的信息。

填充(Padding):卷積核與圖像尺寸不匹配,往往填充圖像缺失區域,如上圖,原始圖片尺寸為5*5,卷積核的大小為3*3,如果不進行填充,步長為1的話,當卷積核沿著圖片滑動後只能滑動出一個3*3的圖片出來,這就造成了卷積後的圖片和卷積前的圖片尺寸不一致,這顯然不是我們想要的結果,所以為了避免這種情況,需要先對原始圖片做邊界填充處理。

輸入和輸出通道數(Input & Output Channels):卷積核的輸入通道數(in depth)由輸入矩陣的通道數所決定;輸出矩陣的通道數(out depth)由卷積核的輸出通道數所決定。每一層卷積有多少channel數,以及一共有多少層卷積,這些暫時沒有理論支撐,一般都是靠感覺去設置幾組候選值,然後通過實驗挑選出其中的最佳值。這也是現在深度卷積神經網絡雖然效果拔群,但是一直為人詬病的原因之一。

擴張卷積

擴張卷積(Dilated Convolution)也被稱為空洞卷積或者膨脹卷積,是在標準的卷積核中注入空洞,以此來增加模型的感受野(reception field)。相比原來的正常卷積操作,除了卷積核大小,步長和填充外,擴張卷積多了一個參數:dilation rate,指的是卷積核的點的間隔數量,比如常規的卷積操作dilatation rate為1。擴張的卷積為卷積層引入另一個參數,稱為擴張率。這定義了卷積核中值之間的間距。擴張率為2的3x3內核與5x5內核具有相同的視野,而僅使用9個參數。想像一下,獲取一個5x5內核並刪除每一個第二列和第二行(間隔刪除)。如下圖,正常卷積核空洞卷積對比:

上圖左側為對0-9共10顆像素的正常3x3卷積,padding為same,stride=1的情況下,我們知道其卷積後共得到10個特徵,每個特徵的感受野均為3x3,如左側紅色的那個特徵覆蓋3,4,5三顆像素(想像二維情況下應該是3x3)。

上圖右側為對0-9共10顆像素的空洞3x3卷積,這裡的3x3是指有效區域,在padding為same,stride=1的情況下,也得到了10個特徵,但是每個特徵的感受野為5x5,如右側藍色的那個特徵覆蓋2,3,4,5,6五顆像素(想像二維情況下應該是5x5)。

這就在不丟失特徵解析度的情況下擴大了感受野,進而對檢測大物體有比較好的效果。所以總的來說,空洞卷積主要作用:不丟失解析度的情況下擴大感受野;調整擴張率獲得多尺度信息。但是對於一些很小的物體,本身就不要那麼大的感受野來說,這就不那麼友好了。

轉置卷積

轉置卷積又叫反卷積、逆卷積。不過轉置卷積是目前最為正規和主流的名稱,因為這個名稱更加貼切的描述了卷積的計算過程,而其他的名字容易造成誤導。在主流的深度學習框架中,如TensorFlow,Pytorch,Keras中的函數名都是conv_transpose。所以學習轉置卷積之前,我們一定要弄清楚標準名稱,遇到他人說反卷積、逆卷積也要幫其糾正,讓不正確的命名儘早的淹沒在歷史的長河中。

有大佬一句話總結:轉置卷積相對於卷積在神經網絡結構的正向和反向傳播中做相反的運算。其實還是不是很理解。我們先從轉置卷積的用途來理解下,轉置卷積通常用於幾個方面:

CNN可視化,通過反卷積將卷積得到的feature map還原到像素空間,來觀察feature map對哪些pattern相應最大,即可視化哪些特徵是卷積操作提取出來的;

FCN全卷積網絡中,由於要對圖像進行像素級的分割,需要將圖像尺寸還原到原來的大小,類似upsampling的操作,所以需要採用反卷積;

GAN對抗式生成網絡中,由於需要從輸入圖像到生成圖像,自然需要將提取的特徵圖還原到和原圖同樣尺寸的大小,即也需要反卷積操作。

我們先來看看卷積和反卷積的圖,簡直不要太形象。

如下圖正常卷積(convolution):

卷積核為 3x3;no padding , strides=1

轉置卷積可以理解為upsample conv.如下圖:

卷積核為:3x3; no padding , strides=1

從上面兩個圖可以看到,轉置卷積和卷積有點類似,因為它產生與假設的反卷積層相同的空間解析度。但是,對值執行的實際數學運算是不同的。轉置卷積層執行常規卷積,但恢復其空間變換。 需要注意的是:反卷積只能恢復尺寸,不能恢復數值。

可分離卷積

任何看過MobileNet架構的人都會遇到可分離卷積(separable convolutions)這個概念。但什麼是「可分離卷積」,它與標準的卷積又有什麼區別?可分離卷積主要有兩種類型:空間可分離卷積和深度可分離卷積。

空間可分離卷積

在可分離的卷積中,我們可以將內核操作分成多個步驟。讓我們將卷積表示為y = conv(x,k),其中y是輸出圖像,x是輸入圖像,k是核。簡單。接下來,假設k可以通過以下公式計算:k = k1.dot(k2)。這將使它成為可分離的卷積,因為我們可以通過用k1和k2進行2個1D卷積來得到相同的結果,而不是用k進行2D卷積。

以Sobel內核為例,它通常用於圖像處理。你可以通過乘以向量[1,0,-1]和[1,2,1] .T得到相同的內核。在執行相同操作時,這將需要6個而不是9個參數。上面的例子顯示了所謂的空間可分卷積。

空間可分卷積的主要問題是並非所有卷積核都可以「分離」成兩個較小的卷積核。這在訓練期間變得特別麻煩,因為網絡可能採用所有可能的卷積核,它最終只能使用可以分成兩個較小卷積核的一小部分。

實際上,通過堆疊1xN和Nx1內核層,可以創建與空間可分離卷積非常相似的東西。這最近在一個名為EffNet的架構中使用,顯示了有希望的結果。

深度可分離卷積

在神經網絡中,我們通常使用稱為深度可分離卷積的東西。這將執行空間卷積,同時保持通道分離,然後進行深度卷積。這裡,通過一個例子可以最好地理解它(以下參考文獻2):

以輸入圖像為12x12x3的RGB圖像為例,正常卷積是卷積核對3個通道同時做卷積。也就是說,3個通道,在一次卷積後,輸出一個數。而深度可分離卷積分為兩步:

第一步用三個卷積對三個通道分別做卷積,這樣在一次卷積後,輸出3個數。

這輸出的三個數,再通過一個1x1x3的卷積核(pointwise核),得到一個數。

所以深度可分離卷積其實是通過兩次卷積實現的。

第一步,對三個通道分別做卷積,輸出三個通道的屬性,如下圖:

第二步,用卷積核1x1x3對三個通道再次做卷積,這個時候的輸出就和正常卷積一樣,是8x8x1:

如果要提取更多的屬性,則需要設計更多的1x1x3卷積核心就可以(圖片引用自原網站。感覺應該將8x8x256那個立方體繪製成256個8x8x1,因為他們不是一體的,代表了256個屬性):

可以看到,如果僅僅是提取一個屬性,深度可分離卷積的方法,不如正常卷積。隨著要提取的屬性越來越多,深度可分離卷積就能夠節省更多的參數。

文章部分素材來源:OSC開源社區

相關焦點

  • 卷積核半徑都是奇數是什麼原因?這裡有答案
    點擊上方「AITop100」,選擇「星標」公眾號重磅乾貨,第一時間送達
  • 一位中國博士把整個CNN都給可視化了,可交互有細節,每次卷積ReLU...
    而且,這個網頁工具還可以實現交互,只要點擊其中任何一個格子——就是CNN中的「神經元」,就能顯示它的輸入是哪些、經過了怎樣細微的變化。甚至,連每一次卷積運算都能看得清。看清卷積這個CNN解釋器的使用方式也非常簡單:滑鼠戳戳戳就好了。
  • CNN 中千奇百怪的卷積方式大匯總
    原標題:CNN 中千奇百怪的卷積方式大匯總 雷鋒網按:本文原作者Xf Mao,本文原載於知乎。雷鋒網已獲得作者授權。 推薦另一篇很好的總結:變形卷積核、可分離卷積?卷積神經網絡中十大拍案叫絕的操作。
  • 自注意力可以替代CNN,能表達任何卷積濾波層
    多頭自注意力層如何表達卷積層?眾所周知,Transformer的興起,對NLP的發展起到了很大的作用。它與以往的方法,如RNN和CNN的主要區別在於,Tranformer可以同時處理輸入序列中的每個單詞。其中的關鍵,就是注意力機制。尤其是在自注意力情況下,可以無視單詞間的距離,直接計算依賴關係,從而學習一個句子中的內部結構。
  • 在多目標識別方面,maskr-cnn已經取得了一些進展
    maskr-cnn是業界首款實用的全卷積神經網絡模型,為計算機視覺中的多目標識別與自動對焦,開創性的成為計算機視覺發展的新方向。無論是基於計算機視覺的自動對焦系統、模式識別系統,還是圖像識別,maskr-cnn都是有標誌性意義的。它強調平滑準確的計算輸入、檢測框和定位點,訓練過程與特徵提取過程採用多級感受野融合技術進行自動優化提高目標解析度及精度,以及做出精度更高的語義推理判斷。
  • 華人博士卷積網絡可視化項目火了:點滑鼠就能看懂的掃盲神器
    如果打開教材,會看到這樣一些解釋:卷積層是深度神經網絡在處理圖像時十分常用的一種層。當一個深度神經網絡以卷積層為主體時,我們也稱之為卷積神經網絡。神經網絡中的卷積層就是用卷積運算對原始圖像或者上一層的特徵進行變換的層……說得很有道理,但如果將一張圖片作為輸入,這張圖片究竟會在卷積神經網絡中經歷什麼?這可真是太考驗想像力了。
  • 人工智慧之卷積神經網絡(CNN)
    而在卷積神經網絡CNN中(下面右圖),卷積層的神經元只與前一層的部分神經元節點相連,即它的神經元間的連接是非全連接的,且同一層中某些神經元之間的連接的權重w和偏移b是共享的,這樣大量地減少了需要訓練參數的數量。
  • 小白學CNN以及Keras的速成
    各種各樣的方式都有不同的人去嘗試,攻略也是一大推,這使得不少的小白直接倒在了選擇材料的路上,一直在補先修知識,待到熱情結束就放棄了學習,連卷積網絡都不知道是什麼,大大地打擊了大家的學習熱情。今天,sherlock在這裡給大家推薦一個學習材料,保證你能夠快速入門cnn,出去裝逼也能夠和別人聊幾句。這個材料是什麼呢,就是大名鼎鼎的standford的cs231n這門課程。
  • 了解CNN這一篇就夠了:卷積神經網絡技術及發展
    在不同類型的神經網絡當中,卷積神經網絡是得到最深入研究的。早期由於缺乏訓練數據和計算能力,要在不產生過擬合的情況下訓練高性能卷積神經網絡是很困難的。標記數據和近來GPU的發展,使得卷積神經網絡研究湧現並取得一流結果。本文中,我們將縱覽卷積神經網絡近來發展,同時介紹卷積神經網絡在視覺識別方面的一些應用。
  • 看了這篇文章,了解深度卷積神經網絡在目標檢測中的進展
    其中獲取候選區域的方法是常用的 selective search。在 CNN 的框架中,由於輸入圖像要經過多次卷積,那些尺寸小的物體在最後一層的卷積輸出上的特徵不能很好的描述該物體。如果用前面某一層的特徵,則能夠更好的描述小物體,用靠後的層的特徵,則能更好地描述較大的物體。
  • 入門| CNN也能用於NLP任務,一文簡述文本分類任務的7個模型
    我們將通過不同的模型(從依賴於詞袋錶徵的簡單模型到部署了卷積/循環網絡的複雜模型)了解能否得到高於 79% 的準確率!遍歷語料庫中的 80000 個單詞。對每一個單詞而言,如果這個單詞存在於 GloVe 中,我們就可以得到這個單詞的嵌入,如果不存在那就略過。
  • 要想了解卷積神經網絡,首先需要了解三種基本架構
    卷積網絡是研究關於圖像(紋理,圖像尺度等)的抽象層面的一種網絡,跟傳統網絡不同的是,它不僅可以根據一個固定尺寸圖像生成物體識別數據,還可以對圖像其他部分進行其他操作。卷積可以有多個,它的作用是「放大」和「增強」圖像的抽象空間。那麼卷積可以用於哪些場景呢?
  • 方舟生存進化:『抄家』最常用的四種套路!第四種最直接了當!
    方舟最好玩的除了蓋基地和養龍外,那就肯定是『抄家』了,對於大多方舟玩家來說,『抄家』獲得戰利品都是次要的,主要就是為了在這個過程中體驗遊戲樂趣,當然對於被『抄』的玩家來說就是一場悲劇,但生存遊戲的核心就是不能『玻璃心』玩遊戲心態很重要,尤其是生存遊戲這種,下面筆者就為各位玩家介紹四種『抄家』最常用的套路
  • 即插即用新卷積:提升CNN性能、速度翻倍
    近期,來自 Facebook AI、新加坡國立大學、奇虎 360 的研究人員聯合提出了一種新的卷積操作 (OctConv),用於替代現有的通用卷積。這款新卷積不僅佔用更少的內存和計算,還有助於提高性能。卷積神經網絡(CNN)在很多計算機視覺任務中都取得了卓越的成就,然而高準確率的背後,卻是很高的冗餘度和不可忽視的計算開銷。圖 1.
  • PyTorch可視化理解卷積神經網絡
    然而,這仍然存在一個問題:數據是如何在人工神經網絡傳送以及計算機是如何從中學習的。為了從頭開始獲得清晰的視角,本文將通過對每一層進行可視化以深入理解卷積神經網絡。神經網絡是模仿人類大腦來解決複雜問題並在給定數據中找到模式的一種方法。在過去幾年中,這些神經網絡算法已經超越了許多傳統的機器學習和計算機視覺算法。「神經網絡」是由幾層或多層組成,不同層中具有多個神經元。每個神經網絡都有一個輸入和輸出層,根據問題的複雜性增加隱藏層的個數。一旦將數據送入網絡中,神經元就會學習並進行模式識別。一旦神經網絡模型被訓練好後,模型就能夠預測測試數據。
  • 詳解目標檢測Faster R-CNN
    這種技術在遷移學習(Transfer Learning)中比較普遍,尤其是,採用在大規模數據集訓練的網絡權重,來對小規模數據集訓練分類器。然後,RPN(Region Propose Network) 對提取的卷積特徵圖進行處理。
  • 信號與系統公式大全(傅立葉變換、拉普拉斯變換、Z變換、卷積...)
    今天大家整理了信號與系統的公式大全,主要包括傅立葉變換、拉普拉斯變換、Z變換、卷積...相信我,收藏起來,今後用得上> 推薦閱讀: 數字萬用表四種妙用方法
  • 經典目標檢測方法Faster R-CNN和Mask R-CNN|基於PaddlePaddle深度...
    從圖 1 中可以看出,目標檢測主要是檢測一張圖片中有哪些目標,並且使用方框表示出來,方框中包含的信息有目標所屬類別。圖 2 與圖 1 的最大區別在於,圖 2 除了把每一個物體的方框標註出來,並且把每個方框中像素所屬的類別也標記了出來。
  • CNN中的maxpool到底是什麼原理?
    這意味著卷積後的 Feature Map 中有對於識別物體不必要的冗餘信息。 那麼我們就反過來思考,這些 「冗餘」 信息是如何產生的。 直覺上,我們為了探測到某個特定形狀的存在,用一個 filter 對整個圖片進行逐步掃描。但只有出現了該特定形狀的區域所卷積獲得的輸出才是真正有用的,用該 filter 卷積其他區域得出的數值就可能對該形狀是否存在的判定影響較小。
  • 形象理解深度學習中八大類型卷積
    本文總結了深度學習中常用的八大類型的卷積,以非常形象的方式幫助你建立直覺理解,為你的深度學習提供有益的參考。分別是單通道卷積、多通道卷積、3D卷積、1 x 1卷積、轉置卷積、擴張卷積、可分離卷積、分組卷積。