極市導讀 通用視覺模型一般以序列的結構或者網格的結構來處理圖片信息,本文作者創新性地提出以圖的方式來處理圖片:計算機視覺的一個基本任務是識別圖像中的物體。本文提出一種基于圖表示的新型通用視覺架構ViG,這是一個在通用視覺模型方面有價值的探索。>>加入極市CV技術交流群,走在計算機視覺的最前沿 本文目錄
1 Vision GNN:把一張圖片建模為一個圖![]() 論文地址:https:///pdf/2206.00272.pdf PyTroch代碼:https://github.com/huawei-noah/Efficient-AI-Backbones MindSpore代碼:https:///mindspore/models 1.1 Vision GNN 原理分析本文提出了一種 GNN 通用視覺模型,是來自中國科學院大學,北京華為諾亞方舟實驗室的學者們在通用視覺模型方面有價值的探索。 1.1.1 背景和動機在現代計算機視覺任務中,通用視覺模型最早以 CNN 為主。近期 Vision Transformer,Vision MLP 為代表的新型主干網絡的研究進展將通用視覺模型推向了一個前所未有的高度。 不同的主干網絡對于輸入圖片的處理方式也不一樣,如下圖1所示是一張圖片的網格表示,序列表示和圖表示。圖像數據通常表示為歐幾里得空間 (Euclidean space) 中的規則像素網格,CNN 通過在圖片上進行滑動窗口操作引入平移不變形和局部性。而 Vision Transformer,Vision MLP 為代表的新型主干網絡將圖片視為圖片塊的序列,比如一般將 224×224 大小的圖片分為196個 16×16 的圖片塊。 但是無論是上面的網格表示還是序列表示,圖片都以一種非常規則的方式被建模了,也就是說,每個圖片塊之間的 '聯系' 已經固化。比如圖1中這條 '魚' 的 '魚頭' 可能分布在多個圖片塊中,這些 Patch 按照網格表示或者序列表示都沒有 '特殊' 的聯系,但是它們在語義上其實都表示 '魚頭'。這或許就是傳統的圖片建模方法的不完美之處。 本文提出以一種更加靈活的方式來處理圖片:計算機視覺的一個基本任務是識別圖像中的物體。由于圖片中的物體通常不是形狀規則的方形,所以經典的網格表示或者序列表示在處理圖片時顯得冗余且不夠靈活。比如一個對象可以被視為由很多部分的組合:例如,一個人可以粗略地分為頭部、上身、手臂和腿,這些由關節連接的部分自然形成一個圖結構。 ![]() 在網格表示中,像素或小塊僅僅通過空間位置排序。在序列表示中,2D 圖像被切分成為一系列小塊。在圖表示中,節點通過其內容鏈接起來,不受本地位置的約束。網格表示和序列表示都可以視為是圖表示的特例。因此,將一張圖片視為圖是相對于前二者更加靈活且有效。 本文基于把圖片視為圖表示的觀點,本文提出一種基于圖表示的新型通用視覺架構 ViG。將輸入圖像分成許多小塊,并將每個小塊視為圖中的一個節點。在構建好了輸入圖片的圖表征之后,作者使用 ViG 模型在所有節點之間交換信息。ViG 的基本組成單元包括兩部分:用于圖形信息處理的 GCN (圖形卷積網絡) 模塊和用于節點特征變換的 FFN (前饋網絡) 模塊。在圖像識別,目標檢測等視覺任務中證明了該方法的有效性。 1.1.2 圖片的圖表示 (Graph Representation)對于一張大小為 大小的圖片,首先分成 個 Patch。把每個 Patch 轉化成向量 ,就可以得到 ,其中, 為 embedded dimension, 。這 個 Patch 的特征可以被視為一組無序結點,表示為 。對于每個結點 ,都找到 個最近鄰結點 ,并添加一條從 ( ) 到 的邊 。 這樣就得到了一個圖,表示為 ,其中 表示所有的邊。通過這樣的方式把 Image 建模成 Graph,就可以使用 GCN 處理圖像數據了,如下圖1所示。 ![]() 1.1.3 使用 GNN 作為模型骨干總的來說,從特征 開始,作者首先構造一個圖 。GCN 層可以通過聚合來自其鄰居節點的特征來在節點之間交換信息。具體來說,GCN 的操作如下: 其中, 和 分別是聚合和更新操作的可學習的權重。具體而言,聚合操作通過聚合每一個節點周圍所有的鄰居節點的特征來計算當前節點的特征: 式中, 是節點 的相鄰節點。這里,作者采用最大相對圖卷積[1],因為它簡單有效。 則以上的圖維度的處理方法可以寫成: 。 作者進一步引入了 multi-head 的結構,聚合之后的特征 被分為 個 head: ,然后每個 head 分別通過對應的權重進行更新,最終將 個 head 的結果 concat 在一起。 多頭更新操作允許模型在多個表示子空間更新信息,有利于特征多樣性。 1.1.4 ViG BlockGCN 通過重復使用連續的幾個圖卷積層來提取圖形數據的聚集特征。Deep GCN 中的過平滑現象會降低節點特征的獨特性,并導致圖像識別的性能下降。其中,多樣性可以寫成 ,其中 。為了緩解這個問題,我們在ViG塊中引入了更多的特征變換和非線性激活。 作者在 GCN 之前和之后應用線性層,以將節點特征投影到同一域中,并增加特征多樣性。在圖形卷積后插入一個非線性激活函數以避免層特征的坍塌,得到的模塊稱為 Grapher 模塊。可以表達成: 其中, , 和 是 FC 層的權重, 是激活函數。 Transformer 中常用的 FFN 層保持一致: 在 Grapher 和 FFN 模塊中,在每個 FC 層或 GCN 層之后應用 BN,Grapher 模塊和 FFN 模塊的堆疊構成了 ViG模塊,其用作構建網絡的基本構建單元,如上圖1所示。與 ResGCN 相比,ViG 的特征豐富度更高,如下圖2所示。 ![]() 1.1.5 模型架構在計算機視覺領域,常用的 Transformer通常具有各向同性的架構,而 CNN 更喜歡使用金字塔架構。作者為 ViG 建立了兩種網絡結構,即各向同性結構和金字塔結構。 各向同性結構 各向同性結構是指模型塊從頭到尾特征的尺寸都不發生變化。和 ViT,ResMLP 保持一致,作者設計了 ViG-Ti,ViG-S,ViG-B 三種不同的模型。節點數為 Patch 數196,為了逐漸擴大感受野,在這三個模型中,隨著層的深入,鄰居節點 的數量從9線性增加到18。默認情況下,head 數設置為 。 ![]() 金字塔結構 金字塔結構模型的特征圖隨著網絡的深入而逐漸變小,已經被很多視覺 Transformer 模型 (如 PVT[2],Swin [3]等) 證明是有效的性能提升的手段。因此,作者進一步建立了四個版本的金字塔 ViG 模型,如下圖4所示。 ![]() 位置編碼 為了表示節點的位置信息,作者對每個節點特征添加位置編碼向量: 式中, 。 絕對位置編碼適用于各向異性和金字塔結構。對于金字塔 ViG,作者遵循 Swin Transformer 的設計方法,進一步使用相對位置編碼。對于節點 和 ,它們之間的相對位置距離是 ,這個相對位置距離會被添加到圖的特征距離中。 1.1.5 實驗結果作者在 ImageNet 圖像分類任務和 COCO 目標檢測任務上驗證了 ViG 的有效性。不同尺寸模型的實驗設置如下。對于 COCO 目標檢測任務,作者使用 RetinaNet 和 Mask R-CNN 作為檢測框架,Pyramid ViG 作為骨干網絡。訓練策略采用 '1×' schedule。 ![]() ImageNet 圖像分類任務 具有各向同性結構的神經網絡在模型前向傳播中保持特征大小不變,易于擴展,并且有利于硬件加速。實驗結果如下圖6所示。與同樣尺寸的其他各向同性結構的 CNN,Transformer,或者 MLP 模型相比,ViG 性能更好。 ![]() 金字塔結構隨著網絡的深入,特征圖逐漸變小,可以形成多尺度的特征。作者進一步將 Pyramid ViG 模型和幾種典型的金字塔式 CNN,Transformer,MLP 模型進行比較,結果表明 ViG 系列可以超越或媲美最先進的金字塔網絡,結果如下圖7所示。這表明圖形神經網絡能很好地完成視覺任務,有潛力成為計算機視覺系統的基本組成部分。 ![]() 消融實驗 作者使用各向同性的 ViG-Ti 作為基礎架構,在 ImageNet 分類任務上進行了消融實驗。 消融實驗1:圖卷積的類型 作者測試了圖卷積的代表性變體,包含:EdgeConv,GIN,GraphSAGE 和 Max-Relative GraphConv,結果如下圖8所示。從圖8中我們可以看到不同圖卷積的 Top-1 精度優于 DeiT-Ti,表明了 ViG 架構的靈活性。其中Max-Relative 實現了 FLOPs 和精度的最佳權衡。因此本文實驗默認使用 Max-Relative GraphConv 作為圖卷積方案。 ![]() 消融實驗2:ViG 中不同模塊的影響 為了使圖形神經網絡適應視覺任務,作者在 Grapher 模塊中引入了 FC 層,并利用 FFN 塊進行特征變換,通過消融研究來評估這些模塊的效果,如下圖9所示??梢钥闯?,直接利用圖卷積進行圖像分類的效果很差。通過引入 FC 層和 FFN 來增加更多的特征變換,可以使得精度不斷提高。 ![]() 消融實驗3:neighbors 數量的影響 在構建圖的過程中,鄰居節點數 是一個控制聚集范圍的超參數。太少的鄰居會降低信息交換的幅度,而太多的鄰居會導致過平滑現象的出現。作者將 從3調至20,結果如圖10所示。我們可以看到,在9到15范圍內的鄰居節點數可以很好地執行 ImageNet 分類任務。 ![]() 消融實驗4:head 數量的影響 multi-head 操作允許 Grapher 模塊在不同的子空間中處理對應的節點特征。作者將 head 數從1調至8,結果如下圖11所示。head 數量控制著子空間的多樣性。對于不同的 head,ImageNet 上的 FLOPs 和 Top-1 精度略有不同。作者選擇 作為默認值,以實現 FLOPs 和精度之間的最佳平衡。 ![]() 目標檢測實驗結果 下圖12是 COCO val2017 上的實驗結果。為了進行公平的比較,作者使用 ImageNet 預訓練的金字塔 ViG-S 作為 RetinaNet 和 Mask R-CNN 檢測框架的主干。使用常用的 '1×' schedule 進行訓練,以 1280×800 的輸入大小計算 FLOPs。從下圖12中的結果可以看出,金字塔 ViG-S 在 RetinaNet 和 Mask R-CNN 上的表現都優于ResNet,CycleMLP 和 Swin Transformer 等主干模型。 ![]() 1.1.6 可視化結果為了更好地理解 ViG 模型是如何工作的,作者在 ViG-S 中可視化了圖結構。圖13展示的是2個不同的樣本在網絡的不同深度中的圖表示。五角星形是中心節點,顏色相同的節點是它的鄰居,作者為了更簡潔只畫了兩個頂點。這里有一個很有趣的現象:模型可以選擇內容相關的節點作為一階鄰居。在淺層中,鄰居節點傾向于基于低級和局部特征 (比如魚的顏色和背景樹木的紋理) 來選擇。在深層中,中心節點傾向于選擇語義信息更加接近的節點作為鄰居,屬于同一類別 (比如紙筒和衛生紙)。 ![]() 1.2 Vision GNN PyTorch 偽代碼1) 導入必要的庫 ![]() 2) Grapher 模塊偽代碼 ![]() ![]()
3) FFN 模塊偽代碼 Linear Transformation 操作使用了 nn.Conv2d(kernel=1) 進行實現,并在后面加上 nn.BatchNorm2d 進一步執行歸一化操作。 ![]() 總結通用視覺模型一般以序列的結構或者網格的結構來處理圖片信息,本文作者創新性地提出以圖的方式來處理圖片:計算機視覺的一個基本任務是識別圖像中的物體。由于圖片中的物體通常不是形狀規則的方形,所以經典的網格表示或者序列表示在處理圖片時顯得冗余且不夠靈活。本文提出一種基于圖表示的新型通用視覺架構 ViG。將輸入圖像分成許多小塊,并將每個小塊視為圖中的一個節點。基于這些節點構造圖形可以更好地表示不規則復雜的物體。 在構建好了輸入圖片的圖表征之后,作者使用 ViG 模型在所有節點之間交換信息。ViG 的基本組成單元包括兩部分:用于圖形信息處理的 GCN (圖形卷積網絡) 模塊和用于節點特征變換的 FFN (前饋網絡) 模塊。直接在圖像圖形結構上使用圖形卷積存在過平滑問題,性能較差。因此作者在每個節點內部引入了更多的特征變換來促進信息的多樣性。在圖像識別,目標檢測等視覺任務中證明了該方法的有效性。 參考
|
|
來自: mynotebook > 《待分類》