5.10.8 Transformer in Transformer

Transformer iN Transformer (TNT)。具體來說,我們將局部補丁(例如,16×16)視為“視覺句子”,并將它們進一步劃分為更小的補丁(例如,4×4)作為“視覺單詞”。每個單詞的注意力將與給定視覺句子中的其他單詞一起計算,計算成本可以忽略不計。單詞和句子的特征將被聚合以增強表示能力。

1. 介紹

Transformer是一種主要基于自注意力機制的神經網絡,它可以提供不同特征之間的關系。

CV 任務中的輸入圖像和真實標簽之間存在語義差距。ViT 將給定??圖像劃分為多個局部塊作為視覺序列。然后,可以自然地計算任意兩個圖像塊之間的注意力,以便為識別任務生成有效的特征表示。

文章貢獻

一種用于視覺識別的新型 Transformer-in-Transformer (TNT) 架構。為了增強視覺 Transformer 的特征表示能力,首先將輸入圖像劃分為多個塊作為“視覺句子”,然后進一步將它們分成子補丁作為“視覺單詞”。

除了用于提取視覺句子的特征和注意力的傳統Transformer Block之外,我們進一步將子變壓器嵌入到架構中以挖掘較小視覺單詞的特征和細節。

具體來說,每個視覺句子中視覺單詞之間的特征和注意力是使用共享網絡獨立計算的,因此增加的參數量和 FLOP(浮點運算)可以忽略不計。然后,單詞的特征將被聚合成相應的視覺句子。該類令牌還通過全連接頭用于后續視覺識別任務。通過所提出的TNT模型,我們可以提取細粒度的視覺信息并提供更多細節的特征。

2. 方法

2.1 預先工作

多頭自注意力

在自注意力模塊中,輸入 X\in\mathbb{R}^{n\times d}被線性變換為三個部分,查詢Q\in\mathbb{R}^{n\times d_{k}},鍵K\in\mathbb{R}^{n\times d_{k}}和值V\in\mathbb{R}^{n\times d_{v}}。其中 n 是序列長度,dd_kd_v 分別是輸入、查詢(鍵)和值的維度。縮放點積注意力:Attention(Q,K,V)=softmax(\frac{QK^{T}}{\sqrt{d_{k}}})V最后,使用線性層來產生輸出。多頭自注意力將查詢、鍵和值拆分為 h 個部分并并行執行注意力函數,然后將每個頭的輸出值連接并線性投影以形成最終輸出。

多層感知器(MLP)

MLP 應用于自注意力層之間,用于特征變換和非線性:

MLP(X)=FC(\sigma(FC(X))),\quad FC(X)=XW+b其中W和b分別是全連接層的權重和偏置項,σ(·)是激活函數。

層歸一化(LN)

層歸一化 是 Transformer 中穩定訓練和更快收斂的關鍵部分。LN 應用于每個樣本x\in R^d

LN(x)=\frac{x-\mu}{\delta}\circ\gamma+\beta,其中\mu \in R, \delta \in R分別是特征的平均值和標準差,\circ是逐元素點積,

\gamma\in R^d,\beta\in R^d是可學習的變換參數。

2.2 Transformer in Transformer

給定一個 2D 圖像,我們將其均勻分割為 n 個補丁\mathcal{X}=[X^{1},X^{2},\cdots,X^{n}]\in\mathbb{R}^{n\times p\times p\times3},其中

(p,p)是每個圖像塊的分辨率。ViT 僅利用標準轉換器來處理補丁序列,這會破壞補丁的局部結構,Transformer-in-Transformer (TNT) 架構來學習圖像中的全局和局部信息。

在 TNT 中,我們將補丁視為代表圖像的視覺句子。每個補丁又分為m個子補丁,即一個視覺句子由一系列視覺單詞組成:X^i\to[x^{i,1},x^{i,2},\cdots,x^{i,m}],其中x^{i,j}\in\mathbb{R}^{s\times s\times3}是第 i 個視覺句子的第 j 個視覺詞;(s,s)是子塊的大小,j=1,2,\cdots,m

通過線性投影,我們將視覺單詞轉換為一系列單詞嵌入:

Y^{i}=[y^{i,1},y^{i,2},\cdots,y^{i,m}],\quad y^{i,j}=FC(Vec(x^{i,j}))

其中y^{i,j}\in\mathbb{R}^c是第 j 個詞嵌入,c 是詞嵌入的維度,Vec(·) 是向量化操作。


在 TNT 中,我們有兩個數據流,其中一個數據流跨視覺句子進行操作,另一個數據流處理每個句子內的視覺單詞。對于詞嵌入,我們利用Transformer Block來探索視覺單詞之間的關系:

