博客專欄

EEPW首頁(yè) > 博客 > 計(jì)算機(jī)視覺中的transformer模型創(chuàng)新思路總結(jié)

計(jì)算機(jī)視覺中的transformer模型創(chuàng)新思路總結(jié)

發(fā)布人:計(jì)算機(jī)視覺工坊 時(shí)間:2021-12-08 來(lái)源:工程師 發(fā)布文章

以下文章來(lái)源于CV技術(shù)指南 ,作者仿佛若有光


導(dǎo)讀

本文回顧了ViT的結(jié)構(gòu),總結(jié)了計(jì)算機(jī)視覺中的transformer的主要改進(jìn)思路:改進(jìn)分塊,改進(jìn)位置編碼,改進(jìn)Encoder,增加Decoder,并相應(yīng)介紹了相關(guān)的論文,本文的目的不在于介紹transformer現(xiàn)在有哪些模型,而在于學(xué)習(xí)借鑒別人發(fā)現(xiàn)問題并改進(jìn)的思路,從而在自己方向上提出合適且合理的改進(jìn)。 

ViT回顧

在講計(jì)算機(jī)視覺中transformer的模型創(chuàng)新總結(jié)之前,先有必要對(duì)它整體模型進(jìn)行回顧。在本文選取了最常用的ViT。

1.jpg

如圖所示,對(duì)于一張圖像,先將其分割成NxN個(gè)patches,把patches進(jìn)行Flatten,再通過一個(gè)全連接層映射成tokens,對(duì)每一個(gè)tokens加入位置編碼(position embedding),會(huì)隨機(jī)初始化一個(gè)tokens,concate到通過圖像生成的tokens后,再經(jīng)過transformer的Encoder模塊,經(jīng)過多層Encoder后,取出最后的tokens(即隨機(jī)初始化的tokens),再通過全連接層作為分類網(wǎng)絡(luò)進(jìn)行分類。

這個(gè)過程中存在很多值得改進(jìn)的空間,下面我們看看其它論文是如何思考并改進(jìn)的。以下內(nèi)容按照上面這個(gè)實(shí)現(xiàn)過程對(duì)每個(gè)步驟的改進(jìn)來(lái)排序。

改進(jìn)思路

1. 分塊的改進(jìn)

漸進(jìn)采樣式vision transformer

論文:Vision Transformer with Progressive Sampling(ICCV2021)

代碼:https://github.com/yuexy/PS-ViT

提出問題

ViT采用了一種樸素的標(biāo)記化(tokenization)方案,該方案將一幅圖像分割成一系列規(guī)則間隔的patches,這些patches被線性投影到tokens中。通過這種方式,圖像被轉(zhuǎn)換成數(shù)百個(gè)視覺tokens。

然而,這種tokens化方案的局限性是顯而易見的。

2.jpg

首先,硬分割可能會(huì)分離出一些高度相關(guān)的區(qū)域,這些區(qū)域應(yīng)該用同一組參數(shù)建模,這破壞了固有的對(duì)象結(jié)構(gòu),并使輸入patches的信息量變得較少。圖顯示貓頭被分成幾個(gè)部分,導(dǎo)致僅基于一個(gè)部分的識(shí)別挑戰(zhàn)。其次,tokens被放置在規(guī)則網(wǎng)格上,而與底層圖像內(nèi)容無(wú)關(guān)。圖顯示,大多數(shù)網(wǎng)格聚焦在不感興趣的背景上,這可能導(dǎo)致感興趣的前景對(duì)象淹沒在干擾信號(hào)中。

改進(jìn)思路

人類視覺系統(tǒng)以一種完全不同的方式組織視覺信息,而不是一次不加區(qū)別地處理整個(gè)場(chǎng)景。取而代之的是,它循序漸進(jìn)地、選擇性地將注意力集中在視覺空間的有趣部分,無(wú)論何時(shí)何地需要它,而忽略不感興趣的部分,隨著時(shí)間的推移,結(jié)合來(lái)自不同注視的信息來(lái)理解場(chǎng)景。

受上述過程的啟發(fā),論文提出了一種新的基于transformer的漸進(jìn)采樣(Progressive Sampling)模塊,該模塊能夠 學(xué)習(xí)從哪里看圖像,以緩解ViT中簡(jiǎn)單的tokens化方案帶來(lái)的問題。

