searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

多模态blip2微调训练和推理详解

2024-08-05 09:32:06
68
0

微调训练

我们以batchsize=16为例

1、图片首先通过视觉特征提取网络,被抽象出特特征,图像特征再经过 layernorm,得到 imag_embeds size为(16,677,1480)的矩阵

2、将image_embeds送入blip2中的Q-former,经过query的自注意力和query与image_embeds的交叉注意力,得到图像特征的文本token化表达query_output size(16,32,768)

3 、query_output 经过一个全连接层(线性投影层),将768维度变成2560,2560是大语言模型的隐藏层维度。得到inputs_opt size(16,32,2560),并定义全为1的atts_opt size(16,32)

4、我们给图像标注了文本描述,将16句图像描述送入大语言模型(LLM)token编码器得到文本描述编码opt_tokens.input_ids size(16,22),将opt_tokens.input_ids中padding的token设置为-100,得到targets size(16,22),然后把targets中每条文本开头的prompt(例如 a photo of)对应的token设置为-100

5、定义一个全为-100的empty_targets size(16,32)

6、把empty_targets和targets使用torch.cat 拼接为targets size(16,54)

7、将opt_tokens送入大语言模型的embedding层,得到大语言模型的inputs_embeds size(16,22,2560)

8、将inputs_opt 和 inputs_embeds 使用torch.cat 拼接成inputs_embeds size(16,54,2560)

9、将atts_opt 和 opt_tokens.attention_mask 拼接成attention_mask szie(16,54)

10、将inputs_embeds 和 attention_mask 、targets 一并送入大语言模型中,使用交叉熵损失计算大语言模型的输出和targets之间的loss,然后做反向传播

推理

blip2推理使用的是transformer库中的GenerationMixin类的generate方法,该方法被OPTForCausalLM继承

首先图片经过视觉网络提取到视觉特征

然后视觉特征与Q-former中的query做交叉注意力得到最终的视觉语义化的token表示

视觉token化的特征经过线性投影层投影到大语言模型的隐藏层维度,得到inputs_opt

最后将inputs_opt 和 图像描述的prompt 拼在一起送给大语言模型,大语言模型通过设置top-k top-p 和 num_beams 、temperature选择不同的token选择策略,最终得到模型的输出, 将最终输出利用模型文本解码器将token翻译为文本。

0条评论
0 / 1000
张****佳
7文章数
1粉丝数
张****佳
7 文章 | 1 粉丝
原创

多模态blip2微调训练和推理详解

2024-08-05 09:32:06
68
0

微调训练

我们以batchsize=16为例

1、图片首先通过视觉特征提取网络,被抽象出特特征,图像特征再经过 layernorm,得到 imag_embeds size为(16,677,1480)的矩阵

2、将image_embeds送入blip2中的Q-former,经过query的自注意力和query与image_embeds的交叉注意力,得到图像特征的文本token化表达query_output size(16,32,768)

3 、query_output 经过一个全连接层(线性投影层),将768维度变成2560,2560是大语言模型的隐藏层维度。得到inputs_opt size(16,32,2560),并定义全为1的atts_opt size(16,32)

4、我们给图像标注了文本描述,将16句图像描述送入大语言模型(LLM)token编码器得到文本描述编码opt_tokens.input_ids size(16,22),将opt_tokens.input_ids中padding的token设置为-100,得到targets size(16,22),然后把targets中每条文本开头的prompt(例如 a photo of)对应的token设置为-100

5、定义一个全为-100的empty_targets size(16,32)

6、把empty_targets和targets使用torch.cat 拼接为targets size(16,54)

7、将opt_tokens送入大语言模型的embedding层,得到大语言模型的inputs_embeds size(16,22,2560)

8、将inputs_opt 和 inputs_embeds 使用torch.cat 拼接成inputs_embeds size(16,54,2560)

9、将atts_opt 和 opt_tokens.attention_mask 拼接成attention_mask szie(16,54)

10、将inputs_embeds 和 attention_mask 、targets 一并送入大语言模型中,使用交叉熵损失计算大语言模型的输出和targets之间的loss,然后做反向传播

推理

blip2推理使用的是transformer库中的GenerationMixin类的generate方法,该方法被OPTForCausalLM继承

首先图片经过视觉网络提取到视觉特征

然后视觉特征与Q-former中的query做交叉注意力得到最终的视觉语义化的token表示

视觉token化的特征经过线性投影层投影到大语言模型的隐藏层维度,得到inputs_opt

最后将inputs_opt 和 图像描述的prompt 拼在一起送给大语言模型,大语言模型通过设置top-k top-p 和 num_beams 、temperature选择不同的token选择策略,最终得到模型的输出, 将最终输出利用模型文本解码器将token翻译为文本。

文章来自个人专栏
AI技术分享
7 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0