国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

圖解Vit 2:Vision Transformer——視覺問題中的注意力機制

這篇具有很好參考價值的文章主要介紹了圖解Vit 2:Vision Transformer——視覺問題中的注意力機制。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Patch Embedding 回顧

上節(jié)回顧圖解Vit 2:Vision Transformer——視覺問題中的注意力機制,Transformer,目標(biāo)檢測,計算機視覺,深度學(xué)習(xí)

圖解Vit 2:Vision Transformer——視覺問題中的注意力機制,Transformer,目標(biāo)檢測,計算機視覺,深度學(xué)習(xí)

圖解Vit 2:Vision Transformer——視覺問題中的注意力機制,Transformer,目標(biāo)檢測,計算機視覺,深度學(xué)習(xí)
圖解Vit 2:Vision Transformer——視覺問題中的注意力機制,Transformer,目標(biāo)檢測,計算機視覺,深度學(xué)習(xí)

Seq2Seq中的attention

在Transformer之前的RNN,其實已經(jīng)用到了注意力機制。Seq2Seq。
圖解Vit 2:Vision Transformer——視覺問題中的注意力機制,Transformer,目標(biāo)檢測,計算機視覺,深度學(xué)習(xí)
對于Original RNN,每個RNN的輸入,都是對應(yīng)一個輸出。對于original RNN,他的輸入和輸出必須是一樣的。
在處理不是一對一的問題時,提出了RNN Seq2Seq。也就是在前面先輸入整體,然后再依次把對應(yīng)的輸出出來。
圖解Vit 2:Vision Transformer——視覺問題中的注意力機制,Transformer,目標(biāo)檢測,計算機視覺,深度學(xué)習(xí)
雖然Seq2Seq解決了輸入和輸出不定是相同長度的問題,但是我們所有信息都存在模型的一定地方,我們叫上下文,或者叫hidden state。又由于輸入的都是同一個模型,每次都更新同一個位置,那么當(dāng)我們的句子很長,或者是一個段落時,可能這個上下文就不會work,因為我們decoder的所有信息都是來自上下文的。效果不夠好。把很多信息輸入,就是encoder。后面把上下文信息解析出來,就是decoder。
很多學(xué)者想了辦法去改進它。希望把前面時間段的信息,傳遞給解碼decoder的時候。如下圖所示。
圖解Vit 2:Vision Transformer——視覺問題中的注意力機制,Transformer,目標(biāo)檢測,計算機視覺,深度學(xué)習(xí)
我們除了在encoder的部分傳遞h,還會多存一份p,直接傳給decoder。
RNN每次都是傳遞一個h。h是隱變量,高層的語義信息。c就是attention。它等于前面所有時間點的語義信息分別乘以a,再sum。c看到了前面的所有時間點,如果是一個句子,就是看到了句子里的所有token。c看到了h1-hn。那它看到的誰更重要,是a1-an控制的。那么a應(yīng)該怎么設(shè)置呢?最好的辦法是,是讓a可學(xué)習(xí)。即通過大量的句子數(shù)據(jù)訓(xùn)練一個網(wǎng)絡(luò),讓c1明白,他應(yīng)該更關(guān)注前面句子里的哪個token,哪個token的a就是最大的。

Transformer中的attention

上述是RNN中的attention機制,下面來論述attention在Transformer中是如何工作的。

