日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【论文解读】A Survey on Visual Transformer及引文理解

發(fā)布時(shí)間:2025/3/12 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【论文解读】A Survey on Visual Transformer及引文理解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

A Survey on Visual Transformer閱讀,以及自己對(duì)相關(guān)引文的理解。

Transformer 作為NLP領(lǐng)域的大殺器,目前已經(jīng)在CV領(lǐng)域逐漸展露鋒芒,大有替代CNN的趨勢(shì),在圖像分類(lèi),視頻處理,low/high level的視覺(jué)任務(wù)都有相應(yīng)的transformer刷榜。這篇文章在介紹這些工作的同時(shí),討論了他們的challenges和今后可能的研究方向。

上圖基本上就是本文的主要內(nèi)容了,作者首先對(duì)attention,transformer做一個(gè)簡(jiǎn)單介紹,然后介紹transformer在NLP中的應(yīng)用,最后將其在CV中的應(yīng)用分為四類(lèi)加以介紹。這四類(lèi)分別為classification, high-level vision, low-level vision 和 video processing.Classification顧名思義就是分類(lèi)任務(wù),High-level vision作者定義為:“對(duì)圖像中所見(jiàn)內(nèi)容的解釋和使用”,包括目標(biāo)檢測(cè)、分割等。Low-level vision定義為“為圖像提取描述信息”,典型應(yīng)用包括超分,圖像去噪,風(fēng)格遷移等。

2. Formulation of Transformer

Transformer 由一個(gè)encoder,一個(gè)decoder模塊組成。每個(gè)encoder是一個(gè)self-attention層加一個(gè)全連接層,每個(gè)decoder由兩種attention層加一個(gè)全連接層組成,在對(duì)句子進(jìn)行處理前,首先要將每個(gè)單詞轉(zhuǎn)化為??維的embedding。

2.1 Self-Attention Layer

自注意力機(jī)制先將一個(gè)embedding轉(zhuǎn)化為三個(gè)向量,query,key和value(),三者的維度都與原始embedding一致。所有的embedding放在一起組成三個(gè)大矩陣?,然后注意力機(jī)制計(jì)算過(guò)程如下

  • 計(jì)算不同輸入向量的得分?

  • 為了梯度的穩(wěn)定性進(jìn)行歸一化?

  • 將得分轉(zhuǎn)化為概率?

  • 最后得到加權(quán)的矩陣?

這整個(gè)過(guò)程可以被統(tǒng)一為一個(gè)簡(jiǎn)單的函數(shù)??直觀來(lái)看,第1步計(jì)算兩個(gè)不同向量之間的分?jǐn)?shù),這個(gè)分?jǐn)?shù)用來(lái)確定我們?cè)诋?dāng)前位置編碼單詞時(shí)對(duì)其他單詞的注意程度。步驟2標(biāo)準(zhǔn)化得分,使其具有更穩(wěn)定的梯度,以便更好地訓(xùn)練;步驟3將得分轉(zhuǎn)換為概率。最后,將每個(gè)值向量乘以概率的總和,概率越大的向量將被下面幾層更多地關(guān)注

encoder-decoder attention layer其實(shí)和自注意力機(jī)制非常類(lèi)似,不同之處在于,key,value矩陣??是從encoder那里繼承來(lái)的,?是從上一層繼承來(lái)的。

到目前為止,我們所描述的模型中缺少的一件事是解釋輸入序列中單詞順序的方法。因此一般都會(huì)顯式的將位置信息進(jìn)行編碼然后加入原始的詞向量中,如下圖所示

數(shù)學(xué)定義為

開(kāi)始看到這兩個(gè)式子,會(huì)覺(jué)得很莫名其妙,這個(gè)sin,cos,10000都是從哪冒出來(lái)的?這里的pos表示token在sequence中的位置,例如第一個(gè)token就是0。?,或者準(zhǔn)確意義上是??和??表示了Positional Encoding的維度,?。所以當(dāng)pos為1時(shí),對(duì)應(yīng)的Positional Encoding可以寫(xiě)成:

