亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原創

blip2 Qformer 預訓練

2024-08-05 09:32:07
180
0

先簡單講一下itc 和itm itg loss

itc loss

是將圖像和(he)query經過Q-former得到(dao)(dao)圖像的表(biao)(biao)征(zheng),文本經過Q-former得到(dao)(dao)文本表(biao)(biao)征(zheng),文本和(he)圖像矩陣乘計算對比損失

itm loss

是上一(yi)步圖像和文(wen)(wen)本(ben)表征,分別組(zu)(zu)(zu)成三(san)組(zu)(zu)(zu),一(yi)組(zu)(zu)(zu)相匹(pi)(pi)配(pei)的圖像和文(wen)(wen)本(ben),另外兩組(zu)(zu)(zu)不匹(pi)(pi)配(pei)的圖像和文(wen)(wen)本(ben),將三(san)組(zu)(zu)(zu)圖像和文(wen)(wen)本(ben)、query 一(yi)起送入Q-former,得(de)到三(san)組(zu)(zu)(zu)的分類損失(shi),相匹(pi)(pi)配(pei)的一(yi)組(zu)(zu)(zu)標簽為(wei)1,不匹(pi)(pi)配(pei)的標簽為(wei)0

itg loss

是將文(wen)本和(he)(he)第(di)一步計(ji)(ji)算(suan)itc loss 過程中圖像和(he)(he)query經過Q-former得到的每(mei)一層(ceng)隱藏層(ceng)狀態,一起送入Q-former,計(ji)(ji)算(suan)文(wen)本生成損(sun)失(shi)

1、首先定(ding)義一個(ge) blip2Qformer類 ,這個(ge)類里面包含一個(ge)vit視覺(jue)模型和(he)Qformer

note:Qformer是(shi)一個12層的(de)bert(only encoder)再加上一個全連接層

2、首先 圖(tu)像經過(guo)視覺模型(xing)得(de)到image_embeds size(16,257,1408),新(xin)建全為1的image_atts size(16,257)

3、query_tokens 是blip2Qformer類的屬性(xing),在類中被初(chu)始化全為(wei)0,size (1,32,768)

將query_tokens 復制為bachsize 為16, size為(16,32,768)

4、接下來詳解 圖(tu)像(xiang)特征 和 query 是如何(he)在Qformer中(zhong)進行運(yun)算的

4.1 query_tokens 作為(wei)Qformer的(de)輸入 首先經過(guo)embdding層(ceng),將query_tokens進行(xing)layerNorm和dropout,得(de)到(dao)embedding_output size(16,32,768)

根據embedding_output 的(de)(de)shape得到全為1的(de)(de)attention_mask size(16,32),把attention_mask extend為 extended_attention_mask size(16,1,1,32),現在extended_attention_mask中的(de)(de)值全為1,接著(zhu)需(xu)要(yao)使用公(gong)式(shi):(1-element)*-10000,作(zuo)用于每一(yi)個(ge)元素。這樣做的(de)(de)目的(de)(de)是將真正輸(shu)入的(de)(de)token mask 設置(zhi)為0,非token mask設置(zhi)為-10000

4.2 將(jiang)圖像特征賦(fu)值給encoder_hidden_states size(16,257,1408),設(she)置全為(wei)1的encoder_attention_mask size(16,257),把(ba)encoder_attention_mask extend為(wei) encoder_extended_attention_mask size(16,1,1,257),現(xian)在encoder_extended_attention_mask中的值全為(wei)1,接著需要使用公式(shi):(1-element)*-10000,作用于(yu)每一個元(yuan)素。這樣做的目的是將(jiang)真正輸入的token mask 設(she)置為(wei)0,非(fei)token mask設(she)置為(wei)-10000

4.3 將embedding_output  extended_attention_mask encoder_hidden_states encoder_attention_mask 一并送(song)入encoder中

