多模态学习笔记
文章平均质量分 94
FlowerLoveJava
我是一个小菜鸟,想要学好java语言,skr~
展开
-
[CLIP-VIT-L + Qwen] 多模态大模型源码阅读 - 模型训练篇
collate_fn传入之前导入的data_collate函数,对训练数据进行统一的批处理,并利用partial函数固定tokenizer,black_token_length等参数,有关data_collate函数的细节请参考。训练参数的数据类,继承自transformers.TrainingArguments,并添加了一个新的参数feature_proj_lr,用于调整中间映射层的学习率。本节介绍的是模型训练部分。多模态模型的训练代码,将视觉模型的参数冻结,并采用LoRA对语言模型进行微调。原创 2024-08-27 14:20:23 · 303 阅读 · 0 评论 -
[CLIP-VIT-L + Qwen] 多模态大模型源码阅读 - DataSet篇
初始化caption_labels,开头是长度为(black_token_length + 当前字幕长度 - L - 1)的掩码,中间为字幕的倒数L个token,结尾为长度是(max_lenght - 当前字幕长度)的掩码。使用导入的创建上下文方法,传入初始化的成员变量self.tokennizer分词器,prompt,初始化历史信息为空,代表当前没有历史对话,system作为描述信息,描述了系统功能。如Multimodal[1],其中Multimodal为类的实例对象,1为传入的index参数值。原创 2024-08-26 13:39:27 · 868 阅读 · 0 评论 -
[CLIP-VIT-L + Qwen] 多模态大模型源码阅读 - MultiModal篇
使用nn.Sequential创建一个顺序执行的深度网络块,nn,Linear为全连接线性层,第一个全连接层接受视觉模型的输入,将输入的维度转换为语言模型隐藏层维度的输出,经过一个激活函数GELU增加模型的非线性,经过另一个线性全连接层转换后输出。调用父类的to方法,传入*args, **kwargs参数,提高代码的可拓展性。假设传入的Input_ids的size为(1,5),利用语言模型生成结果的size为(1,10),这里切片操作的目的就是只获取模型的生成结果,即预测结果,out[1,5:-1]原创 2024-08-24 13:30:39 · 671 阅读 · 0 评论 -
[CLIP-VIT-L + Qwen] 多模态大模型源码阅读 - trainer篇
我们传入的model参数实际上是一个以Qwen为语言模型,SIGLIP/CLIP-VIT为视觉模型的多模态模型参数,所有这里的model.LLM大概率是语言模型,saved_params_llm获取语言模型微调后的adapter状态字典,并将其存储到输出路径下的adapter_model.bin文件中。其余的参数在后续都将应用权重衰减。如果设置了投影层的学习率,我们获取opt_model中所有名字里带有‘feature_proj’的参数,这些参数都是投影层参数,代表我们的模型是多模态模型,具有投影层。原创 2024-08-22 15:59:30 · 754 阅读 · 0 评论 -
[CLIP-VIT-L + Qwen] 多模态大模型源码阅读 - 视觉模型篇
定义一个继承CLIPModel成员变量和成员方法的visualModel类,在python3.5之后,可以对传递参数的类型进行注解,这里的CLIPModel是一个特定的自定义参数类型,用于指定传入的config参数是CLIPConfig类型,并使用传递的一般配置参数初始化父类。本节中将阅读视觉模型部分,即重构后的visual-encoder的源码,位于文件夹visual下的CLIP_VIT.py文件,模型选择的是clip-vit-large-patch14。利用传入的通用配置模型参数初始化父类。原创 2024-08-21 22:49:06 · 1152 阅读 · 0 评论 -
[CLIP-VIT-L + Qwen] 多模态大模型源码阅读 - 语言模型篇(1)
想要做一个以Qwen-7B-Insturct为language decoder, 以CLIP-VIT-14为vision encoder的image captioning模型,找了很多文章和库的源码,但是无奈都不怎么看得懂,刚开始打算直接给language decoder加上cross attention层对接vison encoder的图片编码结果,无奈不会写TAT,看了Qwen的源码半天都没搞懂这么多类是干什么的,心累。input_ids:输入序列的索引,将token映射为唯一的整数数字索引。原创 2024-08-17 23:37:14 · 538 阅读 · 0 评论 -
[CLIP-VIT-L + Qwen] 多模态大模型源码阅读 - 语言模型篇(4)
本节中将接着看MQwen.py中的剩余源码,即MQwenLMHeadModel和main函数源码,MQwen.py重构了Qwen大模型中QwenModel的前向传播代码和QwenLMHeadModel的部分代码,以适配视觉编码器CLIP-VIT-L和语言模型Qwen的多模态架构,QwenModel类作为基座模型,QwenLMHeadModel 是基于 QwenModel 的一个扩展,加入了针对特定下游任务的头,在后续我们主要使用重写后的MQwenLMHeadModel作为多模态架构中的语言模型。原创 2024-08-21 14:57:04 · 1004 阅读 · 0 评论 -
CLIP-VIT-L + Qwen 多模态源码阅读 - 语言模型篇(3)
如果batch_size合法,我们重塑attention_mask的第一个维度为batch_size。其他情况,我们初始化一个空的ntk_alpha_list,如果存在attention_mask且kv_seq_len大于继承的成员变量self.seq_len,我们用attenrion_mask计算序列的实际长度,这里去除掉四维张量attenrion_mask的中间两个维度,计算seq_len维度中指为0的元素数量(由于之前翻转了attention_mask,所以值为0代表我们需要关注的元素)。原创 2024-08-20 22:23:05 · 1372 阅读 · 0 评论 -
[CLIP-VIT-L + Qwen] 多模态大模型源码阅读 - 语言模型篇(2)
我们确保token_type_id和position_id的最后一个维度都是seq_len + image_context_len,以便于后续的处理。最后对position_id进行重新塑性,position_ids原本的size为(seq_len + image_context_len,),我们添加一个为1的维度(用unsqueeze(0)),并且将position_ids最后一个维度重塑为(seq_len + image_context_len),这里可能有点多此一举,但是为了代码的健壮性也无妨。原创 2024-08-19 23:02:56 · 854 阅读 · 0 评论