x1-x3都是image token,也就是patch embedding后的token特征。他們首先會做一個projection。這里使用了神經(jīng)網(wǎng)絡(luò),或升維,或降維。得到Vector v。v和權(quán)重a相乘再相加,得到了attention c。注意,這里的c1是給x1做的attention。
圖解Vit 2:Vision Transformer——視覺問題中的注意力機制,Transformer,目標(biāo)檢測,計算機視覺,深度學(xué)習(xí)
我們又在x的這里另開了一個網(wǎng)絡(luò),對x進行另一個網(wǎng)絡(luò)的projection Projk。得到另一個feature vector k1。他和v1可能維度不同,也可以相同。
x,k,v都是feature vector。a是通過兩個k的點積得到的。這里a是一個scalar數(shù)值。k1會分別和k1,k2,k3進行點擊,得到a1,a2,a3,a稱為attention weights。注意里面的Projk是同一個,并且是可學(xué)習(xí)的。Projk可學(xué)習(xí),就相當(dāng)于a是可學(xué)習(xí)的,也相當(dāng)于c是可學(xué)習(xí)的。
圖解Vit 2:Vision Transformer——視覺問題中的注意力機制,Transformer,目標(biāo)檢測,計算機視覺,深度學(xué)習(xí)
現(xiàn)在我們多出來一個Wq分支。q即query,也就是查詢。q和k做點積,和上面講的k與k做點積并沒有不同,也就是我們不再通過k去做點積,而是通過q。query的作用就是去查詢與key的相關(guān)性。比如q1,當(dāng)它和其它k1,k2,k3點積加權(quán)得到attention c1時,c1就是表示x1與其它x的相關(guān)性。上述方法也就是讓query和key進行了分離,key作索引功能,query作查詢功能。給誰算attention,就用誰的query點積別人的key(包括自己的)。
圖解Vit 2:Vision Transformer——視覺問題中的注意力機制,Transformer,目標(biāo)檢測,計算機視覺,深度學(xué)習(xí)
圖解Vit 2:Vision Transformer——視覺問題中的注意力機制,Transformer,目標(biāo)檢測,計算機視覺,深度學(xué)習(xí)
這里x是vetor,就是一個patch feature,projection其實也是embedding,即提取特征。所以W的列其實就是embedd_dim(本質(zhì)即卷積操作)。我們的attention是針對每一個token的。x1,x2,x3就是每一個單詞token,或者圖像的patch。Wq,Wk,Wv參數(shù)是不同的,他們都是可學(xué)習(xí)的。
圖解Vit 2:Vision Transformer——視覺問題中的注意力機制,Transformer,目標(biāo)檢測,計算機視覺,深度學(xué)習(xí)
p是attention weight。attention是表達,是token通過Transformer計算出來的,一個feature vector和其它vector的相關(guān)性,就是通過p表達的。

圖解Vit 2:Vision Transformer——視覺問題中的注意力機制,Transformer,目標(biāo)檢測,計算機視覺,深度學(xué)習(xí)
我們?yōu)槭裁匆詃k。variance方差表示數(shù)據(jù)的離散程度。如果variance值很大時,對于softmax,他會更偏向更大的那個值。如果variance更小,softmax波動就沒有那么大。為了避免softmax在更大值上,我們需要把variance拉回來一點,讓我們的attention更穩(wěn)定一點,不能只盯著一個人看,讓注意力更均衡一點,雨露均沾。這里是softmax寫錯了,要寫最外面。

也就是我們輸入多少個token,我們輸出的attention z還是多少個。以上內(nèi)容就是全部的self-attention了。

下面我們再講講multi-head self-attention。
圖解Vit 2:Vision Transformer——視覺問題中的注意力機制,Transformer,目標(biāo)檢測,計算機視覺,深度學(xué)習(xí)
multi-head self-attention就是你看你的,我看我的。讓不同的人去看相同的序列信息,qkv進行復(fù)制,但是他們的參數(shù)是不同的,然后最后集眾家所長。大家最后統(tǒng)一一下意見。這個統(tǒng)一也是learnable的。z輸出也是不變維度,還是n行(和token個數(shù)對應(yīng))。

下面說下如何進行高效的attention計算,用矩陣計算。
圖解Vit 2:Vision Transformer——視覺問題中的注意力機制,Transformer,目標(biāo)檢測,計算機視覺,深度學(xué)習(xí)
將Multi-Head Attention帶回Vit整體結(jié)構(gòu)中,如下圖所示。
圖解Vit 2:Vision Transformer——視覺問題中的注意力機制,Transformer,目標(biāo)檢測,計算機視覺,深度學(xué)習(xí)
下面是Attention class的代碼:文章來源地址http://www.zghlxwxcb.cn/news/detail-583206.html

import paddle
import paddle.nn as nn

paddle.set_device('cpu')