note:encoder共計(ji)12層(ceng)(ceng), 每(mei)一層(ceng)(ceng)有一個(ge)self-attention ,每(mei)個(ge)偶數(shu)(shu)層(ceng)(ceng)多(duo)加一個(ge)cross attention,如(ru)果沒有cross attention,self-attention層(ceng)(ceng)計(ji)算完成后,輸出(chu)的結果也要經(jing)過升維(wei)全連接(jie)層(ceng)(ceng) gelu激活函(han)數(shu)(shu)層(ceng)(ceng) 降(jiang)維(wei)全連接(jie)層(ceng)(ceng) 和 droput層(ceng)(ceng)、LayerNorm層(ceng)(ceng)

4.3.1 首先(xian)embedding_output  extended_attention_mask做self-attention,embedding_output 復制為q, k, v , qkv各自經(jing)過一(yi)層(ceng)全連接(jie)層(ceng)完成一(yi)次特征重提取,緊接(jie)著再(zai)(zai)用heads_num將(jiang)其shape重新view,得(de)(de)到新的(de)(de)qkv size(16,12,32,64),然后q和k 先(xian)進行 matmul得(de)(de)到attetion_scores,attention_scores再(zai)(zai)除以根(gen)號(hidden_size / heads_num), 得(de)(de)到的(de)(de)結果再(zai)(zai)加(jia)上extended_attention_mask,再(zai)(zai)經(jing)過dropout得(de)(de)到最終的(de)(de)attention_scores size(16,12,32,32)

4.3.2 attention_scores和v在相乘得到context_layer size(16,12,32,64),將context_layer中的head_nums 的維度取消(xiao),得到outputs size(16,32,768)

4.3.3 將outputs 經過(guo)一層全(quan)連接層,并dropout之(zhi)后,加上embedding_output  在(zai)經過(guo)LayerNorm 得到outputs size(16,32,768)

4.3.4 將上述(shu)得到(dao)的outputs 再和encoder_hidden_states 做交叉注意(yi)力(li),得到(dao)cross_attention_outputs size(16,32,768),將其經(jing)(jing)過(guo)一(yi)個(ge)升維(wei)全(quan)連接(jie)(jie)層(ceng)和一(yi)個(ge)gelu激活函數(shu)層(ceng),再經(jing)(jing)過(guo)一(yi)個(ge)降維(wei)全(quan)連接(jie)(jie)層(ceng)和droput層(ceng)、LayerNorm層(ceng),得到(dao)layer_output size(16,32,768)

4.4 embedding_output  經(jing)過(guo)Qformer之后得(de)(de)到query_output size(16,32,768),query_output經(jing)過(guo)一個linear(768,256),并將輸(shu)出使用F.normalize做L2范(fan)數(shu)進行歸一化(hua),得(de)(de)到image_feats size(16,32,256)

4.5 上述(shu)講(jiang)(jiang)的是圖像和query_tokens之間的計算(suan),接(jie)下(xia)來(lai)講(jiang)(jiang)訓練的文本也(ye)要經(jing)過Qformer做self-attention,得到text_output size(16,32,768),將text_output第二個維(wei)度(du)的第一維(wei)提取出來(lai),賦值給text_feat size(16,768),在經(jing)過一個降(jiang)維(wei)的全連接(jie)層得到text_feat size(16,256)

4.6 

sim_q2t = torch.matmul(
            image_feats.unsqueeze(1), text_feat.unsqueeze(-1)
        ).squeeze()

得到sim_q2t size (16,16,32), 得到每(mei)一(yi)張(zhang)圖像(xiang)與所有(you)文本之(zhi)間(jian)的(de)距離向量。每(mei)個距離向量找(zhao)一(yi)個最大值(zhi),得到每(mei)張(zhang)圖像(xiang)與所有(you)文本之(zhi)間(jian)的(de)距離表示 {sim_i2t, _ = sim_q2t.max(-1)} sim_i2t size (16,16)

sim_t2q = torch.matmul(
            text_feat.unsqueeze(1).unsqueeze(1), image_feats_all.permute(0, 2, 1)
        ).squeeze()

得(de)到sim_t2q size(16,16,32),得(de)到每個(ge)文(wen)本與(yu)所有圖像的距(ju)離(li)向(xiang)量(liang)。每個(ge)距(ju)離(li)向(xiang)量(liang)中找(zhao)一(yi)個(ge)最大值,得(de)到每個(ge)文(wen)本與(yu)所有圖像的距(ju)離(li)表示{sim_t2i, _ = sim_t2q.max(-1)} sim_t2i size (16,16)