3.jpg

論文提出的模塊不是從固定位置采樣,而是以迭代的方式更新采樣位置。如圖所示,在每次迭代中,當(dāng)前采樣步驟的tokens被饋送到transformer編碼層,并預(yù)測(cè)一組采樣偏移量以更新下一步的采樣位置。該機(jī)制利用transformer的能力來(lái)捕獲全局信息,通過結(jié)合本地上下文和當(dāng)前tokens的位置來(lái)估計(jì)對(duì)感興趣區(qū)域的偏移量。這樣,注意力就會(huì)像人類視覺一樣,一步一步地集中到圖像的可辨別區(qū)域。

2.相對(duì)位置編碼的反思與改進(jìn)

論文:Rethinking and Improving Relative Position Encoding for Vision Transformer(ICCV2021)

代碼:https://github.com/microsoft/Cream/tree/main/iRPE

提出問題

transformer位置表示的編碼方法主要有兩類。一個(gè)是絕對(duì)的,另一個(gè)是相對(duì)的。

絕對(duì)方法將輸入tokens的絕對(duì)位置從1編碼到最大序列長(zhǎng)度**。也就是說,每個(gè)位置都有單獨(dú)的編碼向量**。然后將編碼向量與輸入Tokens組合,以將位置信息輸入給模型。

相對(duì)位置方法對(duì)輸入tokens之間的相對(duì)距離進(jìn)行編碼,并學(xué)習(xí)tokens之間的成對(duì)關(guān)系。相對(duì)位置編碼(relative position encoding, RPE)通常通過具有與self-attention模塊中的 query 和 key 交互的可學(xué)習(xí)參數(shù)的查詢表來(lái)計(jì)算。這樣的方案允許模塊捕獲Tokens之間非常長(zhǎng)的依賴關(guān)系。

相對(duì)位置編碼在自然語(yǔ)言處理中被證明是有效的。然而,在計(jì)算機(jī)視覺中,這種效果仍然不清楚。最近很少有文獻(xiàn)對(duì)其進(jìn)行闡述,但在Vision Transformer方面卻得出了有爭(zhēng)議的結(jié)論。

例如,Dosovitski等人觀察到相對(duì)位置編碼與絕對(duì)位置編碼相比沒有帶來(lái)任何增益。相反,Srinivaset等人發(fā)現(xiàn)相對(duì)位置編碼可以誘導(dǎo)明顯的增益,優(yōu)于絕對(duì)位置編碼。此外,最近的工作聲稱相對(duì)位置編碼不能和絕對(duì)位置編碼一樣好用。這些工作對(duì)相對(duì)位置編碼在模型中的有效性得出了不同的結(jié)論,這促使我們重新審視和反思相對(duì)位置編碼在Vision Transformer中的應(yīng)用。

另一方面,語(yǔ)言建模采用原始相對(duì)位置編碼,輸入數(shù)據(jù)為一維單詞序列。但對(duì)于視覺任務(wù),輸入通常是2D圖像或視頻序列,其中像素具有高度空間結(jié)構(gòu)。目前尚不清楚:從一維到二維的擴(kuò)展是否適用于視覺模型;方向信息在視覺任務(wù)中是否重要?

改進(jìn)思路

1.論文分析了相對(duì)位置編碼中的幾個(gè)關(guān)鍵因素,包括相對(duì)方向、上下文的重要性、query、key、value和相對(duì)位置嵌入之間的交互以及計(jì)算代價(jià)。該分析對(duì)相對(duì)位置編碼有了全面的理解,并為新方法的設(shè)計(jì)提供了經(jīng)驗(yàn)指導(dǎo)。

2.提出了一種高效的相對(duì)編碼實(shí)現(xiàn)方法,計(jì)算成本從原始O()降低到O(nkd)(其中k<<n),適用于高分辨率輸入圖像,如目標(biāo)檢測(cè)、語(yǔ)義分割等Tokens數(shù)可能非常大的場(chǎng)合。