Y{'}_{l}^{i}=Y_{l-1}^{i}+MSA(LN(Y_{l-1}^{i}))

Y_{l}^{i}=Y{'}_{l}^{i}+MLP(LN(Y{'}_{l}^{i}))

其中l=1,2,\cdots,L是第?l?個塊的索引,L是堆疊塊的總數。第一個塊Y_o^i的輸出就是Y^i。變換后圖像中的所有詞嵌入均為\mathcal{Y}_{l}=[Y_{l}^{1},Y_{l}^{2},\cdots,Y_{l}^{n}],可以看作內部Transformer Block,表示為T_{in}。該過程通過計算任意兩個視覺單詞之間的交互來構建視覺單詞之間的關系。

對于句子級別,創建句子嵌入記憶來存儲句子級別表示的序列:

\mathcal{Z}_{0}=[Z_{\mathrm{class}},Z_{0}^{1},Z_{0}^{2},\cdots,Z_{0}^{n}]\in\mathbb{R}^{(n+1)\times d}?其中Z_{class}是類似于ViT的類標記,并且它們都被初始化為零。在每一層中,詞嵌入的序列通過線性投影變換到句子嵌入的域中,并添加到句子嵌入中:Z_{l-1}^i=Z_{l-1}^i+FC(Vec(Y_l^i)),其中Z_{l-1}^i\in\mathbb{R}^d。使用標準Transformer Block來轉換句子嵌入:

\mathcal{Z}^{\prime}{}_{l}=\mathcal{Z}_{l-1}+MSA(LN(\mathcal{Z}_{l-1}))

\mathcal{Z}_{l}=\mathcal{Z}^{\prime}{}_{l}+MLP(LN(\mathcal{Z}^{\prime}{}_{l}))

外部變壓器塊 T_{out} 用于對句子嵌入之間的關系進行建模。

TNT塊的輸入和輸出包括視覺詞嵌入和句子嵌入。\mathcal{Y}_l,\mathcal{Z}_l=TNT(\mathcal{Y}_{l-1},\mathcal{Z}_{l-1})


在TNT 塊中,內部 Transformer 塊用于對視覺單詞之間的關系進行建模以進行局部特征提取,外部 Transformer 塊從句子序列中捕獲內在信息。最后,分類標記用作圖像表示,并應用全連接層進行分類。

位置編碼

空間信息是圖像識別的重要因素。對于句子嵌入和詞嵌入,我們都添加相應的位置編碼來保留空間信息,使用標準的可學習一維位置編碼。具體來說,每個句子都分配有一個位置編碼:

\mathcal{Z}_0\leftarrow\mathcal{Z}_0+E_{sentence},其中E_{sentence}\in\mathbb{R}^{(n+1)\times d}是句子位置編碼。對于句子中的視覺單詞,每個單詞嵌入都添加一個單詞位置編碼:Y_0^i\leftarrow Y_0^i+E_{word}, i=1,2,\cdots,n

其中E_{word}\in\mathbb{R}^{m\times c}是跨句子共享的單詞位置編碼。這樣,句子位置編碼可以保持全局空間信息,而詞位置編碼用于保持局部相對位置

2.3 復雜性分析

標準變壓器塊包括兩部分,即多頭自注意力和多層感知器。MSA的FLOPs為

2nd(d_{k}+d_{v})+n^{2}(d_{k}+d_{v}),MLP的FLOPs為2nd_v rd_v。其中 r 是MLP中隱藏層的維度擴展比。總體而言,標準變壓器塊的 FLOPs 為

\mathrm{FLOPs}_T=2nd(d_k+d_v)+n^2(d_k+d_v)+2nddr。由于 r 通常設置為4,并且輸入、鍵(查詢)和值的維度通常設置為相同,因此FLOPs計算可以簡化為\mathrm{FLOPs}_T=2nd(6d+n)

FLOPs值越高,說明模型或算法的計算復雜度越高,可能需要更強大的計算資源來支持其運行

?參數個數為\mathrm{Params}_T=12dd

TNT 塊由三部分組成:內部變壓器塊 Tin、外部變壓器塊 Tout 和線性層。 Tin和Tout的計算復雜度分別為2nmc(6c + m)和2nd(6d + n)。線性層的 FLOPs 為 nmcd。總共,TNT 塊的 FLOP 為

\mathrm{FLOPs}_{TNT}=2nmc(6c+m)+nmcd+2nd(6d+n)。TNT塊的參數復雜度計算為

\mathrm{Params}_{TNT}=12cc+mcd+12dd

TNT 塊與標準 Transformer 塊的 FLOPs 比率約為 1.14×。同樣,參數比例約為1.08×。隨著計算和內存成本的小幅增加,我們的 TNT 模塊可以有效地對局部結構信息進行建模,并在準確性和復雜性之間實現更好的權衡。

