0. 前言
文章是公司内部分享学习写的预研报告,里面有小部分文段是直接从网上借鉴的,侵删
1. 任务和方法历史进化:
- 在大模型等类似的预训练模型的方式(以包含“预训练阶段”等n阶段训练方式为特色)为主流之前,以前通常把“从图片到文字”的多模态的任务进行了细致的划分:
如:图片描述任务/看图说话任务(Image Caption)、视觉问答任务(Visual Question Answering,VQA)等等;
在大模型的技术路线成为主流后,由于预训练阶段不区分具体的细分任务,而是完成了A模态分布到B模态分布的理解和映射,因此现在普遍统称为图生文任务(image2text);
- 以往针对单一任务,一般流行end2end的网络;近期借助于NLP的发展,利用大模型既有的对自然语言的理解能力和知识,衍生了一些基于LLM模型能力之上的方法,如ALBEF、BLIP、CLIP等。如BLIP是freeze住LLM的参数,只训练特定部分的网络(而不是以前流行的那种end2end方式)
(以前之所以被“e2e”思想统治,是因为以前的网络大家发现e2e训练出来的结果比多stage训练的结果好太多了;而好太多的原因有很多,举几个个人的经验:
- 数据量没到训练LLM这个规模,再好的architecture都无法很好的学习到分布&在高维空间的有效解耦;
- 以前有大量网络也是尝试过encoder-decoder的结构,但不敢打断分开训练encoder和decode的原因是中间的象征knowledge/memory/code(这些是不同论文里对中间这个bottleneck的称呼)的bottleneck对数据的抽取并不足够有效;换句话说,虽然在论文里对这个提取出来的array叫做knowledge,但它没有资格被叫做“knowledge”;有些论文中或者说很多算法工程师一些具体的实验中都发现了类似的问题,但因为pipeline通常都定下来了,对“经过bottleneck出现信息缺失”等问题的尝试修复也只是一些“小巧思”,比如加多一个MLP用作简单的attention网络来对knowledge有更好的提取,等等。
- 预训练中经过特别设计后的任务和损失函数,辅助有效地训练了庞大的基座模型;如BEiT中训练阶段设计了一个MIM(masked image modeling)的预训练任务,基于损坏的图像patch恢复原始视觉token;但BEiT用于的细分任务如图像分割,就与MIM任务毫无关系;
- 架构上比起之前的e2e思想统治时期的模型架构应该要优秀一些(这个是我的猜测,目前相关的研究还有很多,有些在研究模型搞这么大究竟会不会带来更多的坏处,e.g.最近有一篇文章认为LLM纯靠“死记硬背”)),例如现在的pretrain+finetune的方式在预训练阶段会设计不同的任务固定不同部分的模型参数分别进行训练。
2. BLIP的架构是从ALBEF改动而来:
ALBEF架构
BLIP(Bootstrapping Language-Image Pretraining):为什么叫Bootstrapping,是因为训练数据来自网络图文对,包含大量噪声,所以增加了一个在线数据打标签和清理的任务,把处理好的数据继续用来迭代原模型。
BLIP1架构
BLIP2架构
3. BLIP的这种架构来做图生文任务,相比于以前流行的框架(通常为end2end):
3.1 数据集标注/模型输入输出:
- 传统图生文任务要求有人工标注,标注过程如下:
给一张图片,如:
标注人员1会打上标签“一个小孩在骑马”;
标注人员2会打上标签“小孩在马上训练马术”;
标注人员3会打上标签“身穿马术服的小孩在白色的马上”;
不同的标注人员对图片的描述语句的方式不一样,有的会描述一件事、有的会描述具体的专业词汇、有的会强调位置关系;训练过程中对这些不同的groundtruth用比较宽松的策略都训进去,能提升模型输出表达的兼容能力。
- BLIP提出的CapFilt方式:
在BLIP1中提出了CapFilt方式可以优化传统的图片描述标签;在BLIP2中引入了LLM的能力,大幅提升了对图片的描述能力。
3.2 训练方式:
- 传统的end2end方式一次性训练完,没有预训练阶段和微调阶段的区分
1)end2end方式不能很好的训练多分支或者规模较大的模型
2)end2end方式的训练成本较高
- BLIP为代表的Pretrain+Finetune的方式,对各个部位分开训练
1)成本较低
2)利用了大模型的能力,节省了标注成本和时间
5. 项目分享:clip_interrogator
5.1 clip_interrogator 1
CLIP Interrogator - a Hugging Face Space by pharmapsychotic
5.2 clip_interrogator 2.1
CLIP Interrogator 2 - a Hugging Face Space by fffiloni
5.3 对ComfyUI框架写了个移植的clip_interrogator的插件
unanan/ComfyUI-clip-interrogator: Unofficial ComfyUI custom nodes of clip-interrogator (github.com)
5.4 另一个利用stable diffusion的Image2text项目:WD14
WaifuDiffusion v1.4 Tags - a Hugging Face Space by SmilingWolf