Pyramid Vision Transformer, PVT(ICCV 2021)原理與代碼解讀

paper:Pyramid Vision Transformer: A Versatile Backbone for Dense Prediction without Convolutions

official implementation:GitHub - whai362/PVT: Official implementation of PVT series

存在的問題

現有的 Vision Transformer (ViT) 主要設計用于圖像分類任務,難以直接用于像素級密集預測任務,如目標檢測和分割。這是因為存在以下問題

  1. 低分辨率輸出:傳統的Vision Transformer(ViT)在處理密集預測任務(如目標檢測和語義分割)時,輸出分辨率較低,難以獲得高質量的像素級別預測。
  2. 高計算和內存開銷:ViT在處理大尺寸輸入圖像時,計算和內存開銷較高,限制了其在實際應用中的效率。

本文的創新點

為了解決上述問題,作者提出了 Pyramid Vision Transformer (PVT), PVT結合了卷積神經網絡的金字塔結構和Transformer的全局感受野,旨在克服傳統Transformer在處理密集預測任務時遇到的分辨率低、計算和內存開銷大的問題。它可以作為 CNN 骨干網絡的替代品,用于多種下游任務,包括圖像級預測和像素級密集預測。具體包括:

  1. 金字塔結構:PVT引入了金字塔結構,可以生成多尺度的特征圖,這對于密集預測任務是有益的。
  2. 空間縮減注意力層(SRA):為了處理高分辨率特征圖并減少計算/內存成本,作者設計了 SRA 層來替代傳統的多頭注意力 (MHA) 層。
  3. 純Transformer骨干:PVT 是一個沒有卷積的純 Transformer 骨干網絡,可以用于各種像素級密集預測任務,并與 DETR 結合構建了一個完全無需卷積的目標檢測系統。

實際效果

  • PVT 在多個下游任務上進行了廣泛的實驗驗證,包括圖像分類、目標檢測、實例和語義分割等,并與流行的 ResNets 和 ResNeXts 進行了比較。
  • 實驗結果表明,在參數數量相當的情況下,PVT 在 COCO 數據集上使用 RetinaNet 作為檢測器時,PVT-Small 模型達到了 40.4 的 AP(平均精度),超過了 ResNet50+RetinaNet(36.3 AP)4.1 個百分點。
  • PVT-Large 模型達到了 42.6 的 AP,比 ResNeXt101-64x4d 高出 1.6 個百分點,同時參數數量減少了 30%。
  • 這些結果表明 PVT 可以作為 CNN 骨干網絡的一個有效的替代,用于像素級預測,并推動未來的研究。

方法介紹

Overall Architecture

PVT的整體結構如圖3所示

和CNN backbone類似,PVT也有四個stage來生成不同尺度的特征圖。所有stage都有一個相似的架構,包括一個patch embedding層和 \(L_i\) 個Transformer encoder層。

在第一個stage,給定大小為 \(H\times W\times 3\)?的輸入圖片,我們首先將其劃分為 \(\frac{HW}{4^2}\)?個patch,每個大小為4x4x3。然后將展平的patch送入一個線性映射層得到大小為 \(\frac{HW}{4^2}\times C_1\)?的輸出。然后將輸出和位置編碼一起進入有 \(L_1\)?層的Transformer encoder,得到的輸出reshape成大小為 \(\frac{H}{4}\times \frac{W}{4}\times C_1\) 的特征圖 \(F_1\)。同樣的方式,以前一個stage的輸出特征圖作為輸入,我們得到特征圖 \(F_2,F_3,F_4\),相對于原始輸入圖片的步長分別為8,16,32。用了特征圖金字塔 \(\{F_1,F_2,F_3,F_4\}\),我們的方法可以很容易地應用于大多數下游任務,包括圖像分類、目標檢測和語義分割。

Feature Pyramid for Transformer

和CNN backbone用不同stride的卷積來得到不同尺度特征圖不同,PVT使用一個漸進式shrinking策略,通過patch embedding層來控制特征圖的尺度。?

我們用 \(P_i\) 來表示第 \(i\) 個stage的patch size,在stage \(i\) 的開始,我們首先將輸入特征圖 \(F_{i-1}\in \mathbb{R}^{H_{i-1}\times W_{i-1}\times C_{i-1}}\)?均勻地劃分成 \(\frac{H_{i-1}W_{i-1}}{P_i^2}\)?個patch,然后將每個patch展平并映射得到一個 \(C_i\)?維的embedding。在線性映射后,embedded patch的大小為 \(\frac{H_{i-1}}{P_i}\times \frac{W_{i-1}}{P_i}\times C_i\),其中寬高比輸入小了 \(P_i\) 倍。

這樣,我們就可以在每個stage靈活地調整特征圖的尺度,從而將Transformer構建成金字塔結構。

Transforme Encoder

由于PVT需要處理高分辨率(stride-4)的特征圖,我們提出了一種spatial-reduction attention(SRA)來替換encoder中傳統的multi-head attention(MHA)。

