首页 > 其他分享 >多模态论文串讲-学习笔记(下)

多模态论文串讲-学习笔记(下)

时间:2024-10-10 19:22:56浏览次数:10  
标签:模态 串讲 模型 笔记 encoder BLIP 使用 文本

入门参考:跟着chatgpt一起学|多模态入门-CSDN博客

学习笔记(上):多模态论文串讲-学习笔记(上)-CSDN博客

学习参考:多模态论文串讲·下【论文精读·49】_哔哩哔哩_bilibili

学习笔记上介绍只使用transformer encoder的方法,本文来介绍下同时使用transformer encoder和decoder的方法。

 

1. BLIP

论文地址:https://arxiv.org/pdf/2201.12086

代码地址:GitHub - salesforce/BLIP: PyTorch code for BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation

摘要:

研究动机:

1.模型层面:

        仅使用encoder的方法虽然好,但是无法直接应用到text generation(例如:图像字幕生成)任务中。而同时使用transformer encoder和decoder,虽然可以适用于text generation 的任务,但是由于没有统一的框架,又没办法很好地使用于text image retrieval 任务。

2.数据层面:

        已有的模型基本上还是基于noisy的数据去进行训练的,虽然提升数据集规模还是可以带来非常好的性能的提升,但使用noisy的数据得到的结果并不是最优的。

        如何解决?

        使用captioner为网络图片生成合成标题,使用filter移除那些有噪声的标题。即:使用合成的标题替换图文不匹配的pair对。

bca986fdde324f51b0f6bb5a806ca9df.png

模型结构

上期模型结构回顾:

0d15917cffeb4d1eaef06f34f521bc19.pngALBEF:

        使用了2个N(12)层的Transformer encoder结构,左边是image encoder,右边被劈成了2个,下面的L层是text encoder,上面的N-L层来进行多模态融合。(相比而言,文本所需要的计算量较小,文本econder和多模态融合共享一个N层的Transformer encoder,计算量保持不变)

        图像和文本通过各自的encoder得到相应的图像、文本特征,两者计算对比学习的loss ITC,将两个特征学好。

        文本特征经过self-attention层,图像特征通过cross-attention层,两者进行融合,得到多模态的特征。然后使用这个多模态的特征,去做ITM任务。

VLMO:

        MoE结构,self-attention层全部共享参数,通过FFN来区分不同的模态(视觉、文本、多模态三种FFN,代表三个专家网络)

        训练时是一个模型,推理时,根据任务不同,选择不同的网络结构。

BLIP模型结构

cf8f205d3e2f410982b88caa25e50cb0.png

BLIP结合了ALBEF和VLMO两者的优点

