微調訓練
我們以(yi)batchsize=16為(wei)例
1、圖片首先通(tong)過視覺特(te)(te)征提取網絡,被(bei)抽象出特(te)(te)特(te)(te)征,圖像特(te)(te)征再(zai)經過 layernorm,得(de)到 imag_embeds size為(16,677,1480)的矩陣
2、將(jiang)image_embeds送入blip2中的(de)Q-former,經(jing)過(guo)query的(de)自注意(yi)力(li)和query與image_embeds的(de)交叉(cha)注意(yi)力(li),得到(dao)圖(tu)像特征的(de)文(wen)本token化表(biao)達query_output size(16,32,768)
3 、query_output 經過一個(ge)全連(lian)接(jie)層(線性投影層),將768維(wei)度變成2560,2560是大語言(yan)模(mo)型的(de)隱藏層維(wei)度。得到inputs_opt size(16,32,2560),并定義全為1的(de)atts_opt size(16,32)
4、我們給圖(tu)像標注了文本描述(shu),將(jiang)16句圖(tu)像描述(shu)送(song)入大語言模型(xing)(LLM)token編碼(ma)器得(de)到(dao)文本描述(shu)編碼(ma)opt_tokens.input_ids size(16,22),將(jiang)opt_tokens.input_ids中padding的token設(she)置(zhi)為(wei)-100,得(de)到(dao)targets size(16,22),然后把targets中每條(tiao)文本開頭的prompt(例如 a photo of)對應的token設(she)置(zhi)為(wei)-100
5、定義一個全為-100的empty_targets size(16,32)
6、把empty_targets和targets使(shi)用torch.cat 拼接為targets size(16,54)
7、將(jiang)opt_tokens送入大語(yu)(yu)言(yan)模(mo)型的embedding層,得到大語(yu)(yu)言(yan)模(mo)型的inputs_embeds size(16,22,2560)
8、將inputs_opt 和 inputs_embeds 使(shi)用(yong)torch.cat 拼接成inputs_embeds size(16,54,2560)
9、將atts_opt 和 opt_tokens.attention_mask 拼接(jie)成attention_mask szie(16,54)
10、將(jiang)inputs_embeds 和 attention_mask 、targets 一并送(song)入(ru)大(da)語(yu)言模型中,使用交叉熵損(sun)失計算(suan)大(da)語(yu)言模型的輸出和targets之間的loss,然(ran)后(hou)做反向(xiang)傳播
推理
blip2推理使用的(de)是transformer庫(ku)中的(de)GenerationMixin類的(de)generate方法,該(gai)方法被OPTForCausalLM繼承
首先圖片(pian)經過視覺網絡(luo)提取(qu)到(dao)視覺特(te)征
然(ran)后視(shi)(shi)覺特征與Q-former中的(de)query做交叉注意力得到最終(zhong)的(de)視(shi)(shi)覺語義化的(de)token表示
視覺token化的特征(zheng)經過(guo)線性投(tou)影層(ceng)投(tou)影到大語言模型的隱藏層(ceng)維度,得(de)到inputs_opt
最后將(jiang)(jiang)inputs_opt 和(he) 圖像描述的(de)prompt 拼在一起送給大語言模(mo)型(xing),大語言模(mo)型(xing)通過設置top-k top-p 和(he) num_beams 、temperature選擇不同的(de)token選擇策略(lve),最終(zhong)得到(dao)模(mo)型(xing)的(de)輸(shu)出, 將(jiang)(jiang)最終(zhong)輸(shu)出利用模(mo)型(xing)文本解碼器(qi)將(jiang)(jiang)token翻譯為文本。