2.4 網絡架構

3. 實驗

3.1 數據集和實驗設置

ImageNet ILSVRC 2012 [26] 是一個圖像分類基準,由屬于 1000 個類的 120 萬張訓練圖像和 50K 個驗證圖像(每類 50 張圖像)組成。數據集下載鏈接

3.2?ImageNet 上的 TNT

在TNT結構中,句子位置編碼用于維護全局空間信息,單詞位置編碼用于保留局部相對位置。

3.3 消融實驗

視覺詞的數量:

在TNT中,輸入圖像被分割成許多16×16的塊,并且每個塊進一步被分割成 m 個大小為(s, s)的子塊(視覺詞)以提高計算效率。

本文中 m 默認取值為16.

3.4 可視化

特征圖的可視化

將 DeiT 和 TNT 的學習特征可視化,以進一步了解所提出方法的效果。為了更好的可視化,輸入圖像的大小調整為 1024×1024。特征圖是通過根據塊的空間位置重塑塊嵌入來形成的

第 1 個、第 6 個和第 12 個塊中的特征圖如圖(a)所示,其中每個塊隨機采樣 12 個特征圖。與 DeiT 相比,TNT 中本地信息得到了更好的保存。我們還使用 t-SNE 對第 12 個塊中的所有 384 個特征圖進行可視化。

t-SNE算法的核心思想是將高維空間中的數據點映射到低維空間中,使得相似的數據點在低維空間中靠近彼此,而不相似的數據點則被遠離。

可視化了 TNT 的像素級嵌入。對于每個補丁,我們根據詞嵌入的空間位置重塑詞嵌入以形成特征圖,然后按通道維度對這些特征圖進行平均。對應于14×14塊的平均特征圖

注意力圖的可視化。我們的 TNT 塊中有兩個自注意力層,即內部自注意力層和外部自注意力層,分別用于建模視覺單詞和句子之間的關系。內部變壓器中不同查詢的注意力圖。對于給定的查詢視覺詞,具有相似外觀的視覺詞的注意力值較高,表明它們的特征將與查詢交互更相關。

?

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

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

相關文章

信號和槽基本概念

🐌博主主頁:🐌?倔強的大蝸牛🐌? 📚專欄分類:QT??感謝大家點贊👍收藏?評論?? 目錄 一、概述 二、信號的本質 三、槽的本質 一、概述 在 Qt 中,用戶和控件的每次交互過程稱…

Bootloader+升級方案

隨著設備的功能越來越強大,系統也越來越復雜,產品升級也成為了開發過程不可或缺的一道程序。在工程應用中,如何在不更改硬件的前提下通過軟件的方式實現產品升級。通過Bootloader來實現固件的升級是一種極好的方式,Bootloader是單…

I2CKD : INTRA- AND INTER-CLASS KNOWLEDGE DISTILLATION FOR SEMANTIC SEGMENTATION

摘要 本文提出了一種新的針對圖像語義分割的知識蒸餾方法,稱為類內和類間知識蒸餾(I2CKD)。該方法的重點是在教師(繁瑣模型)和學生(緊湊模型)的中間層之間捕獲和傳遞知識。對于知識提取&#x…

12個乒乓球,有一個次品,不知輕重,用一臺無砝碼天平稱三次,找出次品,告知輕重?

前言 B站上看到個視頻:為什么有人不認可清北的學生大多是智商高的? 然后試了下,發現我真菜 自己的思路(失敗) 三次稱重要獲取到12個乒乓球中那個是次品,我想著將12個小球編號,分為四組,每組…

yo!這里是socket網絡編程相關介紹

目錄 前言 基本概念 源ip&&目的ip 源端口號&&目的端口號 udp&&tcp初識 socket編程 網絡字節序 socket常見接口 socket bind listen accept connect 地址轉換函數 字符串轉in_addr in_addr轉字符串 套接字讀寫函數 recvfrom&&a…

Java入門基礎學習筆記2——JDK的選擇下載安裝

搭建Java的開發環境: Java的產品叫JDK(Java Development Kit: Java開發者工具包),必須安裝JDK才能使用Java。 JDK的發展史: LTS:Long-term Support:長期支持版。指的Java會對這些版…

pycharm報錯Process finished with exit code -1073740791 (0xC0000409)

pycharm報錯Process finished with exit code -1073740791 (0xC0000409) 各種垃圾文章(包括chatgpt產生的垃圾文章),沒有給出具體的解決辦法。 解決辦法就是把具體報錯信息顯示出來,然后再去查。 勾選 然后再運行就能把錯誤顯示…

MetaRTC-play拉流客戶端代碼分析