3.綜合考慮效率和通用性,提出了四種新的vision transformer的相對(duì)位置編碼方法,稱為image RPE(IRPE)。這些方法很簡(jiǎn)單,可以很容易地插入self-attention層。實(shí)驗(yàn)表明,在不調(diào)整任何超參數(shù)和設(shè)置的情況下,該方法在ImageNet和COCO上分別比其原始模型DeiTS和DETR-ResNet50提高了1.5%(top-1ACC)和1.3%(MAP)。

4.實(shí)驗(yàn)證明,在圖像分類任務(wù)中,相對(duì)位置編碼可以代替絕對(duì)編碼。同時(shí),絕對(duì)編碼對(duì)于目標(biāo)檢測(cè)是必要的,其中像素位置對(duì)于目標(biāo)定位是重要的。

3.Encoder的改進(jìn)

關(guān)于Encoder的改進(jìn),大部分都是在將transformer用于具體任務(wù)時(shí),針對(duì)各個(gè)任務(wù)的特點(diǎn)或出現(xiàn)的問題進(jìn)行改進(jìn)的。雖然不一定是一個(gè)通用的模型,但其在改進(jìn)過程中體現(xiàn)的改進(jìn)思路仍值得學(xué)習(xí)和借鑒。

TransFER

論文:TransFER: Learning Relation-Aware Facial Expression Representations With Transformers(ICCV2021)

提出問題

表情識(shí)別具有類內(nèi)相似性小、類間相似性大的特點(diǎn)。同時(shí),需要提取不同的局部表征來(lái)對(duì)不同的表情進(jìn)行分類。即使某些局部塊(patches)不可見,更多樣化的局部塊也可以發(fā)揮作用。同時(shí),不同的局部塊可以相互補(bǔ)充。

4.jpg

例如,如圖所示,僅根據(jù)嘴巴區(qū)域(列2)很難區(qū)分驚訝(第1行)和憤怒(第2行)。我們提出的TransFER模型探索了不同的關(guān)系感知面部部位,如眼睛(第3列,第1行)和眉毛之間的區(qū)域(第3列,第2行),這有助于區(qū)分這些不同的表情。

因此,應(yīng)該在全局范圍內(nèi)探索不同局部塊(patches)之間的關(guān)系,突出重要的塊(patches),抑制無(wú)用的塊(patches)。

改進(jìn)思路

論文提出了TransFER模型來(lái)學(xué)習(xí)不同關(guān)系感知的FER局部表示。

首先,提出了隨機(jī)丟棄注意力圖的多注意丟棄算法(Multi-Attention Dropping, MAD)。通過這種方式,推動(dòng)模型去探索除最具區(qū)分性的局部斑塊之外的綜合局部斑塊,自適應(yīng)地聚焦于不同的局部斑塊。當(dāng)某些部位因姿勢(shì)變化或遮擋而不可見時(shí),此方式特別有用。

其次,Vision Transformer(VIT)適用于FER,稱為VIT-FER,用于對(duì)多個(gè)局部塊之間的連接進(jìn)行建模。由于采用全局范圍對(duì)每個(gè)局部塊進(jìn)行增強(qiáng),充分挖掘了多個(gè)局部塊之間的互補(bǔ)性,提高了識(shí)別性能。

第三,多頭自我注意(multi-head self-attention)使VIT能夠在不同位置共同關(guān)注來(lái)自不同信息子空間的特征。然而,由于沒有明確的指導(dǎo),可能會(huì)建立冗余關(guān)系。為解決這一問題,提出了隨機(jī)丟棄一個(gè)自我注意的多頭自我注意丟棄(Multi-head Self-Attention Dropping, MSAD)方法。在這種情況下,如果放棄了self-attention,模型就被迫從其他地方學(xué)習(xí)有用的關(guān)系。因此,不同局部塊之間的豐富關(guān)系被挖掘出來(lái),從而使FER受益。

5.jpg

結(jié)合新的MAD和MSAD模塊,提出了最終的體系結(jié)構(gòu),稱為TransFER。如圖所示,與VIT-FER基線(列2)相比,TransFER定位更多樣化的關(guān)系局部表示(列3),從而區(qū)分這些不同的表達(dá)式。它在幾個(gè)FER基準(zhǔn)上達(dá)到了SOTA性能,顯示了它的有效性。

SOTR