class Attention(nn.Layer):
    def __init__(self, embed_dim, num_heads, qkv_bias, qk_scale, dropout=0., attention_dropout=0.):
        super().__init__()
        self.embed_dim = embed_dim
        self.num_heads = num_heads
        self.head_dim = int(embed_dim / num_heads)
        self.all_head_dim = self.head_dim * num_heads # 避免不能整除
        self.qkv = nn.Linear(embed_dim, 
                            self.all_head_dim * 3,
                            bias_attr=False if qkv_bias is False else None) # bias=None,在paddle里是默認給0
        self.scale = self.head_dim ** -0.5 if qk_scale is None else qk_scale
        self.softmax = nn.Softmax(-1)
        self.proj = nn.Linear(self.all_head_dim, embed_dim)

    def transpose_multi_head(self, x):
        new_shape = x.shape[:-1] + [self.num_heads, self.head_dim]
        x = x.reshape(new_shape) # [B, N, num_heads, head_dim]
        x = x.transpose([0, 2, 1, 3]) # [B, num_heads, N, head_dim]
        return x

    def forward(self, x):

        # [B, N, all_head_dim] * 3
        B, N, _ = x.shape
        qkv = self.qkv(x).chunk(3, -1) # [B, N, all_head_dim] * 3
        q, k, v = map(self.transpose_multi_head, qkv) # q,k,v: [B, num_heads, N, head_dim]

        attn = paddle.matmul(q, k, transpose_y=True) # q * k^t
        attn = self.scale * attn
        attn = self.softmax(attn) # [B, num_heads, N]
        attn_weight = attn
        # dropout
        # attn:[B, num_heads, N, N]
        

        out = paddle.matmul(attn, v) 
        out = out.transpose([0, 2, 1, 3]) # attn:[B, N, num_heads, head_dim]
        out = out.reshape([B, N, -1])
        out = self.proj(out)
        # dropout

        return out, attn_weight



def main():
    t = paddle.randn([4, 16, 96])
    print('input shape = ', t.shape)

    model = Attention(embed_dim=96, num_heads=8, 
                      qkv_bias=False, qk_scale=None, dropout=0., attention_dropout=0.)
    print(model)
    out, attn_weights = model(t)
    print(out.shape) # [4, 16, 96]
    print(attn_weights.shape) # [4, 8, 16, 16] 8是num_heads,8個人去看; N(num_patch)=16, 16個img token互相看


if __name__ == "__main__":
    main()