4.7 計(ji)算itc loss

targets = torch.linspace(rank * bs, rank * bs + bs - 1, bs, dtype=int).to(
            image.device
        )

loss_itc = (
                F.cross_entropy(sim_i2t, targets, label_smoothing=0.1)
                + F.cross_entropy(sim_t2i, targets, label_smoothing=0.1)
            ) / 2

4.8 計算itm loss

sim_t2i 首先將對(dui)角(jiao)線的(de)值(zhi)賦值(zhi)為(wei)-10000,即(ji)蓋(gai)住與自己(ji)最相似的(de)距離(li),經過softmax得到weights_t2i size(16,16)代(dai)表(biao)每個文本(ben)對(dui)所有(you)圖像的(de)距離(li)概(gai)率

sim_i2t 首先將對角(jiao)線的(de)值賦值為-10000,即(ji)蓋(gai)住與(yu)自己最(zui)相似的(de)距離,經過softmax得到weights_i2t size(16,16)代(dai)表每張圖片對所有的(de)文(wen)本的(de)距離概率

從sim_t2i選出每個文本(ben)最相(xiang)似但不是(shi)匹配的圖像(使用torch.multinomial(weights_t2i[b], 1).item()),選出16個最相(xiang)似的圖片,合(he)并為

image_embeds_neg size(16,257,1408)

從sim_i2t選(xuan)出每張圖(tu)片(pian)最相似但不匹配的(de)文(wen)本(使用 torch.multinomial(weights_i2t[b], 1).item()),選(xuan)出16個最相似的(de)文(wen)本,合(he)并為

text_ids_neg size(16,32)

text_ids_all 是將兩個(ge)text_tokens  和 text_ids_neg 拼接起(qi)來(lai) size(48,32)

query_tokens_itm 是將query_tokens復制(zhi)三(san)次 size(48,32,768)

image_embeds_all 是將image_embeds 和(he) image_embeds_neg 和(he) image_embeds 拼接起(qi)來 size (48,257,1408)

text_ids_all 和(he) image_embeds_all 這(zhe)樣安排是為了只(zhi)有text_tokens和(he)image_embeds相對應(ying)(ying)的位置,文本和(he)圖(tu)片才一一對應(ying)(ying)

將text_ids_all query_tokens_itm image_embeds_all 一(yi)并送入(ru)Q-former中

第(di)一步 先text_ids_all和query_tokens_itm 拼接起來,然后做self-attention得到outputs size(48,64,768)接著(zhu)經過linear  dropout LayerNorm size 仍(reng)為(48,64,768)

第二步 ; 將(jiang)上一步的outputs 選(xuan)取query_tokens 的序列長(chang)度(du)(32),得到query_attention_output size(48,32,768),與視覺特征

encoder_hidden_states size(48,257,1408) 做交叉注意力,在(zai)經過linear  dropout LayerNorm 得到attention_output size(48,32,768)

attention_output經過ffn得到layer_output size (48,32,768)

第(di)三步(bu) 將第(di)一步(bu)得到(dao)的outputs 選(xuan)取(qu)query_tokens 的序列(lie)長度之后的序列(lie),送(song)入(ru)ffn 得到(dao)layer_output_text size(48,32,768)

第四(si)步 將outputs 和layer_output_text 利用concat拼接(jie)起來得到layer_output size(48,64,768)

