深入卷積神經網絡:高級卷積層原理和計算的可視化

2020-12-04 deephub

在深度計算機視覺領域中,有幾種類型的卷積層與我們經常使用的原始卷積層不同。在計算機視覺的深度學習研究方面,許多流行的高級卷積神經網絡實現都使用了這些層。這些層中的每一層都有不同於原始卷積層的機制,這使得每種類型的層都有一個特別特殊的功能。

在進入這些高級的卷積層之前,讓我們先快速回顧一下原始的卷積層是如何工作的。

原始卷積層

在原始的卷積層中,我們有一個形狀為WxHxC的輸入,其中W和H是每個feature map的寬度和高度,C是channel的數量,基本上就是feature map的總數。卷積層會有一定數量的核,核會對這個輸入進行卷積操作。內核的數量將等於輸出feature map中所需通道的數量。基本上,每個內核都對應於輸出中的一個特定的feature map,並且每個feature map都是一個通道。

核的高度和寬度是由我們決定的,通常,我們保持3x3。每個內核的深度將等於輸入的通道數。因此,對於下面的例子,每個內核的形狀將是(wxhx3),其中w和h是內核的寬度和高度,深度是3,因為在這種情況下,輸入有3個通道。

在本例中,輸入有3個通道,輸出有16個通道。因此在這一層共有16個內核,每個內核的形狀是(wxhx3)。

高級的卷積層

我們將在本教程中涵蓋的高級卷積層的列表如下:

深度可分離的卷積反卷積空洞卷積分組卷積深度可分離的卷積層

在深度可分離卷積層中,我們試圖極大地減少在每個卷積層中執行的計算數量。這一整層實際上被分為兩部分:

i)深度卷積

ii)逐點卷積

深度卷積

深度卷積的關鍵點在於,每個核函數都是應用在單個輸入通道上,而不是同時應用所有的輸入通道。因此,每個內核都是形狀(w*h*1)的,因為它將應用於單個通道。內核的數量將等於輸入通道的數量,因此,如果我們有W*H*3大小的輸入,我們將有3個單獨的W*H* 1內核,每個內核將應用於輸入的單個通道。因此,輸出也將具有與輸入相同數量的通道,因為每個內核將輸出單個feature map。讓我們看看深度卷積部分是如何工作的:

如果我們有一個C通道的輸入,那麼這一層的深度卷積部分的輸出也會有C通道。接下來是下一部分。這一部分的目的是改變頻道的數量,因為隨著我們深入了解CNN,我們經常希望增加每一層輸出的頻道數量。

逐點卷積

逐點卷積將把深度卷積的中間C通道輸出轉換為具有不同數量通道的feature map。為了做到這一點,我們有幾個1\s1的內核,它們在這個中間feature map塊的所有通道上進行卷積。因此,每個1\1內核也將有C通道。每個內核將輸出一個單獨的feature map,因此我們將得到的內核數量與我們希望輸出的通道數量相等。讓我們看看這是如何工作的。

這就是深度可分離卷積層的整個過程。基本上,在深度卷積的第一步,每個輸入通道都有一個核函數然後將它們與輸入進行卷積。這樣的結果輸出將是一個feature map塊,它具有與輸入相同數量的通道。在逐點卷積的第二步中,我們有幾個1*1的核,並將它們與中間特徵映射塊進行卷積。我們將根據我們希望輸出的通道數量來選擇內核的數量。

這一層比原來的卷積層要輕量得多。這是因為,在第一步中,我們沒有使用巨大的卷積在所有輸入通道上的內核,而是使用單通道的內核,這將會小得多。然後在下一步,當我們試圖改變通道的數量時,我們使用了對所有通道進行卷積的內核,但是這些內核是1*1的,因此它們也要小得多。本質上,我們可以把深度可分離卷積看作是把原來的卷積層分成兩部分。第一部分使用具有較大空間區域(寬度和高度)但只有一個通道的內核,第二部分使用跨越所有通道的內核,但它們有較小的空間區域。

深度可分離的卷積層在行動網路中使用,因為這樣CNN有更少的參數,以便他們可以在行動裝置上使用。它們也被用於Xception CNN架構中。

反卷積層

通常在卷積層中,feature maps的空間面積(width and height)在每層之後會減小或保持不變。但有時我們想增加空間面積。這些增加空間面積而不是減少空間面積的特殊層稱為反卷積層。有兩種主要類型的反卷積層:

轉置卷積

上採樣

兩者在某些方面是相似的,但也有一些差異。本質上,其目的是在應用卷積之前,通過在feature map中引入更多的像素來增加空間面積。填充這些新像素值的方式形成了轉置卷積和上採樣之間的主要區別。添加新像素的方式如下:

在調整feature map的大小時,我們可以改變擴充比例,但通常情況下,我們做的是2倍的擴充。這樣,feature map的高度和寬度會翻倍,因此像素的總數是原始feature map的4倍。

轉置卷積

在轉置卷積中,我們只是用0的值填充所有增加的像素。這有點像在feature map的原始像素之間添加填充。

將所有添加的像素用0代入後,再對放大後的feature map進行普通卷積。這就是我們如何在對feature map執行卷積操作的同時增加它的大小。

上採樣

對於上採樣層,我們在添加像素的位置複製原始像素值。因此每個像素將被複製4次如果我們做的是一個2倍擴充。從技術上講,如果我們只考慮上採樣層,在對feature map進行放大後就不存在卷積。但是我們通常在上採樣層之後加上卷積層這樣網絡就有了一些學習能力因為上採樣層本身沒有任何參數。

這兩層在網絡神經網絡中被廣泛使用,網絡神經網絡試圖輸出與原始輸入相同大小的feature map。一般情況下,會有一些普通的卷積和池化層,這會減小feature map的大小。在這之後,我們將引入反卷積層,將大小增加回原來的大小。語義分割CNNs、U-Net、GANs等使用反卷積層。

空洞卷積Dilated (Atrous) Convolution

在研究界中,空洞卷積也被稱為伸縮卷積。在空洞卷積中,我們本質上試圖增加每個核的面積,同時保持每個核的元素數量完全相同。

對於擴張卷積,我們基本上取核函數在進行卷積運算之前在核函數的元素之間加上間隔。通過這樣做,內核的接受區域會增加,而參數的數量會相同。

與普通卷積層相比,它看起來是這樣的:

可以看到,內核中的元素數量保持不變,但是應用內核的有效面積從3*3增加到5*5。我們還可以改變核的膨脹率,這本質上意味著核元素之間的間隙將有多寬。對於上面例子中的膨脹核,膨脹率為2。默認的卷積核的膨脹率為1,基本上意味著核元素之間沒有間隙。

當我們想讓卷積應用於更大的區域,同時又能節省計算成本時,我們就使用了擴張卷積。如果我們想用一個普通的卷積層覆蓋5*5的面積,那麼我們需要一個5*5面積的核,也就是25個元素。然而,如果我們使用擴張率為2的擴張卷積,我們可以用9個元素覆蓋相同的區域。除此之外,內核的接受區域也增加了,使得它們能夠捕捉到在輸入特徵圖中出現的更細的細節。

分組卷積

在分組卷積中,基本的概念是我們將輸入中的信道分成相等的組。然後,我們將分配相同數量的內核給每一組。每個內核將只應用於其各自組中的通道,而不是應用於輸入的所有通道。

例如,如果我們有一個有4個通道的輸入特徵圖,並且我們希望總共有2組,那麼每組都將有2個通道。假設每一組有4個內核。每個內核的深度將為2,因為它們將只應用於每個組,而不是整個輸入。將兩組的輸出特徵圖連接在一起,形成最終的輸出特徵圖。因此,在本例中,每組將輸出4個feature map,因此輸出的channel總數為8。讓我們看看這個例子的可視化解釋:

對於分組卷積,我們本質上是在每一層並行地執行卷積。這增加了模型在通過網絡進行反向傳播時可以採取的路徑數量。除此之外,它還減少了該層的計算成本,因為每個內核將擁有更少的參數,並且將應用於輸入中的更少的通道。這就是我們使用組合卷積的原因。這些在ResNext架構中使用。

作者:Harsha Bommana

deephub翻譯組

