天天看點

使用Graph進行視覺識别

使用Graph進行視覺識别

圖卷積

文章目錄

  • ​​Introduction​​
  • ​​Graphs come to rescue​​
  • ​​Semantic Segmentation​​
  • ​​Graph Convolution Units (GCU)​​
  • ​​圖投影​​
  • ​​圖卷積​​
  • ​​格拉夫重新投影​​
  • ​​架構和實作​​

Introduction

卷積神經網絡在視覺識别任務中取得了巨大的成功。本文部分我cularly專注于語義分割。使用 CNN 背後的邏輯是圖像具有局部性,即彼此靠近的像素更相關。CNN 能夠通過卷積運算捕捉到這一點,考慮的局部區域(正式稱為感受野)取決于核心大小。圖像中還存在有助于視覺識别任務的長期依賴關系。為此,概念是堆疊可能會在理論上增加感受野的卷積層。是以現在長距離和短距離依賴都被考慮在内,把網絡放在訓練上,你很容易得到結果!

但我相信你很清楚,理論和實踐相比對的情況并不多。最近發表的一篇論文(羅文傑等人)表明感受野不随卷積層的數量線性增長,而且它們受到嚴重限制。此外,感受野取決于各種其他因素,例如初始化方案。那麼解決方法是什麼呢?

Graphs come to rescue

如果我們能夠将圖像分成多個區域并使用這些區域來提取特征并進一步處理圖像會怎樣。除此之外,區域之間也将存在依賴關系,這将有助于獲得遠端依賴關系。所有這一切都可以使用圖像的圖形表示來實作。

廣義上講,圖中的所有頂點将代表圖像中的不同區域。邊緣将表示區域之間的關系或相似性。

使用Graph進行視覺識别

圓圈代表具有代表該區域的相應特征向量的區域。邊緣是區域之間的相似性。

Semantic Segmentation

語義分割是為每個像素配置設定一個它所屬的類的任務。一個基本的技術是有一個編碼器,然後是一個解碼器,其輸出将是像素級别的配置設定。

細分是如何工作的?讓我們舉一個非常基本的例子,假設有一個圖像隻由紅色、藍色、綠色組成,如圖所示

使用Graph進行視覺識别

圖1

圖 1 并假設這些顔色代表一些對象。現在假設誰想要将圖像分割為由顔色表示的三個對象。你需要什麼特征向量來做到這一點?對此,隻有顔色就足夠了。如果我們說特征向量,那麼每個特征向量的深度為 3;對于紅色 [0,0,1],對于藍色 [1,0,0],對于綠色 [0, 1, 0]。如您所見,這些特征足以将圖像分割為 3 個區域。現在考慮現實生活中的圖像,例如圖 2 中給出的圖像。你能隻使用顔色來完成任務嗎?沒有權利。我們需要圖像中存在的每個對象的特征表示,将其與其他對象分開并使相似的對象更接近,這是編碼器進入圖檔的地方。它将彩色圖像表示轉換為某種潛在空間表示,其中同一對象的特征更近,不同對象的特征彼此遠離。顯然,編碼器需要訓練。一旦我們在一些潛在空間中擁有分離不同對象的特征,我們就需要将資訊傳播到像素級别,這就是解碼器發揮作用的地方。

讓我們了解圖如何在語義分割中發揮作用。一旦使用編碼器提取特征向量,圖就會發揮作用。考慮圖2中的圖像。圖像從上到下依次為實際圖像、ground truth、FCN分割、GCU分割。在這張圖檔中,當使用 FCN 時,枕頭和床類的機率非常接近。是以,您可以在 Fig2 中看到枕頭和床已合并。

現在假設一個圖形表示跟随一個編碼器。由編碼器産生的圖像的特征向量表示被強制劃分為多達 8 個區域(即 8 個頂點的圖形)] 如果我說在損失方面,如果頂點為空,則損失會更高,即沒有像素配置設定給它。在這種情況下,在教育訓練的初始階段,枕頭和床也将配置設定到同一班級。但是當我們進一步訓練網絡時,每個特征向量都被配置設定給一個頂點,即沒有頂點是空的。圖像将在圖形表示中分割的可能區域是地面實況中的區域。是以,在訓練結束時枕頭和床将被分成兩個不同的區域。通過乘以一些權重來進一步處理配置設定給頂點的特征,并且所得特征向量與來自編碼器的特征向量一起被進一步用于分割。是以圖形表示進一步改進了圖像的特征表示。