這樣(yang)做(zuo)的(de)(de)目錄是(shi)(shi)(shi)突出(chu)query,讓query參(can)與更多的(de)(de)學(xue)(xue)(xue)習,讓query作為(wei)中間(jian)的(de)(de)橋(qiao)梁(liang),與圖像特(te)征(zheng)交(jiao)互(hu),也與文(wen)本(ben)(ben)特(te)征(zheng)交(jiao)互(hu),最(zui)后經過(guo)12層(ceng)這樣(yang)的(de)(de)交(jiao)互(hu)學(xue)(xue)(xue)習,得(de)到(dao)Q-former的(de)(de)輸出(chu)layer_outputs size(48,64,768),接(jie)著再(zai)取前32個序列的(de)(de)特(te)征(zheng)vl_embeddings size (48,32,768),這樣(yang)設(she)計(ji)還是(shi)(shi)(shi)突出(chu)query的(de)(de)學(xue)(xue)(xue)習特(te)征(zheng)。最(zui)終利用(yong)vl_embeddings 去得(de)到(dao)圖像和(he)文(wen)本(ben)(ben)之間(jian)匹配(pei)的(de)(de)概率,vl_embeddings經過(guo)全連接(jie)層(ceng)和(he)取均值得(de)到(dao)logits size(48,2),標(biao)簽就是(shi)(shi)(shi)三組圖像和(he)文(wen)本(ben)(ben)特(te)征(zheng),只有第一組圖像和(he)文(wen)本(ben)(ben)匹配(pei),所以targets size(48),前16個為(wei)1,其余為(wei)零。再(zai)利用(yong)交(jiao)叉熵損失(shi)得(de)到(dao)itm 損失(shi)

4.9 計算(suan)itg loss

第一(yi)步 確定輸入,將text_tokens size(16,32)復制給(gei)decoder_input_ids,將其中每(mei)個句(ju)子的開頭設置為(wei)bert的起始編碼值(zhi)。然后將decoder_input_ids中padding的位置的數值(zhi)設置為(wei)-100,作為(wei)label。

第二步 將decoder_input_ids和視覺和query經(jing)過Q-former得(de)到的(de)query_output 再送(song)入(ru)Q-former,這里面特別強調(diao)的(de)是,需要將query_output中每一(yi)層(ceng)的(de)隱藏層(ceng)狀態和decoder_input_ids拼接起來作為(wei)k和v。再與(yu)decoder_input_ids做self-attention,得(de)到最(zui)終的(de)

encoder_outputs size(16,32,768),在經過ffn得到prediction_scores size(16,32,30523)

第三步 計算prediction_scores 與label的交叉熵損失

0條評論
0 / 1000
張****佳
7文章數
1粉絲數
張****佳
7 文章 | 1 粉絲(si)
張****佳
7文章數
1粉絲數
張****佳
7 文章 | 1 粉絲
原創(chuang)

blip2 Qformer 預訓練

2024-08-05 09:32:07
180
0

先簡單講一下itc 和itm itg loss

itc loss

是將圖(tu)(tu)(tu)像(xiang)和query經過Q-former得(de)到(dao)圖(tu)(tu)(tu)像(xiang)的(de)表征(zheng),文本經過Q-former得(de)到(dao)文本表征(zheng),文本和圖(tu)(tu)(tu)像(xiang)矩陣乘計算對比損(sun)失

itm loss

是上(shang)一(yi)步圖像和(he)文(wen)(wen)本表征,分(fen)別組(zu)成三組(zu),一(yi)組(zu)相匹(pi)配的圖像和(he)文(wen)(wen)本,另外兩(liang)組(zu)不(bu)匹(pi)配的圖像和(he)文(wen)(wen)本,將三組(zu)圖像和(he)文(wen)(wen)本、query 一(yi)起送(song)入(ru)Q-former,得(de)到三組(zu)的分(fen)類(lei)損(sun)失,相匹(pi)配的一(yi)組(zu)標簽為1,不(bu)匹(pi)配的標簽為0

itg loss

是將(jiang)文本和第(di)一(yi)步計算(suan)itc loss 過程中圖像和query經過Q-former得到的每一(yi)層隱藏層狀(zhuang)態,一(yi)起送(song)入Q-former,計算(suan)文本生成損失

1、首(shou)先定義一(yi)個(ge) blip2Qformer類 ,這個(ge)類里面包含一(yi)個(ge)vit視(shi)覺模型和Qformer

note:Qformer是一個12層的(de)bert(only encoder)再加(jia)上一個全連接(jie)層

2、首(shou)先 圖像(xiang)經過視(shi)覺模型得(de)到(dao)image_embeds size(16,257,1408),新建(jian)全(quan)為(wei)1的(de)image_atts size(16,257)

3、query_tokens 是blip2Qformer類(lei)的(de)屬(shu)性,在(zai)類(lei)中被初始(shi)化全為0,size (1,32,768)