和MHA類似,SRA的輸入包括一個query \(Q\),一個key \(K\),一個value \(V\)。不同的是SRA在attention operation之前減小了 \(K\) 和 \(V\) 的大小,如圖4所示,這大大減少了計算和內存的開銷。

stage \(i\) 的SRA如下

其中 \(Concat(\cdot)\) 是拼接操作。\(W^{Q}_j\in \mathbb{R}^{C_i\times d_{head}},W^{K}_j\in \mathbb{R}^{C_i\times d_{head}},W^{V}_j\in \mathbb{R}^{C_i\times d_{head}},W^O\in \mathbb{R}^{C_i\times C_i}\)?是線性映射參數。\(N_i\) 是stage \(i\) 中attention層的head數量,所以每個head的維度(即\(d_{head}\))等于 \(\frac{C_i}{N_i}\)。\(SR(\cdot)\) 是降低輸入序列(即 \(K\) 或 \(V\))空間維度的操作,如下:

其中 \(\mathbf{x}\in\mathbb{R}^{(H_iW_i)\times C_i}\)?表示一個輸入序列,\(R_i\) 表示stage \(i\)?中attention層的reduction ratio。\(Reshape(\mathbf{x},R_i)\)?是將輸入序列 \(\mathbf{x}\)?reshape成大小為 \(\frac{H_iW_i}{R^2_i}\times (R^2_iC_i)\)?的序列的操作。\(W_S\in \mathbb{R}^{(R^2_iC_i)\times C_i}\)?是一個linear projection,它將輸入序列的維度降低到?\(C_i\)。\(Norm(\cdot)\)?是layer normalization。和原始的Transformer一樣,attention operation按下式計算

通過上述公式我們可以發現,MSA的計算/內存開銷是MHA的 \(\frac{1}{R^2}\),因此MSA可以在有限的資源下處理更大的輸入特征圖或序列。

代碼解析

見PVT v2的代碼解析?PVT v2 原理與代碼解析-CSDN博客

實驗結果?

模型涉及到的一些超參總結如下:

  • \(P_i\):stage \(i\) 的patch size
  • \(C_i\):stage \(i\)?的輸出通道數
  • \(L_i\):stage \(i\)?中的encoder層數
  • \(R_i\):stage \(i\)?中SRA的reduction ratio
  • \(N_i\):stage \(i\)?中SRA的head數量
  • \(E_i\):stage \(i\)?中FFN層的expansion ratio

作者設計了一系列的PVT模型,具體配置如表1

和其它SOTA模型在ImageNet的結果對比如表2所示

用RetinaNet上和其它backbone的結果對比如表3所示,可以看到PVT不同大小的模型與ResNet系列相比,參數更少精度更高。

在語義分割模型Semantic FPN上PVT也超越了對應的ResNet

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/24027.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/24027.shtml
英文地址,請注明出處:http://en.pswp.cn/web/24027.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++結合ffmpeg獲取聲音的分貝值

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言一、分貝是什么?1.功率量2.場量 二、實際操作1.分析wav文件2.讀取麥克風 總結 前言 最近面對一個需求,就是需要傳遞聲音文件到模型里推…

鏈表的回文結構OJ

鏈表的回文結構_牛客題霸_牛客網對于一個鏈表,請設計一個時間復雜度為O(n),額外空間復雜度為O(1)的算法,判斷其是否為。題目來自【牛客題霸】https://www.nowcoder.com/practice/d281619e4b3e4a60a2cc66ea32855bfa?tpId49&&tqId29370&rp1&a…

CodeMeter助力Hilscher,推動實現全球智能制造連接解決方案

Hilscher的旗艦店為開放工業4.0聯盟(OI4)社區提供了應用商店的便捷和開放性,將這一概念引入工業領域。該商店依托CodeMeter的許可證管理和加密保護,為工業用戶提供了豐富的應用和解決方案庫,滿足他們在車間自動化和連接…

2020年06月C語言二級真題

計算矩陣邊緣元素之和 題目描述 輸入一個整數矩陣,計算位于矩陣邊緣的元素之和。 所謂矩陣邊緣的元素,就是第一行和最后一行的元素以及第一列和最后一列的元素。 輸入格式 第一行分別為矩陣的行數n和列數m,兩者之間以一個空格分開。 接下來輸…

WPF中讀取Excel文件的內容

演示效果 實現方案 1.首先導入需要的Dll(這部分可能需要你自己搜一下) Epplus.dll Excel.dll ICSharpCode.SharpZipLib.dll 2.在你的解決方案的的依賴項->添加引用->瀏覽->選擇1中的這幾個Dll點擊確定。(添加依賴) 3.然后看代碼內容 附上源碼 using Excel; usi…

計網復習資料

一、選擇題(每題2分,共40分) 1. Internet 網絡本質上屬于( )網絡。 A.電路交換 B.報文交換 C.分組交換 D.虛電路 2.在 OSI 參考模型中,自下而上第一個提供端到端服務的是( )。 A.數據鏈路層 B.傳輸…

Thinkphp使用Elasticsearch查詢

