計算機(jī)視覺中的transformer模型創(chuàng)新思路總結(jié)
以下文章來源于CV技術(shù)指南 ,作者仿佛若有光
導(dǎo)讀
本文回顧了ViT的結(jié)構(gòu),總結(jié)了計算機(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ī)視覺中transformer的模型創(chuàng)新總結(jié)之前,先有必要對它整體模型進(jìn)行回顧。在本文選取了最常用的ViT。
如圖所示,對于一張圖像,先將其分割成NxN個patches,把patches進(jìn)行Flatten,再通過一個全連接層映射成tokens,對每一個tokens加入位置編碼(position embedding),會隨機(jī)初始化一個tokens,concate到通過圖像生成的tokens后,再經(jīng)過transformer的Encoder模塊,經(jīng)過多層Encoder后,取出最后的tokens(即隨機(jī)初始化的tokens),再通過全連接層作為分類網(wǎng)絡(luò)進(jìn)行分類。
這個過程中存在很多值得改進(jìn)的空間,下面我們看看其它論文是如何思考并改進(jìn)的。以下內(nèi)容按照上面這個實現(xiàn)過程對每個步驟的改進(jìn)來排序。
改進(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ù)百個視覺tokens。
然而,這種tokens化方案的局限性是顯而易見的。
首先,硬分割可能會分離出一些高度相關(guān)的區(qū)域,這些區(qū)域應(yīng)該用同一組參數(shù)建模,這破壞了固有的對象結(jié)構(gòu),并使輸入patches的信息量變得較少。圖顯示貓頭被分成幾個部分,導(dǎo)致僅基于一個部分的識別挑戰(zhàn)。其次,tokens被放置在規(guī)則網(wǎng)格上,而與底層圖像內(nèi)容無關(guān)。圖顯示,大多數(shù)網(wǎng)格聚焦在不感興趣的背景上,這可能導(dǎo)致感興趣的前景對象淹沒在干擾信號中。
改進(jìn)思路
人類視覺系統(tǒng)以一種完全不同的方式組織視覺信息,而不是一次不加區(qū)別地處理整個場景。取而代之的是,它循序漸進(jìn)地、選擇性地將注意力集中在視覺空間的有趣部分,無論何時何地需要它,而忽略不感興趣的部分,隨著時間的推移,結(jié)合來自不同注視的信息來理解場景。
受上述過程的啟發(fā),論文提出了一種新的基于transformer的漸進(jìn)采樣(Progressive Sampling)模塊,該模塊能夠 學(xué)習(xí)從哪里看圖像,以緩解ViT中簡單的tokens化方案帶來的問題。
論文提出的模塊不是從固定位置采樣,而是以迭代的方式更新采樣位置。如圖所示,在每次迭代中,當(dāng)前采樣步驟的tokens被饋送到transformer編碼層,并預(yù)測一組采樣偏移量以更新下一步的采樣位置。該機(jī)制利用transformer的能力來捕獲全局信息,通過結(jié)合本地上下文和當(dāng)前tokens的位置來估計對感興趣區(qū)域的偏移量。這樣,注意力就會像人類視覺一樣,一步一步地集中到圖像的可辨別區(qū)域。
2.相對位置編碼的反思與改進(jìn)
論文:Rethinking and Improving Relative Position Encoding for Vision Transformer(ICCV2021)
代碼:https://github.com/microsoft/Cream/tree/main/iRPE
提出問題
transformer位置表示的編碼方法主要有兩類。一個是絕對的,另一個是相對的。
絕對方法將輸入tokens的絕對位置從1編碼到最大序列長度**。也就是說,每個位置都有單獨的編碼向量**。然后將編碼向量與輸入Tokens組合,以將位置信息輸入給模型。
相對位置方法對輸入tokens之間的相對距離進(jìn)行編碼,并學(xué)習(xí)tokens之間的成對關(guān)系。相對位置編碼(relative position encoding, RPE)通常通過具有與self-attention模塊中的 query 和 key 交互的可學(xué)習(xí)參數(shù)的查詢表來計算。這樣的方案允許模塊捕獲Tokens之間非常長的依賴關(guān)系。
相對位置編碼在自然語言處理中被證明是有效的。然而,在計算機(jī)視覺中,這種效果仍然不清楚。最近很少有文獻(xiàn)對其進(jìn)行闡述,但在Vision Transformer方面卻得出了有爭議的結(jié)論。
例如,Dosovitski等人觀察到相對位置編碼與絕對位置編碼相比沒有帶來任何增益。相反,Srinivaset等人發(fā)現(xiàn)相對位置編碼可以誘導(dǎo)明顯的增益,優(yōu)于絕對位置編碼。此外,最近的工作聲稱相對位置編碼不能和絕對位置編碼一樣好用。這些工作對相對位置編碼在模型中的有效性得出了不同的結(jié)論,這促使我們重新審視和反思相對位置編碼在Vision Transformer中的應(yīng)用。
另一方面,語言建模采用原始相對位置編碼,輸入數(shù)據(jù)為一維單詞序列。但對于視覺任務(wù),輸入通常是2D圖像或視頻序列,其中像素具有高度空間結(jié)構(gòu)。目前尚不清楚:從一維到二維的擴(kuò)展是否適用于視覺模型;方向信息在視覺任務(wù)中是否重要?
改進(jìn)思路
1.論文分析了相對位置編碼中的幾個關(guān)鍵因素,包括相對方向、上下文的重要性、query、key、value和相對位置嵌入之間的交互以及計算代價。該分析對相對位置編碼有了全面的理解,并為新方法的設(shè)計提供了經(jīng)驗指導(dǎo)。
2.提出了一種高效的相對編碼實現(xiàn)方法,計算成本從原始O()降低到O(nkd)(其中k<<n),適用于高分辨率輸入圖像,如目標(biāo)檢測、語義分割等Tokens數(shù)可能非常大的場合。
3.綜合考慮效率和通用性,提出了四種新的vision transformer的相對位置編碼方法,稱為image RPE(IRPE)。這些方法很簡單,可以很容易地插入self-attention層。實驗表明,在不調(diào)整任何超參數(shù)和設(shè)置的情況下,該方法在ImageNet和COCO上分別比其原始模型DeiTS和DETR-ResNet50提高了1.5%(top-1ACC)和1.3%(MAP)。
4.實驗證明,在圖像分類任務(wù)中,相對位置編碼可以代替絕對編碼。同時,絕對編碼對于目標(biāo)檢測是必要的,其中像素位置對于目標(biāo)定位是重要的。
3.Encoder的改進(jìn)
關(guān)于Encoder的改進(jìn),大部分都是在將transformer用于具體任務(wù)時,針對各個任務(wù)的特點或出現(xiàn)的問題進(jìn)行改進(jìn)的。雖然不一定是一個通用的模型,但其在改進(jìn)過程中體現(xiàn)的改進(jìn)思路仍值得學(xué)習(xí)和借鑒。
TransFER
論文:TransFER: Learning Relation-Aware Facial Expression Representations With Transformers(ICCV2021)
提出問題
表情識別具有類內(nèi)相似性小、類間相似性大的特點。同時,需要提取不同的局部表征來對不同的表情進(jìn)行分類。即使某些局部塊(patches)不可見,更多樣化的局部塊也可以發(fā)揮作用。同時,不同的局部塊可以相互補(bǔ)充。
例如,如圖所示,僅根據(jù)嘴巴區(qū)域(列2)很難區(qū)分驚訝(第1行)和憤怒(第2行)。我們提出的TransFER模型探索了不同的關(guān)系感知面部部位,如眼睛(第3列,第1行)和眉毛之間的區(qū)域(第3列,第2行),這有助于區(qū)分這些不同的表情。
因此,應(yīng)該在全局范圍內(nèi)探索不同局部塊(patches)之間的關(guān)系,突出重要的塊(patches),抑制無用的塊(patches)。
改進(jìn)思路
論文提出了TransFER模型來學(xué)習(xí)不同關(guān)系感知的FER局部表示。
首先,提出了隨機(jī)丟棄注意力圖的多注意丟棄算法(Multi-Attention Dropping, MAD)。通過這種方式,推動模型去探索除最具區(qū)分性的局部斑塊之外的綜合局部斑塊,自適應(yīng)地聚焦于不同的局部斑塊。當(dāng)某些部位因姿勢變化或遮擋而不可見時,此方式特別有用。
其次,Vision Transformer(VIT)適用于FER,稱為VIT-FER,用于對多個局部塊之間的連接進(jìn)行建模。由于采用全局范圍對每個局部塊進(jìn)行增強(qiáng),充分挖掘了多個局部塊之間的互補(bǔ)性,提高了識別性能。
第三,多頭自我注意(multi-head self-attention)使VIT能夠在不同位置共同關(guān)注來自不同信息子空間的特征。然而,由于沒有明確的指導(dǎo),可能會建立冗余關(guān)系。為解決這一問題,提出了隨機(jī)丟棄一個自我注意的多頭自我注意丟棄(Multi-head Self-Attention Dropping, MSAD)方法。在這種情況下,如果放棄了self-attention,模型就被迫從其他地方學(xué)習(xí)有用的關(guān)系。因此,不同局部塊之間的豐富關(guān)系被挖掘出來,從而使FER受益。
結(jié)合新的MAD和MSAD模塊,提出了最終的體系結(jié)構(gòu),稱為TransFER。如圖所示,與VIT-FER基線(列2)相比,TransFER定位更多樣化的關(guān)系局部表示(列3),從而區(qū)分這些不同的表達(dá)式。它在幾個FER基準(zhǔn)上達(dá)到了SOTA性能,顯示了它的有效性。
SOTR
論文:SOTR: Segmenting Objects with Transformers(ICCV2021)
代碼:https://github.com/easton-cau/SOTR
提出問題
transformer用于語義分割方面還在一些不足。一方面,transformer在提取低層特征時表現(xiàn)不佳,導(dǎo)致對小目標(biāo)的錯誤預(yù)測。另一方面,由于特征映射的廣泛性,需要大量的內(nèi)存和時間,特別是在訓(xùn)練階段。
改進(jìn)思路
為了克服這些缺點,論文提出了一種創(chuàng)新的自下而上模型SOTR,該模型巧妙地結(jié)合了CNN和transformer的優(yōu)點。
SOTR的重點是研究如何更好地利用transformer提取的語義信息。為了降低傳統(tǒng)self-attention機(jī)制的存儲和計算復(fù)雜度,論文提出了雙注意力,它采用了傳統(tǒng)注意力矩陣的稀疏表示。
1.論文提出了一種創(chuàng)新的CNN-Transformer-hybrid實例分割框架,稱為SOTR。它可以有效地對局部連接和遠(yuǎn)程依賴進(jìn)行建模,利用輸入域中的CNN主干和transformer編碼器,使它們具有高度的表現(xiàn)力。更重要的是,SOTR通過直接分割對象實例而不依賴于box檢測,大大簡化了整個流水線。
2.設(shè)計了雙注意力,這是一種新的position-sensitive self-attention機(jī)制, 是為transformer量身定做的。與原來的transformer相比,SOTR這種設(shè)計良好的結(jié)構(gòu)在計算量和內(nèi)存上都有很大的節(jié)省,特別是對于像實例分割這樣的密集預(yù)測的大輸入。
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對全局信息的提取,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)用于圖像特征映射可能在計算上代價高昂,這主要是由于對長展平的特征向量的注意操作。這些特征可能是冗余的: 除了感興趣的對象之外,自然圖像通常包含巨大的背景區(qū)域,這些背景區(qū)域可能在相應(yīng)的特征表示中占據(jù)很大一部分;而且,一些區(qū)分特征向量可能已經(jīng)足以檢測對象。
現(xiàn)有的提高transformer效率的工作主要集中在加速注意操作上,很少考慮上面討論的空間冗余。
改進(jìn)思路
為了解決上述局限性,論文開發(fā)了一個可學(xué)習(xí)的輪詢和池化(Poll and Pool, PnP)采樣模塊。 它的目的是將圖像特征圖壓縮成由精細(xì)特征向量和少量粗略特征向量組成的抽象特征集。
從輸入特征圖中確定性地采樣精細(xì)特征向量,以捕捉精細(xì)前景信息,這對于檢測目標(biāo)是至關(guān)重要的。粗略特征向量聚合來自背景位置的信息,所產(chǎn)生的上下文信息有助于更好地識別和定位對象。然后,transformer對細(xì)粗特征空間內(nèi)的信息交互進(jìn)行建模,并獲得最終結(jié)果。
由于抽象集比直接扁平化的圖像特征圖短得多,因此transformer的計算量大大減少,并且主要分布在前景位置。這種方法與提高transformer效率的方法是正交的,可以進(jìn)一步與它們結(jié)合得到更有效的模型。
PiT
論文:Rethinking Spatial Dimensions of Vision Transformers
代碼:https://github.com/naver-ai/pit
提出問題
CNN 以大空間尺寸和小通道尺寸的特征開始,并逐漸增加通道尺寸,同時減小空間尺寸。由于稱為空間池化的層,這種維度轉(zhuǎn)換是必不可少的?,F(xiàn)代 CNN 架構(gòu),包括 AlexNet、ResNet和 EfficientNet,都遵循這一設(shè)計原則。
池化層與每一層的感受野大小密切相關(guān)。一些研究表明,池化層有助于網(wǎng)絡(luò)的表現(xiàn)力和泛化性能。然而,與 CNN 不同的是,ViT 不使用池化層,而是在所有層中使用相同大小的空間。
改進(jìn)思路
首先,論文驗證了 CNN 上池化層的優(yōu)勢。實驗表明,池化層證明了 ResNet 的模型能力和泛化性能。為了將池化層的優(yōu)勢擴(kuò)展到 ViT,論文提出了一種基于池化的視覺transformers (PiT)。
PiT 是一種與池化層相結(jié)合的transformer架構(gòu)。它可以像在 ResNet 中一樣減少 ViT 結(jié)構(gòu)中的空間大小。
最后,為了分析 ViT 中池化層的效果,論文測量了 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ī)視覺的通用主干,就像它在NLP中所做的那樣,也可以像CNNs在視覺中所做的那樣。
論文提到,將transformer在語言領(lǐng)域的高性能轉(zhuǎn)換到視覺領(lǐng)域的重大挑戰(zhàn)可以用這兩種模式之間的差異來解釋。這些不同之處之一涉及到規(guī)模。
與作為語言transformer中處理的基本元素的單詞tokens不同,視覺元素在尺度上可以有很大的變化,這是一個在諸如目標(biāo)檢測之類的任務(wù)中受到關(guān)注的問題。在現(xiàn)有的基于transformer的模型中,tokens都是固定比例的,這一特性不適合這些視覺應(yīng)用。
另一個不同之處在于,與文本段落中的文字相比,圖像中像素的分辨率要高得多。存在許多視覺任務(wù),如語義分割,需要在像素級別進(jìn)行密集預(yù)測,這對于高分辨率圖像上的Transformer來說是很困難的,因為它的self-attention的計算復(fù)雜度是圖像大小的二次方。
改進(jìn)思路
為了克服這些問題,論文提出了一種通用的Transformer骨干網(wǎng),稱為Swin Transformer,它構(gòu)造了分層的特征映射,并且計算復(fù)雜度與圖像大小成線性關(guān)系。
如圖1(A)所示,Swin Transformer通過從小塊(灰色輪廓)開始,逐漸合并更深的Transformer層中的相鄰塊來構(gòu)建分層表示。
有了這些分層的特征圖,Swin Transformer模型可以方便地利用先進(jìn)的技術(shù)進(jìn)行密集預(yù)測,如特征金字塔網(wǎng)絡(luò)(FPN)或U-Net。線性計算復(fù)雜度是通過在分割圖像(紅色輪廓)的非重疊窗口內(nèi)局部計算self-attention來實現(xiàn)的。每個窗口中的patches數(shù)量是固定的,因此復(fù)雜度與圖像大小成線性關(guān)系。
這些優(yōu)點使得Swin Transformer適合作為各種視覺任務(wù)的通用主干,而不是以前基于Transformer的架構(gòu),后者生成單一分辨率的特征地圖,并且具有二次方復(fù)雜性。
Swin Transformer的一個關(guān)鍵設(shè)計元素是窗口分區(qū)在連續(xù)的self-attention層之間的移動,如圖2所示。移動的窗口橋接了前一層的窗口,提供了它們之間的連接,顯著增強(qiáng)了建模能力。
這種策略在實際延遲方面也是有效的:一個窗口內(nèi)的所有query patch都共享相同的key集,這便于硬件中的內(nèi)存訪問。相反,較早的基于滑動窗口的self-attention方法由于不同query像素的不同key集而在一般硬件上受到低延遲的影響。
實驗表明,所提出的移位窗口方法比滑動窗口方法具有更低的延遲,但在建模能力上是相似的。事實證明,移位窗口方法對于全MLP體系結(jié)構(gòu)也是有益的。
對于視頻中的transformer,主要改進(jìn)思路是將patches在空間上和時間上分開進(jìn)行attention。這里列舉一篇。
TimeSformer
論文:Is Space-Time Attention All You Need for Video Understanding?
代碼:https://github.com/lucidrains/TimeSformer-pytorch
提出問題
視頻理解與NLP有很多的相似的地方。首先,視頻和語句都具有序列性;而且,一個字只能與語句中其它字聯(lián)系才能理解,在視頻行為中一個片段也需要與視頻的上下文相關(guān)聯(lián)。于是,論文期望NLP中這種long-range self-attention模型可以在視頻模型中也有很高的表現(xiàn)。
在視頻領(lǐng)域,2D或3D卷積是用來提取時空特征的主流操作,但卷積操作比較明顯的一個問題是感受野是有限的,若要獲得全局感受野,需要堆疊很多層卷積層,它們的信息傳播路徑比較長。而self-attention這種操作可以很輕松地獲得全局感受野,捕獲局部和長范圍的依賴關(guān)系。
卷積操作的另一個問題是受到內(nèi)存的限制,特別是視頻領(lǐng)域,往往需要在高分辨率和長范圍幀之間權(quán)衡。而最近幾年一些研究者的工作指出Transformer可以比CNN獲得更快的訓(xùn)練和推理,因此在同樣計算量預(yù)算下,transformer可以使用更大學(xué)習(xí)容量。
標(biāo)準(zhǔn)的self-attention需要計算所有tokens相互之間的相似性,這樣的做法就是計算量比較大,因此需要考慮如何利用self-attention來處理圖像塊。論文比較了這方面的幾種處理方式:Joint Space-Time Attention、Sparse Local Global Attention 和Axial Attention。這幾種方式的共同點是采用ViT中的方式將圖像進(jìn)行分塊,而它們之間的區(qū)別在于如何用self attention來處理這些塊。論文提出Divided attention的方式具有最好的表現(xiàn)。
改進(jìn)思路
4.增加Decoder
論文:End-to-End Object Detection with Transformers
代碼:https://github.com/facebookresearch/detr
DETR中似乎沒有介紹為何這么設(shè)計結(jié)構(gòu),而只是在說要做一個End-to-End的transformer模型。因此這里只介紹一下它的結(jié)構(gòu)。
本文僅做學(xué)術(shù)分享,如有侵權(quán),請聯(lián)系刪文。
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。