將query_tokens 復制為(wei)bachsize 為(wei)16, size為(wei)(16,32,768)

4、接下來詳(xiang)解 圖像特(te)征 和 query 是如何在Qformer中進行運算的

4.1 query_tokens 作(zuo)為Qformer的輸入 首先經過(guo)embdding層,將query_tokens進行(xing)layerNorm和dropout,得(de)到embedding_output size(16,32,768)

根(gen)據embedding_output 的(de)(de)shape得到全為(wei)1的(de)(de)attention_mask size(16,32),把attention_mask extend為(wei) extended_attention_mask size(16,1,1,32),現(xian)在extended_attention_mask中的(de)(de)值全為(wei)1,接著需要使用公式:(1-element)*-10000,作用于每(mei)一個(ge)元素。這樣做的(de)(de)目的(de)(de)是將真正(zheng)輸(shu)入的(de)(de)token mask 設(she)置為(wei)0,非token mask設(she)置為(wei)-10000

4.2 將圖像特征賦值給encoder_hidden_states size(16,257,1408),設置(zhi)全(quan)為1的(de)(de)encoder_attention_mask size(16,257),把encoder_attention_mask extend為 encoder_extended_attention_mask size(16,1,1,257),現(xian)在encoder_extended_attention_mask中的(de)(de)值全(quan)為1,接著(zhu)需要使用(yong)公(gong)式:(1-element)*-10000,作用(yong)于每(mei)一個(ge)元素。這樣做的(de)(de)目的(de)(de)是將真正輸入的(de)(de)token mask 設置(zhi)為0,非(fei)token mask設置(zhi)為-10000

4.3 將(jiang)embedding_output  extended_attention_mask encoder_hidden_states encoder_attention_mask 一并(bing)送入encoder中

note:encoder共計12層(ceng)(ceng)(ceng), 每(mei)一層(ceng)(ceng)(ceng)有(you)一個self-attention ,每(mei)個偶數層(ceng)(ceng)(ceng)多加一個cross attention,如果(guo)沒有(you)cross attention,self-attention層(ceng)(ceng)(ceng)計算完成后,輸出的結(jie)果(guo)也(ye)要經過升維全連(lian)(lian)接(jie)層(ceng)(ceng)(ceng) gelu激活函數層(ceng)(ceng)(ceng) 降(jiang)維全連(lian)(lian)接(jie)層(ceng)(ceng)(ceng) 和(he) droput層(ceng)(ceng)(ceng)、LayerNorm層(ceng)(ceng)(ceng)

4.3.1 首先(xian)(xian)embedding_output  extended_attention_mask做self-attention,embedding_output 復制為(wei)q, k, v , qkv各自經過一(yi)層(ceng)全連接層(ceng)完成一(yi)次特(te)征重提取,緊接著再(zai)用heads_num將其(qi)shape重新(xin)(xin)view,得(de)到(dao)(dao)新(xin)(xin)的qkv size(16,12,32,64),然后q和k 先(xian)(xian)進行 matmul得(de)到(dao)(dao)attetion_scores,attention_scores再(zai)除以(yi)根(gen)號(hidden_size / heads_num), 得(de)到(dao)(dao)的結果再(zai)加上extended_attention_mask,再(zai)經過dropout得(de)到(dao)(dao)最終的attention_scores size(16,12,32,32)

4.3.2 attention_scores和v在相乘得到context_layer size(16,12,32,64),將context_layer中的head_nums 的維度取消,得到outputs size(16,32,768)

4.3.3 將(jiang)outputs 經過一層全連接層,并dropout之(zhi)后,加上embedding_output  在經過LayerNorm 得到(dao)outputs size(16,32,768)

4.3.4 將(jiang)上述(shu)得到的(de)outputs 再和(he)encoder_hidden_states 做交叉注意力,得到cross_attention_outputs size(16,32,768),將(jiang)其經(jing)(jing)過(guo)一個升維(wei)(wei)全連接層(ceng)和(he)一個gelu激活函數(shu)層(ceng),再經(jing)(jing)過(guo)一個降(jiang)維(wei)(wei)全連接層(ceng)和(he)droput層(ceng)、LayerNorm層(ceng),得到layer_output size(16,32,768)