到了這里,關(guān)于圖解Vit 2:Vision Transformer——視覺問題中的注意力機制的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Transformer---ViT:vision transformer

    Transformer---ViT:vision transformer

    記錄一下對transformer方法在計算機視覺任務(wù)中的應(yīng)用方法的理解 參考博客:https://blog.csdn.net/weixin_42392454/article/details/122667271 參考代碼:https://gitcode.net/mirrors/Runist/torch_vision_transformer?utm_source=csdn_github_accelerator 模型網(wǎng)絡(luò)圖 假設(shè)輸入維度為[B, C, H, W],假設(shè)其中C=3,H=224,W=224 假設(shè)patch_s

    2024年02月12日
    瀏覽(24)
  • Vision Transformer(VIT)

    Vision Transformer(VIT)

    Vision Transformer(ViT)是一種新興的圖像分類模型,它使用了類似于自然語言處理中的Transformer的結(jié)構(gòu)來處理圖像。這種方法通過將輸入圖像分解成一組圖像塊,并將這些塊變換為一組向量來處理圖像。然后,這些向量被輸入到Transformer編碼器中,以便對它們進行進一步的處理。

    2024年02月07日
    瀏覽(22)
  • Vision Transformer (ViT)

    生成式模型與判別式模型 生成式模型,又稱概率模型 ,是指 通過學(xué)習(xí)數(shù)據(jù)的分布來建立模型P(y|x) ,然后利用該模型來生成新的數(shù)據(jù)。生成式模型的典型代表是 樸素貝葉斯模型 ,該模型通過學(xué)習(xí)數(shù)據(jù)的分布來建立概率模型,然后利用該模型來生成新的數(shù)據(jù)。 判別式模型,又

    2024年02月15日
    瀏覽(18)
  • Vision Transformer (ViT)介紹

    Vision Transformer (ViT)介紹

    paper:An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale 把transformer直接應(yīng)用于圖像塊序列,也可以在圖像分類任務(wù)上表現(xiàn)很好。 通過在大數(shù)據(jù)集上預(yù)訓(xùn)練,然后遷移到中等規(guī)模和小規(guī)模數(shù)據(jù)集上,ViT可以取得和SOTA的卷積網(wǎng)絡(luò)同樣出色(甚至更好)的結(jié)果,同時需要更

    2024年02月13日
    瀏覽(31)
  • Vision Transformer(VIT)調(diào)研

    Vision Transformer(VIT)調(diào)研

    綜述參考:https://zhuanlan.zhihu.com/p/598785102 2020 VIT 代碼庫 https://github.com/lucidrains/vit-pytorch 只有分類任務(wù),有訓(xùn)練的測試。有各種各樣的vit模型結(jié)構(gòu)。 原文 https://arxiv.org/abs/2010.11929 2021 Swim Transformer https://arxiv.org/abs/2103.14030 v2 https://arxiv.org/pdf/2111.09883.pdf code and pretrain_model https:/

    2023年04月11日
    瀏覽(19)
  • ViT-vision transformer

    ViT-vision transformer

    介紹 Transformer最早是在NLP領(lǐng)域提出的,受此啟發(fā),Google將其用于圖像,并對分類流程作盡量少的修改。 起源 :從機器翻譯的角度來看,一個句子想要翻譯好,必須考慮上下文的信息! 如:The animal didn’t cross the street because it was too tired將其翻譯成中文,這里面就涉及了it這個

    2024年02月15日
    瀏覽(26)
  • 論文閱讀 Vision Transformer - VIT

    論文閱讀 Vision Transformer - VIT

    通過將圖像切成patch線形層編碼成token特征編碼的方法,用transformer的encoder來做圖像分類 解決問題: transformer輸入限制: 由于自注意力+backbone,算法復(fù)雜度為o(n2),token長度一般要512才足夠運算 解決:a) 將圖片轉(zhuǎn)為token輸入 b) 將特征圖轉(zhuǎn)為token輸入 c)√ 切patch轉(zhuǎn)為token輸入 tra

    2024年02月01日
    瀏覽(24)
  • 《Vision Transformer (ViT)》論文精度,并解析ViT模型結(jié)構(gòu)以及代碼實現(xiàn)

    《Vision Transformer (ViT)》論文精度,并解析ViT模型結(jié)構(gòu)以及代碼實現(xiàn)

    《AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE》 論文共有22頁,表格和圖像很多,網(wǎng)絡(luò)模型結(jié)構(gòu)解釋的很清楚,并且用四個公式展示了模型的計算過程;本文章對其進行精度,并對源碼進行剖析,希望讀者可以耐心讀下去。 論文地址:https://arxiv.org/abs/2010.11929 源

    2024年02月05日
    瀏覽(20)
  • CV攻城獅入門VIT(vision transformer)之旅——VIT原理詳解篇

    CV攻城獅入門VIT(vision transformer)之旅——VIT原理詳解篇

    ??作者簡介:禿頭小蘇,致力于用最通俗的語言描述問題 ??往期回顧:CV攻城獅入門VIT(vision transformer)之旅——近年超火的Transformer你再不了解就晚了! ??近期目標(biāo):寫好專欄的每一篇文章 ??支持小蘇:點贊????、收藏?、留言?? ? ???在上一篇,我已經(jīng)詳細為大家

    2024年02月02日
    瀏覽(30)
  • ViT: Vision transformer的cls token作用?

    ViT: Vision transformer的cls token作用?

    知乎:Vision Transformer 超詳細解讀 (原理分析+代碼解讀)? CSDN:vit 中的 cls_token 與 position_embed 理解 CSDN:ViT為何引入cls_token CSDN:ViT中特殊class token的一些問題 Vision?Transformer在一些任務(wù)上超越了CNN,得益于全局信息的聚合。在ViT論文中,作者引入了一個class token作為分類特征。

    2024年02月01日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包