論文:SOTR: Segmenting Objects with Transformers(ICCV2021)

代碼:https://github.com/easton-cau/SOTR

提出問題

transformer用于語(yǔ)義分割方面還在一些不足。一方面,transformer在提取低層特征時(shí)表現(xiàn)不佳,導(dǎo)致對(duì)小目標(biāo)的錯(cuò)誤預(yù)測(cè)。另一方面,由于特征映射的廣泛性,需要大量的內(nèi)存和時(shí)間,特別是在訓(xùn)練階段。

改進(jìn)思路

為了克服這些缺點(diǎn),論文提出了一種創(chuàng)新的自下而上模型SOTR,該模型巧妙地結(jié)合了CNN和transformer的優(yōu)點(diǎn)。

SOTR的重點(diǎn)是研究如何更好地利用transformer提取的語(yǔ)義信息。為了降低傳統(tǒng)self-attention機(jī)制的存儲(chǔ)和計(jì)算復(fù)雜度,論文提出了雙注意力,它采用了傳統(tǒng)注意力矩陣的稀疏表示。

1.論文提出了一種創(chuàng)新的CNN-Transformer-hybrid實(shí)例分割框架,稱為SOTR。它可以有效地對(duì)局部連接和遠(yuǎn)程依賴進(jìn)行建模,利用輸入域中的CNN主干和transformer編碼器,使它們具有高度的表現(xiàn)力。更重要的是,SOTR通過直接分割對(duì)象實(shí)例而不依賴于box檢測(cè),大大簡(jiǎn)化了整個(gè)流水線。

6.jpg

2.設(shè)計(jì)了雙注意力,這是一種新的position-sensitive self-attention機(jī)制, 是為transformer量身定做的。與原來(lái)的transformer相比,SOTR這種設(shè)計(jì)良好的結(jié)構(gòu)在計(jì)算量和內(nèi)存上都有很大的節(jié)省,特別是對(duì)于像實(shí)例分割這樣的密集預(yù)測(cè)的大輸入。

3.除了純粹基于transformer的模型外,提出的SOTR不需要在大數(shù)據(jù)集上進(jìn)行預(yù)訓(xùn)練,就可以很好地推廣歸納偏差。因此,SOTR更容易應(yīng)用于數(shù)據(jù)量不足的情況。

4.在MS Coco基準(zhǔn)上,SOTR的性能達(dá)到了使用ResNet-101-FPN主干的AP的40.2%,在精確度上超過了大多數(shù)最SOTA方法。此外,由于twin transformer對(duì)全局信息的提取,SOTR在中型物體(59.0%)和大型物體(73.0%)上表現(xiàn)出明顯更好的性能。

PnP-DETR

論文:PnP-DETR: Towards Efficient Visual Analysis With Transformers

代碼:https://github.com/twangnh/pnp-detr

提出問題

將transformer網(wǎng)絡(luò)應(yīng)用于圖像特征映射可能在計(jì)算上代價(jià)高昂,這主要是由于對(duì)長(zhǎng)展平的特征向量的注意操作。這些特征可能是冗余的: 除了感興趣的對(duì)象之外,自然圖像通常包含巨大的背景區(qū)域,這些背景區(qū)域可能在相應(yīng)的特征表示中占據(jù)很大一部分;而且,一些區(qū)分特征向量可能已經(jīng)足以檢測(cè)對(duì)象。

現(xiàn)有的提高transformer效率的工作主要集中在加速注意操作上,很少考慮上面討論的空間冗余。

改進(jìn)思路

為了解決上述局限性,論文開發(fā)了一個(gè)可學(xué)習(xí)的輪詢和池化(Poll and Pool, PnP)采樣模塊。 它的目的是將圖像特征圖壓縮成由精細(xì)特征向量和少量粗略特征向量組成的抽象特征集。

從輸入特征圖中確定性地采樣精細(xì)特征向量,以捕捉精細(xì)前景信息,這對(duì)于檢測(cè)目標(biāo)是至關(guān)重要的。粗略特征向量聚合來(lái)自背景位置的信息,所產(chǎn)生的上下文信息有助于更好地識(shí)別和定位對(duì)象。然后,transformer對(duì)細(xì)粗特征空間內(nèi)的信息交互進(jìn)行建模,并獲得最終結(jié)果。