2.2. Multi-Head Attention

在single-head的模型中,我們最終得到的embedding融合了其他各個(gè)位置,但是他很有可能被單詞本身dominate(自身對(duì)自身的attention一般很大),而且我們不能確保隨機(jī)初始化后不斷學(xué)習(xí)得到這些矩陣帶來(lái)的attention一定對(duì)。因此multi-head可以看作是一種ensemble,我們現(xiàn)在有多組矩陣,他們將同一個(gè)輸入embedding映射到不同的表達(dá)空間以此來(lái)提高模型的表達(dá)能力。不過(guò)此時(shí)query,key,value的維度不再與原始embedding一致,而是變?yōu)?#xff0c;因此每個(gè)head經(jīng)過(guò)self-attention將word映射為維的embedding,將這些embedding連接在一起就變?yōu)樵季S度,數(shù)學(xué)定義如下

這里,?表示,。

這就是基本的Multihead Attention單元,對(duì)于encoder來(lái)說(shuō)就是利用這些基本單元疊加,其中key, query, value均來(lái)自前一層encoder的輸出,即encoder的每個(gè)位置都可以注意到之前一層encoder的所有位置。

對(duì)于decoder來(lái)講,我們注意到有兩個(gè)與encoder不同的地方,一個(gè)是第一級(jí)的Masked Multi-head,另一個(gè)是第二級(jí)的Multi-Head Attention不僅接受來(lái)自前一級(jí)的輸出,還要接收encoder的輸出,下面分別解釋一下是什么原理。

第一級(jí)decoder的key, query, value均來(lái)自前一層decoder的輸出,但加入了Mask操作,即我們只能attend到前面已經(jīng)翻譯過(guò)的輸出的詞語(yǔ),因?yàn)榉g過(guò)程我們當(dāng)前還并不知道下一個(gè)輸出詞語(yǔ),這是我們之后才會(huì)推測(cè)到的。

而第二級(jí)decoder也被稱(chēng)作encoder-decoder attention layer,即它的query來(lái)自于之前一級(jí)的decoder層的輸出,但其key和value來(lái)自于encoder的輸出,這使得decoder的每一個(gè)位置都可以attend到輸入序列的每一個(gè)位置。

總結(jié)一下,k和v的來(lái)源總是相同的,q在encoder及第一級(jí)decoder中與k,v來(lái)源相同,在encoder-decoder attention layer中與k,v來(lái)源不同。

2.3. Other Parts in Transformer

Residual in the encoder and decoder. 在上面的結(jié)構(gòu)圖中可以看到,每個(gè)encoder,decoder模塊都是會(huì)有一個(gè)殘差連接+layerNorm的,具體而言就是

Feed-forward neural network. 這個(gè)模塊不是簡(jiǎn)單的FCN,而是兩層FCN加一個(gè)非線性的激活函數(shù),即

Final layer in decoder. 解碼器的最后一層旨在將向量轉(zhuǎn)為一個(gè)字。這是通過(guò)一個(gè)線性層和一個(gè)softmax層來(lái)實(shí)現(xiàn)的。線性層將向量投影到一個(gè)維的logit向量中,其中是詞匯表中的單詞數(shù)。然后,使用softmax層將logits向量轉(zhuǎn)換為概率。

大多數(shù)用于計(jì)算機(jī)視覺(jué)任務(wù)的Transformer都使用原編碼器模塊。總之,它可以被視為一種不同于CNN和遞歸神經(jīng)網(wǎng)絡(luò)RNN的新型特征選擇器。與只關(guān)注局部特征的CNN相比,transformer能夠捕捉到長(zhǎng)距離特征,這意味著transformer可以很容易地獲得全局信息。與RNN的隱態(tài)計(jì)算順序相比較,Transformer的自注意層和全連接層的輸出可并行計(jì)算,且速度快。因此,進(jìn)一步研究Transformer在自然語(yǔ)言處理和計(jì)算機(jī)視覺(jué)領(lǐng)域的應(yīng)用具有重要意義。