4.4 embedding_output  經過Qformer之后得(de)到query_output size(16,32,768),query_output經過一(yi)個linear(768,256),并將(jiang)輸出使用F.normalize做L2范數進行歸(gui)一(yi)化,得(de)到image_feats size(16,32,256)

4.5 上(shang)述講的(de)是(shi)圖像和query_tokens之(zhi)間的(de)計算(suan),接下來講訓練(lian)的(de)文本(ben)也要(yao)經(jing)過Qformer做self-attention,得(de)到text_output size(16,32,768),將(jiang)text_output第(di)二個維度的(de)第(di)一(yi)維提取出來,賦值給(gei)text_feat size(16,768),在經(jing)過一(yi)個降維的(de)全連接層得(de)到text_feat size(16,256)

4.6 

sim_q2t = torch.matmul(
            image_feats.unsqueeze(1), text_feat.unsqueeze(-1)
        ).squeeze()

得到sim_q2t size (16,16,32), 得到每(mei)一張圖像(xiang)(xiang)與(yu)所(suo)有文本之間的距(ju)離向(xiang)(xiang)量(liang)。每(mei)個距(ju)離向(xiang)(xiang)量(liang)找一個最(zui)大(da)值,得到每(mei)張圖像(xiang)(xiang)與(yu)所(suo)有文本之間的距(ju)離表示 {sim_i2t, _ = sim_q2t.max(-1)} sim_i2t size (16,16)

sim_t2q = torch.matmul(
            text_feat.unsqueeze(1).unsqueeze(1), image_feats_all.permute(0, 2, 1)
        ).squeeze()

得(de)到sim_t2q size(16,16,32),得(de)到每(mei)個文(wen)本與(yu)(yu)所(suo)有(you)圖像(xiang)的(de)距(ju)離向量(liang)。每(mei)個距(ju)離向量(liang)中找一個最大(da)值,得(de)到每(mei)個文(wen)本與(yu)(yu)所(suo)有(you)圖像(xiang)的(de)距(ju)離表示(shi){sim_t2i, _ = sim_t2q.max(-1)} sim_t2i size (16,16)

4.7 計算itc loss

targets = torch.linspace(rank * bs, rank * bs + bs - 1, bs, dtype=int).to(
            image.device
        )

loss_itc = (
                F.cross_entropy(sim_i2t, targets, label_smoothing=0.1)
                + F.cross_entropy(sim_t2i, targets, label_smoothing=0.1)
            ) / 2

4.8 計算itm loss

sim_t2i 首先將對(dui)角線的值賦值為-10000,即蓋住(zhu)與自己最相似(si)的距(ju)離,經(jing)過softmax得到weights_t2i size(16,16)代表每個文本對(dui)所有圖像的距(ju)離概率

sim_i2t 首(shou)先將(jiang)對(dui)(dui)角線的值賦值為(wei)-10000,即蓋住與自己最相似的距離,經過softmax得到weights_i2t size(16,16)代(dai)表每張(zhang)圖片對(dui)(dui)所有的文本的距離概率

從(cong)sim_t2i選出每個(ge)文本最(zui)相似但不是匹配的(de)圖像(xiang)(使用torch.multinomial(weights_t2i[b], 1).item()),選出16個(ge)最(zui)相似的(de)圖片,合并為

image_embeds_neg size(16,257,1408)

從sim_i2t選出每張圖片最相似但不匹配的文本(ben)(使用 torch.multinomial(weights_i2t[b], 1).item()),選出16個最相似的文本(ben),合并為

text_ids_neg size(16,32)

text_ids_all 是將(jiang)兩(liang)個(ge)text_tokens  和 text_ids_neg 拼(pin)接起來 size(48,32)

query_tokens_itm 是將query_tokens復制(zhi)三次 size(48,32,768)

image_embeds_all 是將image_embeds 和(he) image_embeds_neg 和(he) image_embeds 拼接起來 size (48,257,1408)

text_ids_all 和 image_embeds_all 這(zhe)樣安排是為了只有text_tokens和image_embeds相對應(ying)的位置,文(wen)本和圖片才一一對應(ying)