由于抽象集比直接扁平化的圖像特征圖短得多,因此transformer的計(jì)算量大大減少,并且主要分布在前景位置。這種方法與提高transformer效率的方法是正交的,可以進(jìn)一步與它們結(jié)合得到更有效的模型。

7.jpg

PiT

論文:Rethinking Spatial Dimensions of Vision Transformers

代碼:https://github.com/naver-ai/pit

提出問題

CNN 以大空間尺寸和小通道尺寸的特征開始,并逐漸增加通道尺寸,同時(shí)減小空間尺寸。由于稱為空間池化的層,這種維度轉(zhuǎn)換是必不可少的?,F(xiàn)代 CNN 架構(gòu),包括 AlexNet、ResNet和 EfficientNet,都遵循這一設(shè)計(jì)原則。

池化層與每一層的感受野大小密切相關(guān)。一些研究表明,池化層有助于網(wǎng)絡(luò)的表現(xiàn)力和泛化性能。然而,與 CNN 不同的是,ViT 不使用池化層,而是在所有層中使用相同大小的空間。

改進(jìn)思路

首先,論文驗(yàn)證了 CNN 上池化層的優(yōu)勢(shì)。實(shí)驗(yàn)表明,池化層證明了 ResNet 的模型能力和泛化性能。為了將池化層的優(yōu)勢(shì)擴(kuò)展到 ViT,論文提出了一種基于池化的視覺transformers (PiT)。

8.jpg

PiT 是一種與池化層相結(jié)合的transformer架構(gòu)。它可以像在 ResNet 中一樣減少 ViT 結(jié)構(gòu)中的空間大小。

最后,為了分析 ViT 中池化層的效果,論文測(cè)量了 ViT 的空間交互比,類似于卷積架構(gòu)的感受野大小。論文展示了池化層具有控制自注意力層中發(fā)生的空間交互大小的作用,這類似于卷積架構(gòu)的感受野控制。

Swin Transformer

論文: Swin Transformer: Hierarchical Vision Transformer using Shifted Windows

代碼:https://github. com/microsoft/Swin-Transformer

提出問題

論文試圖擴(kuò)展Transformer的適用性,使其可以作為計(jì)算機(jī)視覺的通用主干,就像它在NLP中所做的那樣,也可以像CNNs在視覺中所做的那樣。

論文提到,將transformer在語(yǔ)言領(lǐng)域的高性能轉(zhuǎn)換到視覺領(lǐng)域的重大挑戰(zhàn)可以用這兩種模式之間的差異來(lái)解釋。這些不同之處之一涉及到規(guī)模。

與作為語(yǔ)言transformer中處理的基本元素的單詞tokens不同,視覺元素在尺度上可以有很大的變化,這是一個(gè)在諸如目標(biāo)檢測(cè)之類的任務(wù)中受到關(guān)注的問題。在現(xiàn)有的基于transformer的模型中,tokens都是固定比例的,這一特性不適合這些視覺應(yīng)用。

另一個(gè)不同之處在于,與文本段落中的文字相比,圖像中像素的分辨率要高得多。存在許多視覺任務(wù),如語(yǔ)義分割,需要在像素級(jí)別進(jìn)行密集預(yù)測(cè),這對(duì)于高分辨率圖像上的Transformer來(lái)說是很困難的,因?yàn)樗膕elf-attention的計(jì)算復(fù)雜度是圖像大小的二次方。

改進(jìn)思路

為了克服這些問題,論文提出了一種通用的Transformer骨干網(wǎng),稱為Swin Transformer,它構(gòu)造了分層的特征映射,并且計(jì)算復(fù)雜度與圖像大小成線性關(guān)系。

9.jpg

如圖1(A)所示,Swin Transformer通過從小塊(灰色輪廓)開始,逐漸合并更深的Transformer層中的相鄰塊來(lái)構(gòu)建分層表示。

有了這些分層的特征圖,Swin Transformer模型可以方便地利用先進(jìn)的技術(shù)進(jìn)行密集預(yù)測(cè),如特征金字塔網(wǎng)絡(luò)(FPN)或U-Net。線性計(jì)算復(fù)雜度是通過在分割圖像(紅色輪廓)的非重疊窗口內(nèi)局部計(jì)算self-attention來(lái)實(shí)現(xiàn)的。每個(gè)窗口中的patches數(shù)量是固定的,因此復(fù)雜度與圖像大小成線性關(guān)系。