左侧:ViT模型( 什么是VIT?-CSDN博客

右侧:文本部分有3个模型,其中颜色相同的代表共享参数,分布计算不同的目标函数(类似VLMO)。

        第一个Text encoder模型,和ViT模型学到的特征一起计算ITC。

        第二个模型是Image-grounded Text encoder,ViT的视觉特征通过cross attention层进来,和文本特征一起融合得到多模态特征,基于这个特征再计算ITM。(想想看,除了模型层数不同,这前2个模型是不是就和ALBEF做的事情一样了?)

        第三个模型就是为了解决他们研究动机中提到的现有模型无法完成图文生成类的任务。增加一个decoder,来帮助模型完成生成任务。由于是decoder,这部分的输入和前两个模型是不一样的,需要对输入进行mask,self-attention层也和前两个不一致,是causal self-attention,这部分是不共享参数的。目标函数是和GPT一致,LM,给定一些词,去预测接下来的单词。

        三个模型使用到的token也是不一样的,第一个模型使用的是cls token,第二个模型使用的是encode,第三个模型使用的是decode。        

在推理时,可以根据任务的不同,选择不同的模型

BLIP 中的capfilter 模型

ac7c50cbf47a4d57bf29bdd4de593bb7.png

为了提升数据质量,BLIP中提出了capfilter模型来提升数据质量。

具体做法:

使用网络上爬取的数据和干净数据集(CoCo)训练一个基础的MED(左边黄色部分),然后基于干净数据集,做encoder的微调,作为filter。

网络爬取的数据Tw(红色),经过filter后得到干净数据集Tw(绿色)。 

同时发现MED的decoder能力也非常强大,干净数据集,做decoder的微调,作为captioner。为网络爬取的图片生成标题,为Ts(红色),再经过filter,得到高质量的图像文本对Ts(绿色)

原始的数据集经过清洗和扩充,就从左上角变为了右下角这部分。

再基于新生成的数据集,做MED的训练,结果得到了大幅度的提升。

capfilter模型效果:

e852aecfdc1a4e6197970cec98d81fea.png

上面是网页爬取出来的结果,下面是captioner生成的title。而红色是被filter拒绝的,而绿色是被通过的。

消融实验结果

8428566ca0734ff3a1aedca31ea9c091.png

Bootstrap中,C代表captioner,F代表Filter。单独使用captioner或者filter均有增益,而单独使用captioner的增益更大。说明captioner带来的数据多样性是会更让模型收益的

下标B代表base,L代表Large,代表的是模型大小。

BLIP模型是分阶段训练的,训练时ViT模型的大小和后续capfilter的模型大小是可以独立开的,这个capfilter也是可以用在其他模型中,用来提升数据质量的。

Laion-600M 数据集

使用blip随机生成40个标题,再通过clip排序,选出最好的一个,作为文本图像对。

ce1b29ef857f4c25a10505ed49c58ffc.png

2.CoCa

论文地址:https://arxiv.org/pdf/2205.01917v1

代码地址:https://github.com/lucidrains/CoCa-pytorch

模型结构

14829856dc794545b796b1d522464ae2.png

CoCa:就是Contrastive Loss和Captioning Loss的缩写,而Captioning Loss就是上面BLIP中的LM,也就是GPT3的loss。

整体模型结构比较简单,和前面提到的ALBEF非常类似。左边是ViT,右边是文本和多模态。不同点在于:文本和多模态中使用的都是decoder,同时imager encoder上加了一层attentional pooling,能更好地适配各种任务。

好处:ALBEF在forward时需要计算3次(不同的Loss需要的模块不一致,而且会有依赖关系)而在CoCa中,只需要计算一次即可,大大降低了计算量。

总结:大力出奇迹,模型结构简单,数据集狂堆,结果超赞!

模型效果

全方面碾压当时的sota模型效果

a6709abf00d7440ea325dac20b6e1288.png

单模态的效果也非常强悍:

6addfcad67094421baf25619a3e1de67.png

3.BeiTv

论文地址:https://arxiv.org/abs/2208.10442

代码地址:

概述:

将图像视作一种语言imaglish,通过transform后,完全可以以处理文本的方式处理图像。

坚持使用public resource,方便大家复现效果。

模型结构

4c60b0da3cf0486585b40fac26f35e20.png

右侧就是VLMO中的模型结构,只是输入层有些许不同,目标函数简化为一个LM。

使用时,根据任务不同,可以选择不同的模型组成。

3b1f2ac830294c0e98474fc58e60bba2.png

4.总结

064f519df16247a7b2f9ee2317e75744.png

 

标签:模态,串讲,模型,笔记,encoder,BLIP,使用,文本
From: https://blog.csdn.net/qq_17246605/article/details/142617945

相关文章

  • 【视频笔记】408新增知识点信号——里昂视频
    文章目录**2.信号****3.信号的实现**4.信号的处理**①忽略信号****②执行信号的默认操作****③捕获井处理信号**几个Linux支持的典型信号:**5.信号的产生**①**通过终端按键(键盘)产生信号**例如,`Ctrl+C`发送2号信号SIGINT、`Ctrl+\`发送3号信号SIGQUIT②**程序异常时*......
  • 事件与概率 概率论复习笔记
    事件概率1.事件事件是指在某个试验或观察中可能发生的结果或结果的集合。是样本空间的一个子集,可以包含一个或多个样本点,也可以是整个样本空间。事件用大写字母,如A,B,C等表示。1.1概念1.1基本事件基本事件是指试验中不可再分的最简单的事件。每个基本事件代表一个单......
  • express 的使用笔记1
    官网地址:http://expressjs.com/zh-cn/starter/installing.html1.安装与启动1)首先要有node环境,作为一个前端开发,肯定已经有啦,那就直接开一个项目demo,然后安装express,如下图:2)上面操作之后,项目文件里应该会有一个app.js入口文件,如果没有,则可以借用gitbash使用touchapp.js来创......
  • 【刷题笔记】[ABC281G] Farthest City
    【刷题笔记】[ABC281G]FarthestCity题意求构造一个没有重边和自环【简单联通】的无向连通图,使得\(d[n]\)严格大于\(d[i]\),问有几种构造方案思路一道\(DP\)好题\(DP\)有\(2\)种题型,求最优值问题,和计数问题。本题为计数问题。因为在边权为1的最短路中\[d[i]=d[i-1]+1\]所......
  • Qt知识点笔记
    C++高级概念详解一、智能指针1.概述智能指针是C++中用于自动管理内存的工具,它能够确保在适当的时候自动释放内存,防止内存泄漏。2.类型比较2.1原始指针classMyClass{public:MyClass(){std::cout<<"Constructorcalled\n";}~MyClass(){std::cout<<"D......
  • 系统设计 - 笔记
              参考https://www.zhihu.com/question/268090534......
  • 【做题笔记】Atcoder 之 dp 专题训练
    ABCDEFGHI概率dp。设\(dp_{i,j}\)表示前\(i\)个硬币中有\(j\)个正面的概率。转移显然:\(dp_{i,j}=dp_{i-1,j-1}\timesp_i+dp_{i-1,j}\times(1-p_i)\)当\(j=0\)时,前\(i\)个硬币中没有正面。所以只能由反面的概率转移过来,转移为:\(dp_{i,j}=dp_{i-1,j}\time......
  • 银行家算法小笔记
    最著名的避免死锁算法:将操作系统视为银行家,操作系统管理的资源视为银行家管理的资金。数据结构的描述假设n个进程,m类资源,银行家需要定义下面4个数据结构:可利用资源向量最大需求矩阵分配矩阵需求矩阵描述:设Requests_i是进程P-i的请求向量,Request_i[j]=K表示进程P-i需......
  • prometheus学习笔记之进程监控process_exporter
    项目地址:https://github.com/ncabatoff/process-exporter一、安装process-exporterhttps://github.com/ncabatoff/process-exporter/releases/download/v0.8.3/process-exporter-0.8.3.linux-amd64.tar.gztarxfprocess-exporter-0.8.3.linux-amd64.tar.gzmvprocess-expo......
  • 多线程面试笔记
    1-多线程与并发基础1.1-线程和进程的区别什么是线程和进程?进程:程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理IO的。当一个程序被运行,......