將text_ids_all query_tokens_itm image_embeds_all 一并(bing)送入(ru)Q-former中

第一步 先text_ids_all和query_tokens_itm 拼接(jie)起(qi)來,然(ran)后(hou)做self-attention得到outputs size(48,64,768)接(jie)著經(jing)過linear  dropout LayerNorm size 仍(reng)為(wei)(48,64,768)

第(di)二(er)步  將(jiang)上(shang)一(yi)步的outputs 選取query_tokens 的序(xu)列長度(32),得到(dao)query_attention_output size(48,32,768),與(yu)視覺特征

encoder_hidden_states size(48,257,1408) 做交叉注意力(li),在經(jing)過linear  dropout LayerNorm 得(de)到(dao)attention_output size(48,32,768)

attention_output經過(guo)ffn得到layer_output size (48,32,768)

第(di)三步 將第(di)一(yi)步得(de)到(dao)(dao)的outputs 選取query_tokens 的序列長度之(zhi)后的序列,送入ffn 得(de)到(dao)(dao)layer_output_text size(48,32,768)

第四(si)步 將outputs 和layer_output_text 利用concat拼(pin)接起來得到layer_output size(48,64,768)

這樣做的(de)(de)(de)(de)(de)目錄是(shi)突出(chu)query,讓query參(can)與(yu)更多的(de)(de)(de)(de)(de)學(xue)習,讓query作(zuo)為(wei)中間(jian)的(de)(de)(de)(de)(de)橋梁,與(yu)圖像特(te)征(zheng)交(jiao)互(hu),也與(yu)文本(ben)特(te)征(zheng)交(jiao)互(hu),最(zui)后經過(guo)12層(ceng)這樣的(de)(de)(de)(de)(de)交(jiao)互(hu)學(xue)習,得(de)(de)到(dao)(dao)Q-former的(de)(de)(de)(de)(de)輸(shu)出(chu)layer_outputs size(48,64,768),接(jie)(jie)著再取(qu)前32個序列(lie)的(de)(de)(de)(de)(de)特(te)征(zheng)vl_embeddings size (48,32,768),這樣設計還是(shi)突出(chu)query的(de)(de)(de)(de)(de)學(xue)習特(te)征(zheng)。最(zui)終利用vl_embeddings 去得(de)(de)到(dao)(dao)圖像和(he)文本(ben)之間(jian)匹(pi)配(pei)的(de)(de)(de)(de)(de)概率(lv),vl_embeddings經過(guo)全(quan)連接(jie)(jie)層(ceng)和(he)取(qu)均值得(de)(de)到(dao)(dao)logits size(48,2),標簽(qian)就是(shi)三(san)組圖像和(he)文本(ben)特(te)征(zheng),只有(you)第一組圖像和(he)文本(ben)匹(pi)配(pei),所以targets size(48),前16個為(wei)1,其余為(wei)零。再利用交(jiao)叉熵損(sun)失(shi)得(de)(de)到(dao)(dao)itm 損(sun)失(shi)

4.9 計算itg loss

第一步 確定輸入,將text_tokens size(16,32)復制給decoder_input_ids,將其(qi)中每個句子(zi)的(de)開頭(tou)設(she)置為bert的(de)起(qi)始編碼值(zhi)。然(ran)后將decoder_input_ids中padding的(de)位置的(de)數值(zhi)設(she)置為-100,作為label。

第(di)二(er)步 將decoder_input_ids和視覺和query經(jing)過(guo)Q-former得(de)到的(de)query_output 再送入(ru)Q-former,這里面特別強(qiang)調(diao)的(de)是(shi),需要(yao)將query_output中每一層的(de)隱藏層狀態(tai)和decoder_input_ids拼接起(qi)來作為(wei)k和v。再與(yu)decoder_input_ids做self-attention,得(de)到最終的(de)

encoder_outputs size(16,32,768),在經(jing)過ffn得到prediction_scores size(16,32,30523)

第三步(bu) 計(ji)算prediction_scores 與label的交叉熵損(sun)失

文章來自個人專欄
文章 | 訂閱
0條評論
0 / 1000
請輸入你的評論
0
0