可能發生的一件顯而易見的事情是在将圖像劃分為多個區域時對圖像進行過度分割。但是過度分割的區域會在卷積等進一步操作後重新組合。

現在的問題是如何将圖像的基于網格的表示轉換為這種圖形表示并學習圖形表示的參數,答案是圖卷積單元(GCU)。

使用Graph進行視覺識别

Graph Convolution Units (GCU)

就像卷積在網格狀結構上運作一樣,GCU 在圖狀結構上運作。GCU有3個主要步驟

圖投影

圖投影:在這一步中,圖像的網格狀表示被轉換為圖形表示。該圖由以下參數參數化:

  • V:圖中頂點的數量,這意味着圖像将被分割的區域數量。
  • W:代表區域的特征向量。形狀為(d,V),其中d為特征向量的次元
  • 方差:它是配置設定給特定頂點的所有像素沿每個次元的方差。形狀為 (d, V),其中 d 是特征向量的次元。

V是固定的,W和方差是在訓練期間學習的。假設有一個高度為 H 和寬度為 W 的圖像的二維特征圖,并且每個元素的次元為 d。計算屬于每個頂點的每個特征向量的機率,進而得到機率矩陣 Q。 下面的等式用于計算機率:

使用Graph進行視覺識别

其中 xᵢⱼ 是二維特征圖的 iᵗʰ 行和 jᵗʰ 列的特征向量,wₖ 是表示 kᵗʰ 區域(頂點)的特征,σₖ 是沿頂點 k 的所有次元的方差。現在,通過取殘差的權重平均來計算所有頂點的特征編碼。殘差越多,它在計算編碼特征中的貢獻就越小。使用下面給出的方程:

使用Graph進行視覺識别

其中 zₖ 是編碼特征。鄰接矩陣由 ZᵀZ 計算,它給出了不同頂點之間的餘弦相似度。這一步總共計算了3件事

  • 機率矩陣 Q,形狀 ( HW, d)
  • 編碼特征 Z,形狀 (d, V)
  • 鄰接矩陣 A,形狀 (V, V) - 區域之間相似性的表示,是以它捕獲圖像中的遠端依賴關系。
使用Graph進行視覺識别

圖卷積

這一步類似于卷積的前向步驟,即在生成的圖上進行卷積。使用下面給出的等式:

使用Graph進行視覺識别

其中 W g 是形狀的權重矩陣 (d, dₒᵤₜ)。如您所見,方程中有一個鄰接矩陣 A,在計算新的編碼特征時會考慮遠端依賴關系。是以新的編碼特征取決于所有區域(A)和目前編碼特征(Z)。要閱讀有關圖卷積的資訊,請參閱本文和本文。這些文章中提供了非常容易了解且足夠的資訊。

格拉夫重新投影

最後,圖形被轉換回該格子狀結構,以可視化或做進一步的操作。方程如下

使用Graph進行視覺識别

架構和實作

所使用的架構是預訓練的 ResNet 50/101,在最後兩層添加了擴張,是以輸出被下采樣了 8。緊随其後的是 GCU。在原始實作中,4 個 GCU 的輸出連接配接到 ResNet 的輸出,如下圖所示。

  • 使用 ResNet50 dilated,在 ADE20K 上預訓練,可在此處獲得。ResNet50 的輸出深度為 2048。
  • GCU 遵循 ResNet50。在論文中,連接配接了 4 個 GCU 單元,但由于計算能力有限,我隻使用了 1 個具有 16 個頂點的 GCU。我編寫了一個通用代碼,是以您可以輕松修改 4 個 GCU 的代碼。要了解有關 GCU 實作的更多詳細資訊,請參閱我的下一篇文章。
  • 在這種情況下,d 是 2048,dₒᵤₜ 是 256。連接配接後的輸出深度為 2048(來自 ResNet50)+ 256= 2304
  • 接下來是雙線性上采樣操作,然後是 1 個卷積層。
  • 在饋送到網絡之前,圖像被調整為 512×512 的大小。
  • 由于計算有限,我使用了批量大小 1 并訓練了 120 個 epoch,每個 epoch 有 1000 次疊代。
  • 使用 SGD 的動量為 0.9。學習率從 0.01 開始,随着訓練的進行而衰減
  • 目前,該模型使用 2 個 GPU。一個 GPU 專用于 ResNet,另一個用于所有其他計算,如 GCU、上采樣和卷積。

繼續閱讀