相關焦點

  • PyTorch可視化理解卷積神經網絡
    如果你是一個深度學習愛好者,你可能早已聽說過這種神經網絡,並且可能已經使用一些深度學習框架比如caffe、TensorFlow、pytorch實現了一些圖像分類器。然而,這仍然存在一個問題:數據是如何在人工神經網絡傳送以及計算機是如何從中學習的。為了從頭開始獲得清晰的視角,本文將通過對每一層進行可視化以深入理解卷積神經網絡。
  • 梯度上升可視化卷積神經網絡
    不過這樣的方法是我們讓輸入的圖像儘量與卷積核希望看到的東西一樣,通過該層卷積核的損失和梯度進行上升補充,對輸入的原圖進行填充細節,最後得到可視化卷積核圖。可視化所有卷積核圖可視化卷積核是本例子最有趣的部分,也是筆者最喜歡的部分。通過分析CNN網絡模型中的卷積核,我們將會看到每一層卷積核到底提取的是什麼樣的內容、紋理、特徵。
  • 揭秘卷積神經網絡熱力圖:類激活映射
    全文共2280字,預計學習時長4分鐘目前在可視化方面,我們已經掌握了許多不同的技術。本文將介紹在卷積神經網絡(CNN)中,針對圖像的某些部位可視化從而做出判斷的不同技術。類激活映射(CAM)是一種生成熱力圖的技術,用於突出圖像的類的特定區域。熱力圖效用下面是一個典型的熱力圖:
  • 卷積神經網絡數學原理解析
    事實上,我們每天都在使用計算機視覺——當我們用面部解鎖手機或在社交媒體上發照片前使用自動修圖。卷積神經網絡可能是這一巨大成功背後最關鍵的構建模塊。這一次,我們將加深理解神經網絡如何工作於CNNs。出於建議,這篇文章將包括相當複雜的數學方程,如果你不習慣線性代數和微分,請不要氣餒。我的目標不是讓你們記住這些公式,而是讓你們對下面發生的事情有一個直觀的認識。
  • 華人博士卷積網絡可視化項目火了:點滑鼠就能看懂的掃盲神器
    Convolutional Neural Network,中文譯為「卷積神經網絡」。這個常見但有些深奧的詞彙,只可意會,不能言傳。如果打開教材,會看到這樣一些解釋:卷積層是深度神經網絡在處理圖像時十分常用的一種層。當一個深度神經網絡以卷積層為主體時,我們也稱之為卷積神經網絡。
  • 神奇GIF動畫讓你秒懂各種深度學習卷積神經網絡操作原理
    打開APP 神奇GIF動畫讓你秒懂各種深度學習卷積神經網絡操作原理 深度學習思考者 發表於 2017-11-15 18:58:34
  • 卷積神經網絡超詳細總結
    卷積神經網絡的低隱層是由卷積層和最大池採樣層交替組成,高層是全連接層對應傳統多層感知器的隱含層和邏輯回歸分類器。第一個全連接層的輸入是由卷積層和子採樣層進行特徵提取得到的特徵圖像。最後一層輸出層是一個分類器,可以採用邏輯回歸,Softmax回歸甚至是支持向量機對輸入圖像進行分類。卷積神經網絡結構包括:卷積層,降採樣層,全連結層。
  • 卷積神經網絡(CNN)新手指南
    現在,讓我們回到數學可視化部分。當我們在輸入的左上角有了這種濾波器後,它會在哪個區域的過濾器和像素值之間計算乘積。現在讓我們以一個我們要分類的圖像為例,把我們的過濾器放在左上角。進一步深入網絡現在展示一個傳統的卷積神經網絡結構,還有其他層在這些層之間穿插轉換。
  • 卷積神經網絡理解(一):濾波器的意義
    卷積神經網絡的發展二. 卷積神經網絡的重要性三. 卷積神經網絡與圖像識別四.濾波器一.卷積神經網絡的發展卷積神經網絡受到視覺細胞研究的啟發,1962年,Hubel和Wiesel發現初級視覺皮層中的神經元會響應視覺環境中特定的簡單特徵(比如有向的邊等)。
  • 斯坦福ICLR 2018錄用論文:高效稀疏Winograd卷積神經網絡| ICLR 2018
    引言卷積神經網絡在許多機器學習應用中體現出巨大優勢。其計算性能和功耗主要由卷積過程中乘法操作的數量決定。但卷積神經網絡的巨大計算量限制了其在行動裝置上的應用。輸出塊 S 由以下公式計算得到當 p=4 時的計算如下圖所示。值得注意的是,我們完全擯棄了時域的卷積核。因為 ReLU 是和前一層的卷積層綁定的,Winograd 域的 ReLU 操作實際上是從第二層開始的。需要指出,新提出的卷積神經網絡架構和普通的卷積神經網絡在數學上不等價。
  • 一文讀懂卷積神經網絡工作原理
    卷積神經網絡(Convolutional Neural Network, CNN)是人工神經網絡的一種,是當下語音分析和圖像識別領域的研究熱點。這篇文章用最簡明的語言和最直觀的圖像,帶你入門CNN。準備好了嗎?
  • 深度學習入門:淺析卷積神經網絡
    至今已有數種深度學習方法,如卷積神經網絡(CNN)、自編碼神經網絡(包括Auto encoder和Sparse Coding)和深度置信網絡(DBN),並在各個領域中取得了極好的效果。CNN訓練結果的可視化,因此提前定義相應函數。
  • 圖像識別技術——卷積神經網絡CNN詳解
    前言卷積神經網絡不同於神經網絡,在圖片處理這方面有更好的表現。本文主要對神經網絡和卷積神經網絡做了簡要的對比,著重介紹了卷積神經網絡的層次基礎,同時也簡要介紹了卷積神經網絡參數更新方式和其優缺點,並結合具體實例對卷積神經網絡的工作方式做了介紹。
  • 基於卷積神經網絡的目標檢測算法簡介
    什麼是卷積神經網絡?卷積神經網絡是一個層次模型,主要包括輸入層,卷積層,池化層、全連接層以及輸出層。卷積神經網絡是專門針對圖像而設計,主要特點在於卷積層的特徵是由前一層的局部特徵通過卷積共享的權重得到。
  • 卷積神經網絡(CNN)介紹與實踐
    - 來源:http://cs231n.github.io/classification/為了「教會」一種算法如何識別圖像中的對象,我們使用特定類型的人工神經網絡:卷積神經網絡(CNN)。他們的名字源於網絡中最重要的一個操作:卷積。卷積神經網絡受到大腦的啟發。
  • 給你一個卷積神經網絡工作原理最直觀的解釋
    卷積神經網絡(Convolutional Neural Network, CNN)是人工神經網絡的一種,是當下語音分析和圖像識別領域的研究熱點。這篇文章用最簡明的語言和最直觀的圖像,帶你入門CNN。準備好了嗎?Let’s go——我們先從最基礎的內容說起。對二維數位訊號(圖像)的操作,可以寫成矩陣形式。
  • 使用Keras構建具有自定義結構和層次圖卷積神經網絡
    來源:DeepHub IMBA本文約3600字,建議閱讀5分鐘本文為你介紹了如何構建具有自定義結構和層次的神經網絡:Keras中的圖卷積神經網絡(GCNN)。如何構建具有自定義結構和層次的神經網絡:Keras中的圖卷積神經網絡(GCNN)在生活中的某個時刻我們會發現,在Tensorflow Keras中預先定義的層已經不夠了!我們想要更多的層!我們想要建立一個具有創造性結構的自定義神經網絡!幸運的是,通過定義自定義層和模型,我們可以在Keras中輕鬆地執行此任務。
  • 大話卷積神經網絡CNN,小白也能看懂的深度學習算法教程,全程乾貨...
    如下圖所示:重點來了,什麼是卷積神經網絡?百度百科中的定義是 卷積神經網絡(Convolutional Neural Networks, CNN)是一類包含卷積計算且具有深度結構的前饋神經網絡(Feedforward Neural Networks),是深度學習(deep learning)的代表算法之一,擅長處理圖像特別是圖像識別等相關機器學習問題。
  • 卷積神經網絡算法結構分析及其工作效率的影響因素
    從卷積神經網絡自身的角度考慮,其在卷積層之間採用了共享參數,使得計算過程中對於計算資源的佔用大大縮小,同時也在訓練參數方面實現了有效的簡化,提升了整體運算過程的效率。除此以外,此種計算方式幾乎不需要對圖像展開預處理或者特徵值提取操作,這也成為卷積神經網絡在圖像識別領域優於其他算法的顯著之處。
  • YJango的卷積神經網絡——介紹
    圖片識別--卷積神經網絡卷積神經網絡就是讓權重在不同位置共享的神經網絡。局部連接在卷積神經網絡中,我們先選擇一個局部區域,用這個局部區域去掃描整張圖片。 局部區域所圈起來的所有節點會被連接到下一層的一個節點上。為了更好的和前饋神經網絡做比較,我將這些以矩陣排列的節點展成了向量。