3. Revisiting Transformers for NLP

Transformers出現(xiàn)后,克服了RNN訓(xùn)練速度慢的缺陷,使得大規(guī)模預(yù)訓(xùn)練模型成為可能。BETR及其變種(SpanBERT,RoBERTa)等都是基于transformer的模型。在BERT的預(yù)訓(xùn)練階段,對(duì)BookCorpus和英語(yǔ)維基百科數(shù)據(jù)集進(jìn)行了兩個(gè)任務(wù)

  • Mask一部分token讓模型來(lái)預(yù)測(cè)。

  • 輸入兩個(gè)句子讓模型預(yù)測(cè)第二個(gè)句子是否是文檔中的原始句子。在預(yù)訓(xùn)練之后,BERT可以添加一個(gè)輸出層在下游任務(wù)進(jìn)行fine-tune。在執(zhí)行序列級(jí)任務(wù)(如情感分析)時(shí),BERT使用第一個(gè)token的表示進(jìn)行分類(lèi);而對(duì)于token級(jí)別的任務(wù)(例如,名稱(chēng)實(shí)體識(shí)別),所有token都被送入softmax層進(jìn)行分類(lèi)。

Generative Pre-Trained Transformer (GPT2,GPT3)是另一種基于Transformer解碼器架構(gòu)的預(yù)訓(xùn)練模型,它使用了帶掩碼的自我注意機(jī)制。GPT和Bert系列最重要的區(qū)別在于與訓(xùn)練的方式,GPT是單向Transformer模型,這種單向的性質(zhì)使其在文本生成方面具有強(qiáng)大的能力,今年Google使用“鈔”能力造出的GPT3更是在各種任務(wù)都有非常優(yōu)越的表現(xiàn),而且不再需要fine-tune。

當(dāng)然還有其他的一些PTM模型,但這并不是改文章的主題,因此作者只是列出來(lái)以供參考。

還有一些多模態(tài)的transformer和這篇文章比較相關(guān),可以簡(jiǎn)單了解一下。VideoBERT使用基于CNN的module將圖像轉(zhuǎn)化為token,然后使用transformer的encoder來(lái)為下游任務(wù)學(xué)習(xí)一個(gè)video-text representation。VisualBERT和VL-BERT提出了single-stream unified transformer,用于捕獲視覺(jué)元素和圖像-文本關(guān)系,用于像視覺(jué)問(wèn)題回答(VQA)和視覺(jué)常識(shí)推理(VCR)的下游任務(wù)。此外,Speech bert探索了用transformer編碼器編碼音頻和文本pair的可能性,以處理自動(dòng)文本任務(wù),如語(yǔ)音問(wèn)題回答(SQA)。

4. Visual Transformer

這一部分是文章的中心

4.1. Image Classification

圖像作為一種高維、噪聲大、冗余度高的形態(tài),被認(rèn)為是生成建模的難點(diǎn),這也是為什么過(guò)了好幾年,transformer才應(yīng)用到視覺(jué)領(lǐng)域。比較初始的應(yīng)用是在Visual Transformer一文中,作者使用CNN提取low-level的特征,然后將這些特征輸入Visual Transformer(VT)。在VT中,作者設(shè)計(jì)了一個(gè)tokenizer將各個(gè)pixel分成少量的visual tokens,每個(gè)token代表了圖像中的某些語(yǔ)義信息。然后使用transformer來(lái)建模token之間的關(guān)系。最后輸出的tokens直接被用來(lái)做分類(lèi)或者處理一下恢復(fù)成特征圖用于實(shí)例分割。

與這項(xiàng)工作不同的是,最近出現(xiàn)的iGPT , ViT 和 DeiT 都是只使用transformer的文章。