渲染使用opengl,音頻播放使用alsa。 當點擊播放按鈕后,以此調用的類如下,開始建立rtc連接,AV解碼,音頻渲染,視頻渲染。 如果想去除QT,改為cmake工程管理,去掉渲染部分即可。 下方是…

VUE+PrintJS打印-邊距設置問題(提供解決方案)

VUE打印我們一般用printJS,雖然它也提供了邊距設置,但不管怎么調,感覺都不對,也換其他組件試過,沒啥區別,并不能解決問題。 今天又發來個需求,要求設置打印頁面的上、下、左、右邊距&#xff0…

Linux---vim編輯器(續寫)

5. vim正常模式命令集 插入模式 按「i」切換進入插入模式「insert mode」, 按“i”進入插入模式后是從光標當前位置開始輸入文件; 按「a」進入插入模式后,是從目前光標所在位置的下一個位置開始輸入文字; 按「o」進入插入模式…

從頭開始學Spring—01Spring介紹和IOC容器思想

目錄 1.Spring介紹 1.1Spring概述 1.2特性 1.3五大功能模塊 2.IOC容器 2.1IOC思想 ①獲取資源的傳統方式 ②反轉控制方式獲取資源 ③DI 2.2IOC容器在Spring中的實現 ①BeanFactory ②ApplicationContext ③ApplicationContext的主要實現類 1.Spring介紹 1.1Sprin…

Linux系統一步一腳印式學習

Linux操作系統具有許多特點和優勢。首先,它是開放源代碼的,也就意味著任何人都可以對源代碼進行查看和修改。其次,可以同時支持多個用戶且可以同時執行多個任務,此外,Linux操作系統也非常穩定和安全。相對于其他操作系…

銀川崗位外包有邦芒 讓崗位空缺不再成為難題

銀川邦芒人力崗位外包服務,專為企業量身定制,涵蓋從崗位人員招聘到勞動關系終止的全方位、無風險外包解決方案。借助我們的崗位外包,企業可以在確保用工穩定的同時,將更多資源聚焦于核心業務的發展與創新。 我們提供全面、高效的外…

安全測試|常見SQL注入攻擊方式、影響及預防

SQL注入 什么是SQL注入? SQL注入是比較常見的網絡攻擊方式之一,主要攻擊對象是數據庫,針對程序員編寫時的疏忽,通過SQL語句,實現無賬號登錄,篡改數據庫。 SQL注入簡單來說就是通過在表單中填寫包含SQL關鍵…

SSD-60S施耐德電機保護器EOCR-SSD

EOCR主要產品有電子式電動機保護繼電器,電子式過電流繼電器,電子式欠電流繼電器,電子式欠電壓繼電器,其它保護裝置,電流互感器。EOCR-SSD 10-60A電機保護器 系列型號: EOCRSSD-05SEOCRssD-30s EOCRSSD-60SEOCRSSD-0…

Linux文件管理(超詳細講解)

Linux文件管理 一、管理文件1.目錄和路徑2.目錄操作命令3.文件操作命令4.文件內容操作命令 一、管理文件 1.目錄和路徑 文件與目錄簡介 文件是Linux操作系統用來存儲信息的基本結構,是一組信息的集合。目錄是一種特殊的文件,用來保存文件及其相關信息。…

開源即時通訊IM框架 MobileIMSDK v6.5 發布

一、更新內容簡介 本次更新為次要版本更新,進行了bug修復和優化升級(更新歷史詳見:碼云 Release Notes、Github Release Notes)。 MobileIMSDK 可能是市面上唯一同時支持 UDPTCPWebSocket 三種協議的同類開源IM框架。輕量級、高…

8種常見的CMD命令

1.怎么打開CMD窗口 步驟1:winr 步驟2:在彈出的窗口輸入cmd,然后點擊確認,就會出現一個cmd的窗口 2.CMD的8種常見命令 2.1盤符名稱冒號 說明:切換盤的路徑 打開CMD窗口這里默認的是C盤的Users的27823路徑底下&#xf…

基于微信小程序+JAVA Springboot 實現的【網上商城小程序】app+后臺管理系統 (內附設計LW + PPT+ 源碼+ 演示視頻 下載)

項目名稱 項目名稱: 基于微信小程序的網上商城 項目技術棧 該項目采用了以下核心技術棧: 后端框架/庫: Java, SSM框架數據庫: MySQL前端技術: 微信開發者工具,微信小程序框架 項目展示 5.1 管理員服務…

Mat: Unknown HPROF Version

問題:Mat 加載 android studio 導出的 hprof 文件失敗 原因:android hprof 文件不是標準的 java hprof 文件 解決辦法: 使用 android sdk 自帶的命令將 hprof 轉換成標準的 java hprof