這些優(yōu)點(diǎn)使得Swin Transformer適合作為各種視覺任務(wù)的通用主干,而不是以前基于Transformer的架構(gòu),后者生成單一分辨率的特征地圖,并且具有二次方復(fù)雜性。

10.jpg

Swin Transformer的一個(gè)關(guān)鍵設(shè)計(jì)元素是窗口分區(qū)在連續(xù)的self-attention層之間的移動(dòng),如圖2所示。移動(dòng)的窗口橋接了前一層的窗口,提供了它們之間的連接,顯著增強(qiáng)了建模能力。

這種策略在實(shí)際延遲方面也是有效的:一個(gè)窗口內(nèi)的所有query patch都共享相同的key集,這便于硬件中的內(nèi)存訪問。相反,較早的基于滑動(dòng)窗口的self-attention方法由于不同query像素的不同key集而在一般硬件上受到低延遲的影響。

實(shí)驗(yàn)表明,所提出的移位窗口方法比滑動(dòng)窗口方法具有更低的延遲,但在建模能力上是相似的。事實(shí)證明,移位窗口方法對(duì)于全MLP體系結(jié)構(gòu)也是有益的。

對(duì)于視頻中的transformer,主要改進(jìn)思路是將patches在空間上和時(shí)間上分開進(jìn)行attention。這里列舉一篇。

TimeSformer

論文:Is Space-Time Attention All You Need for Video Understanding?

代碼:https://github.com/lucidrains/TimeSformer-pytorch

提出問題

視頻理解與NLP有很多的相似的地方。首先,視頻和語(yǔ)句都具有序列性;而且,一個(gè)字只能與語(yǔ)句中其它字聯(lián)系才能理解,在視頻行為中一個(gè)片段也需要與視頻的上下文相關(guān)聯(lián)。于是,論文期望NLP中這種long-range self-attention模型可以在視頻模型中也有很高的表現(xiàn)。

在視頻領(lǐng)域,2D或3D卷積是用來(lái)提取時(shí)空特征的主流操作,但卷積操作比較明顯的一個(gè)問題是感受野是有限的,若要獲得全局感受野,需要堆疊很多層卷積層,它們的信息傳播路徑比較長(zhǎng)。而self-attention這種操作可以很輕松地獲得全局感受野,捕獲局部和長(zhǎng)范圍的依賴關(guān)系。

卷積操作的另一個(gè)問題是受到內(nèi)存的限制,特別是視頻領(lǐng)域,往往需要在高分辨率和長(zhǎng)范圍幀之間權(quán)衡。而最近幾年一些研究者的工作指出Transformer可以比CNN獲得更快的訓(xùn)練和推理,因此在同樣計(jì)算量預(yù)算下,transformer可以使用更大學(xué)習(xí)容量。

標(biāo)準(zhǔn)的self-attention需要計(jì)算所有tokens相互之間的相似性,這樣的做法就是計(jì)算量比較大,因此需要考慮如何利用self-attention來(lái)處理圖像塊。論文比較了這方面的幾種處理方式:Joint Space-Time Attention、Sparse Local Global Attention 和Axial Attention。這幾種方式的共同點(diǎn)是采用ViT中的方式將圖像進(jìn)行分塊,而它們之間的區(qū)別在于如何用self attention來(lái)處理這些塊。論文提出Divided attention的方式具有最好的表現(xiàn)。

改進(jìn)思路

11.jpg12.jpg

4.增加Decoder

論文:End-to-End Object Detection with Transformers

代碼:https://github.com/facebookresearch/detr

DETR中似乎沒有介紹為何這么設(shè)計(jì)結(jié)構(gòu),而只是在說要做一個(gè)End-to-End的transformer模型。因此這里只介紹一下它的結(jié)構(gòu)。

13.jpg

本文僅做學(xué)術(shù)分享,如有侵權(quán),請(qǐng)聯(lián)系刪文。

*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



關(guān)鍵詞: 計(jì)算機(jī)視覺

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