在Thinkphp中調用ES,如果自己手寫json格式的query肯定是很麻煩的。我這里使用的是ONGR ElasticsearchDSL 構建 ES 查詢。ongr ElasticsearchDSL 的開源項目地址:GitHub - ongr-io/ElasticsearchDSL: Query DSL library for Elasticsearch。ONGR Elastics…

100V 15A TO-252 N溝道MOS管 HC070N10L 惠海

MOS管的工作原理是基于在P型半導體與N型半導體之間形成的PN結,通過改變柵極電壓來調整溝道內載流子的數量,從而改變溝道電阻和源極與漏極之間的電流大小。由于MOS管具有輸入電阻高、噪聲小、功耗低等優點,它們在大規模和超大規模集成電路中得…

package.json中resolutions的使用場景

文章目錄 用途配置示例使用方法注意事項和peerDependencies有什么不同peerDependenciesresolutions 總結 ?創作者:全棧弄潮兒 🏡 個人主頁: 全棧弄潮兒的個人主頁 🏙? 個人社區,歡迎你的加入:全棧弄潮兒的…

git【工具軟件】分布式版本控制工具軟件

一、Git 的介紹 git軟件的作用:管理軟件開發項目中的源代碼文件。 常用功能: 倉庫管理、文件管理、分支管理、標簽管理、遠程操作 功能指令: add,commit,log,branch,tag,remote…

Ubuntu Linux LTS 24.04 AMD64 桌面版安裝記錄

下載iso aria2c -x 4 -s 12 "https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/24.04/ubuntu-24.04-desktop-amd64.iso" "https://mirrors.163.com/ubuntu-releases/24.04/ubuntu-24.04-desktop-amd64.iso" "https://mirrors.zju.edu.cn/ubuntu…

[pyradiomics][python]pyradiomics所有whl文件下載地址匯總

源碼地址:https://github.com/AIM-Harvard/pyradiomics pyradiomics是一個開源的Python軟件包,專門用于從醫學影像中提取高通量的定量特征,這些特征被稱為影像組學(Radiomics)特征。以下是關于pyradiomics的詳細介紹: 一、基本概…

華為端云一體化開發 (起步1.0)(HarmonyOS學習第七課)

官方文獻: 為豐富HarmonyOS對云端開發的支持、實現端云聯動,DevEco Studio推出了云開發功能,開發者在創建工程時選擇云開發模板,即可在DevEco Studio內同時完成HarmonyOS應用/元服務的端側與云側開發,體驗端云一體化協…

大數據面試題第二期*6

題1、Namenode掛了怎么辦? 方法一:將SecondaryNameNode中數據拷貝到namenode存儲數據的目錄。 方法二:使用importCheckpoint選項啟動namenode守護進程,從而將SecondaryNameNode中數據拷貝到namenode目錄中。 題2、Hadoop 的namenode 宕機怎么…

論文代碼解讀STPGNN

1.前言 本次代碼文章來自于《2024-AAAI-Spatio-Temporal Pivotal Graph Neural Networks for Traffic Flow Forecasting》,基本模型結構如下圖所示: 文章講解視頻鏈接 代碼開源鏈接 接下來就開始代碼解讀了。 2.代碼解讀 class nconv(nn.Module):de…

NDIS Filter開發-網絡數據的傳輸

和NIC小端口驅動不同的是,無需考慮網絡數據具體是如何傳輸的,只需要針對NBL進行處理即可。Filter驅動程序可以啟動發送請求和接收指示,或“過濾”其他驅動程序的請求和指示。Filter模塊堆疊在微型端口適配器上。 驅動程序堆棧中的Filter模塊…

谷粒商城實戰(033 業務-秒殺功能4-高并發問題解決方案sentinel 1)

Java項目《谷粒商城》架構師級Java項目實戰,對標阿里P6-P7,全網最強 總時長 104:45:00 共408P 此文章包含第326p-第p331的內容 關注的問題 sentinel(哨兵) sentinel來實現熔斷、降級、限流等操作 騰訊開源的tendis&#xff0c…

ctfshow web

【nl】難了 <?php show_source(__FILE__); error_reporting(0); if(strlen($_GET[1])<4){echo shell_exec($_GET[1]); } else{echo "hack!!!"; } ?> //by Firebasky //by Firebasky ?1>nl //先寫個文件 ?1*>b //這樣子會把所有文件名寫在b里…

JSON 無法序列化

JSON 無法序列化通常出現在嘗試將某些類型的數據轉換為 JSON 字符串時&#xff0c;這些數據類型可能包含不可序列化的內容。 JSON 序列化器通常無法處理特定類型的數據&#xff0c;例如日期時間對象、自定義類實例等。在將數據轉換為 JSON 字符串之前&#xff0c;確保所有數據都…

clickhouse學習筆記(三)常見表引擎

目錄 一、 MergeTree系列引擎 1、MergeTree 數據TTL &#xff08;1&#xff09; 列級別 TTL &#xff08;2&#xff09; 表級別 TTL 存儲策略 2、ReplacingMergeTree 3、CollapsingMergeTree 4、VersionedCollapsingMergeTree 5、SummingMergeTree 6、AggregatingMe…