在CV中使用transformer,目前來(lái)看主要的兩個(gè)問(wèn)題,以及下列文章的核心區(qū)別在于

  • 得到Token的方式。

  • 訓(xùn)練的方式。

  • 評(píng)估representation的方式。

只要得到token,我們就能像NLP一樣使用transformer;有訓(xùn)練目標(biāo)我們就能train我們的model;有評(píng)估方式我們才知道自己的model好還是壞。接下來(lái)的幾篇文章我也會(huì)從這幾個(gè)方面進(jìn)行講解。

4.1.1?iGPT

Token:iGPT使用一種比較暴力的方式得到token:原始圖像()進(jìn)行預(yù)處理,將其調(diào)整為低分辨率,并將其重塑為一維序列(從左到右,從上到小)。對(duì)于RGB數(shù)據(jù),我們的字典大小為(文中采取了比較有趣的手段減小字典),每個(gè)像素相當(dāng)于一個(gè)word,即對(duì)每個(gè)pixel,我們采用nn.Embedding(num_vocab, embed_dim)提取每個(gè)像素embedding。至此圖片數(shù)據(jù)已經(jīng)完全轉(zhuǎn)化為了transformer的輸入形式。其中seq_len取決于down sample保留了多少pixel。

Pretrain: iGPT有兩種預(yù)訓(xùn)練方式:(i) 像自編碼器一樣進(jìn)行逐像素預(yù)測(cè)。(ii)像Bert一樣mask一部分pixel然后預(yù)測(cè)。其實(shí)第一種方式的實(shí)現(xiàn)與bert也很類(lèi)似,就是預(yù)測(cè)第個(gè)pixel的時(shí)候,mask掉之后的所有pixel。

attn_mask = torch.full((len(x), len(x)), -float("Inf"), device=x.device, dtype=x.dtype ) attn_mask = torch.triu(attn_mask, diagonal=1)#[784, 784] #attn_mask = [[0,-inf,-inf...,-inf], # [0,0,-inf,...,-inf], # [0,0,0,...,-inf], # [0,0,0,...,0]]

Evaluation:兩種評(píng)估方式,(i) fine-tune:增加了一個(gè)小的分類(lèi)頭,用于優(yōu)化分類(lèi)目標(biāo)并adapt所有權(quán)重。(ii)Linear-probe:將pretraining的模型視作特征提取器,增加一個(gè)分類(lèi)頭,只訓(xùn)練這個(gè)分類(lèi)頭。第二種方式的直覺(jué)在于“一個(gè)好的特征應(yīng)該能夠區(qū)分不同的類(lèi)”,除此之外,fine-tune效果好有可能是因?yàn)榧軜?gòu)很適合下游任務(wù),但是linear-probe只取決于特征質(zhì)量。

主要過(guò)程的代碼如下,數(shù)字只是為了示例,下面假設(shè)字典長(zhǎng)度為16(pixel一共16種)

# x:原始圖像處理后得到的序列 [32*32, 64],64為batchsize,32是下采樣后的長(zhǎng)款 length, batch = x.shape # 將每個(gè)pixel作為token求embedding,128為embedding的維度 h = self.token_embeddings(x) # [32*32, 64, 128] # 添加位置編碼 h = h + self.position_embeddings(positions).expand_as(h) # transformer for layer in self.layers:h = layer(h) # 自回歸編碼需要輸出logits,映射回字典長(zhǎng)度 logits = self.head(h) # [32*32,64,16] # 16類(lèi)的cross_entropy,對(duì)每個(gè)pixel計(jì)算損失 loss = self.criterion(logits.view(-1, logits.size(-1)), x.view(-1))

4.1.2?ViT

上文我們提到過(guò),BERT在執(zhí)行序列級(jí)的任務(wù)時(shí)使用第一個(gè)token作為特征得到分類(lèi)結(jié)果。比如下面這句,他會(huì)在第一個(gè)位置加上CLS token,([CLS]谷歌和[MASK][MASK]都是不存在的。[SEP]同時(shí),[MASK]也是不存在的。[SEP])最后使用該CLS token得到的結(jié)果進(jìn)行分類(lèi)。那么我們是不是也可以參照這種方式直接進(jìn)行分類(lèi)呢?答案是肯定。

Token:一個(gè)圖像將被處理為一個(gè)patch 序列. (H,W)是原始分辨率,(P,P)是每個(gè)patch的分辨率,是序列長(zhǎng)度。由于transformer在所有層中使用恒定寬度,一個(gè)可訓(xùn)練的線性投影將每個(gè)映射到D維向量,其輸出稱(chēng)為patch embeddings。

Pretrain:傳統(tǒng)情況下ViT也是要預(yù)訓(xùn)練的,不同于iGPT,這不是一個(gè)生成式的模型,只采用了transformer的encoder,因此直接在imagenet做分類(lèi)任務(wù)進(jìn)行pretrain。文章顯示數(shù)據(jù)集小的時(shí)候效果一般,數(shù)據(jù)集大的時(shí)候因?yàn)閐ata bias已經(jīng)被消除了很多,此時(shí)效果非常好。

Evaluation:分類(lèi)任務(wù)的評(píng)價(jià)不再多說(shuō)。

總結(jié)一下就是如下公式

4.2. High-level Vision

4.2.1 Generic Object Detection

基于transformer的目標(biāo)檢測(cè)可以分為兩類(lèi),也即下圖的(a)(b)

Transformer-based set prediction for detection.?DETR?是這類(lèi)工作的先驅(qū),其將目標(biāo)檢測(cè)視為集合預(yù)測(cè)問(wèn)題,去掉了目標(biāo)檢測(cè)種很多手工的組件像NMS,anchor generation等。

Token:CNN將圖像downsample為,然后將的空間維度壓縮為一維,造成一個(gè)序列。這個(gè)token的獲取方式挺有意思,空間維度塌縮。當(dāng)然也要加上位置編碼

Train:如何將object detection轉(zhuǎn)化為set prediction然后進(jìn)行訓(xùn)練,這是一個(gè)非常有意思的問(wèn)題。作者使用了object queries,這實(shí)際上是另一組可學(xué)習(xí)的positional embedding,其功能類(lèi)似于anchor。之后每個(gè)query進(jìn)過(guò)decoder后算一個(gè)bbox和class prob。

Evaluation:目標(biāo)檢測(cè)傳統(tǒng)的評(píng)估方式。

DETR也大方地承認(rèn)了他的缺點(diǎn):訓(xùn)練周期長(zhǎng),對(duì)小物體檢測(cè)效果差。

Transformer-based backbone for detection.與DETR不同,ViT-FRCNN將ViT與傳統(tǒng)的檢測(cè)框架融合,直接使用transformer的encoder作為backbone提取特征,與ViT處理圖像的方式一致,但是輸出的patch feature重新調(diào)整為一個(gè)圖像的特征圖送入傳統(tǒng)檢測(cè)模型。

總結(jié)一下,目前transformer已經(jīng)在很多視覺(jué)應(yīng)用中展現(xiàn)出了強(qiáng)大的實(shí)力。使用transformer最重要的兩個(gè)問(wèn)題是如何得到輸入的embedding(妥善處理position embedding),模型的訓(xùn)練與評(píng)估。目前還有很多非常有價(jià)值的課題值得我們探索,例如,對(duì)于最終的性能,像CNN或PointNet這樣的特征提取模塊是必要的嗎?如何讓visual transformer受益于像BERT或GPT-3在NLP社區(qū)做的大規(guī)模的預(yù)訓(xùn)練數(shù)據(jù)。是否有可能預(yù)先訓(xùn)練單個(gè)transformer模型,并通過(guò)幾次微調(diào)來(lái)針對(duì)不同的下游任務(wù)進(jìn)行微調(diào)(人民幣玩家們加油)?

4.3. Low-level Vision

這里所謂的low-level,其實(shí)就是輸出并不是標(biāo)簽這種形式,而是超分,或者生成模型,直接輸出圖片。這一類(lèi)應(yīng)用的大體框架如下,transformer編碼器將圖像作為像素序列或小塊,以該序列作為輸入語(yǔ)句,transformer解碼器就能成功地生成所需的圖像。在未來(lái)的工作中,為不同的圖像處理任務(wù)設(shè)計(jì)合適的體系結(jié)構(gòu)將是一個(gè)有意義的方向。

Image transformer一文最先使用完整的transformer做圖像生成的工作。他將每個(gè)值為的像素編碼成一個(gè)維向量,作為編碼器的輸入。特殊之處在于decoder,每個(gè)輸出像素是經(jīng)過(guò)計(jì)算輸入像素以及已經(jīng)生成像素之間的attention得到的。。

對(duì)于圖像條件生成,如超分和圖像修復(fù),使用編碼器-解碼器架構(gòu),其中編碼器的輸入是低分辨率的圖像或損壞的圖像。對(duì)于無(wú)條件和class-conditional生成(即噪聲到圖像),只使用解碼器輸入噪聲向量。由于解碼器的輸入是原生成的像素,在生成高分辨率圖像時(shí)會(huì)帶來(lái)較大的計(jì)算成本,因此提出了一種局部自注意方案,只使用最接近的生成像素作為解碼器的輸入。結(jié)果表明,該圖像轉(zhuǎn)換器在圖像生成和翻譯任務(wù)上與基于cnn的模型具有競(jìng)爭(zhēng)性能,表明了基于轉(zhuǎn)換器的模型在低層次視覺(jué)任務(wù)上的有效性。

到這里用于圖像的transformer基本算是搞完了,還有一些基于視頻的,多模態(tài)的,self-attention在CV中的應(yīng)用都不是我關(guān)注的重點(diǎn)。最后再看一看目前存在的問(wèn)題以及未來(lái)可能的發(fā)展方向

5. Conclusions and Discussions

5.1. Challenges

目前來(lái)看,大多數(shù)應(yīng)用都保留了transformer在NLP任務(wù)中的原始形態(tài),這一形態(tài)不一定適合images,因此是否會(huì)有改進(jìn)版本,更加適合視覺(jué)任務(wù)的transformer尚且未知。除此之外,transformer需要的數(shù)據(jù)量太大,缺少像CNN一樣的inductive biases,我們也很難解釋他為什么work,在本就是黑盒的DL領(lǐng)域又套了一層黑盒。最后也是大多數(shù)非人民幣玩家關(guān)注的點(diǎn)在于,基本的ViT模型需要180億次浮點(diǎn)運(yùn)算來(lái)處理一個(gè)圖像。相比之下,輕量級(jí)的CNN模型GhostNet只需約6億次FLOPs就能達(dá)到類(lèi)似的性能,這個(gè)運(yùn)算消耗實(shí)在太過(guò)昂貴。

5.2. Future Prospects

  • 像NLP一樣的大一統(tǒng)模型,一個(gè)transformer解決所有下游任務(wù)。

  • 高效的部署與運(yùn)行。

  • 可解釋性。

往期精彩回顧適合初學(xué)者入門(mén)人工智能的路線及資料下載機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機(jī)器學(xué)習(xí)在線手冊(cè)深度學(xué)習(xí)筆記專(zhuān)輯《統(tǒng)計(jì)學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專(zhuān)輯 AI基礎(chǔ)下載機(jī)器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專(zhuān)輯 本站知識(shí)星球“黃博的機(jī)器學(xué)習(xí)圈子”(92416895) 本站qq群704220115。 加入微信群請(qǐng)掃碼: 與50位技術(shù)專(zhuān)家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的【论文解读】A Survey on Visual Transformer及引文理解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。